1

%~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 ...) に変更すると、正しい結果が得られます

4

1 に答える 1

1

いくつかの調査の後、この問題に関するウェブサイトを 1 つだけ見つけました: http://www.pcreview.co.uk/forums/long-filename-short-filename-conversion-incorrect-t3693699.html エラーは、内部に 2 つの「長い名前」があるパスで発生し、文字の長さも影響します。

C:>md "12345 6789\t st"

C:>echo test> "12345 6789\t st\test.dat"

C:>for /r "12345 6789" %i in (*.*) do @echo %~si
C:\123456~1\TST~1\test.datt

ここで追加の が発生しtます。最初のパス名が長くなると、拡張子もどんどん長くなります:

 C:>for /r "12345     6789" %i in (*.*) do @echo %~si
 C:\123456~1\TST~1\test.datt.dat

dir /xコマンドは影響を受けません。

于 2013-03-25T21:55:30.640 に答える