%~s1
使用することで、最初の引数を短いパスに展開できることを知っています( ref)
なんらかの理由で、この短縮されたパスにファイル拡張子が追加されるという奇妙な問題が発生しました。たとえば、次の単純なバッチ ファイルを考えてみましょうtest.cmd
。
@echo %1
@echo %~s1
この引数を渡すと:
C:\>test.cmd "C:\Documents and Settings\zzz\My Documents\My Music\Library\I AWAKE\[2008] The Core\I Awake - The Cor.m4a"
"C:\Documents and Settings\zzz\My Documents\My Music\Library\I AWAKE\[2008] The Core\I Awake - The Cor.m4a"
C:\DOCUME~1\zzz\MYDOCU~1\MYMUSI~1\Library\IAWAKE~1\_2008_~1\I Awake - The Cor.m4am4a
返された短縮パスに「m4a」が追加されていることがわかります。
なぜこれが起こっているのか誰かが知っていますか?
アップデート
誰かが喜んでそれを再現する方法は次のとおりです(使用されている一部の文字に関連しているかわからないため、同じフォルダー名を使用しました):
C:\Temp>md "My Documents\Library\I AWAKE\[2008] The Core\"
C:\Temp>echo test > "My Documents\Library\I AWAKE\[2008] The Core\I Awake - The Core.dat"
C:\Temp>test.cmd "c:\Temp\My Documents\Library\I AWAKE\[2008] The Core\I Awake - The Core.dat"
ファイル名は存在しますが、短縮されないことに注意してください。ファイル名を短縮する必要がない場合は、次のようになります。
I AWAKE
フォルダ名と関係があります。他のフォルダー名を変更すると、この間違った結果が得られますが、I AWAKE
他の名前 (で始まらないI ...
) に変更すると、正しい結果が得られます