私は完全修飾パス名を取り込んで、8.3形式の短い名前のバージョンを出力のWindows XPでのバッチファイルを作成しようとしている...バッチパラメータ%〜s1が間違って8.3形式の短い名前になります
@echo off
echo "%~s1"
私は、これは間違ったパスとファイルを出力し一つの特定のケースに遭遇してきた
...
C:\>test.bat "C:\Documents and Settings\angus\Local Settings\Temporary Internet Files\Content.IE5\2JSTM34V\62[1].ja2"
"C:\DOCUME~1\angus\LOCALS~1\TEMPOR~1\Content.IE5\2JSTM34V\62_1_~1.JA2M34V\62[1].ja2"
なお、上記の出力( "C:\ DOCUME〜1つの\アンガス\ LOCALS〜1 \ TEMPOR〜1 \コンテンツ.IE5 \ 2JSTM34V \ 62_1_〜1.JA2M34V \ 62 [1] .ja2 ")は存在しません。しかし、その出力から ".JA2M34V \ 62 [1]"セクションを削除すると、結果の文字列は元の入力ファイルへの有効なパスになります。
これは、ファイル名に角括弧([])を使用すると問題があるようです。私は、同じディレクトリ内のファイル62.ja2を作成した場合、出力が...
C:\>test.bat "C:\Documents and Settings\angus\Local Settings\Temporary Internet Files\Content.IE5\2JSTM34V\62.ja2"
"C:\DOCUME~1\angus\LOCALS~1\TEMPOR~1\Content.IE5\2JSTM34V\62.ja2"
これは、Windowsのバグですが正しいのだろうか?バッチファイルがこのファイル名を適切に処理するための回避策があるかどうかは誰にも知られていますか?
最後の行の結果はありません、それはだである場合にのみ発生しますあなたのコードのバグ。あなたは愚かなソフトウェアとの下位互換性のためだけに存在する古いハックを使用しています。短い名前は使用しないでください。 –