1

'dir' コマンドを /b オプション (そのままの形式) と共に使用すると、/l (小文字) オプションが認識されないようです。ディレクトリ内のファイルの拡張子を取得しようとしていますが、大文字と小文字を区別することができず、拡張子に大文字が含まれるすべてのファイルに対して次のコードが役に立たなくなります。

for /f "delims=" %%a in ('dir /l /b/a-d /s') do (
if "%%~xa"==".iso" echo %%~xa
if "%%~xa"==".bin" echo %%~xa
)

これに対する回避策はありますか?

4

3 に答える 3

2

dir /lあなたがそこで与えたスイッチの組み合わせでさえ、確かに私のために働きます。しかし、そうでなかったとしても、2つの簡単なことがあります。

  1. 出力for /fを繰り返すために使用しないでください。dirコンソールオプションを正しく設定しない限り、エラーが発生しやすく、Unicode文字が壊れます。使用する

    for /r %%a in (*) do ...
    

    代わりに、ファイルを再帰的に繰り返し処理します。

  2. /I次のオプションとして使用しifます。

    if /i "%%~xa" EQU ".iso" ...
    

そして最後に、簡単なルートをとってみませんか。

for /r %%a in (*.iso *.bin) do ...

これは、ケースに関係なく機能します。

H:.
│   x
│
├───a
│       xyz.bin
│       xyz.ISO
│
└───b
        abc.BIN
        abc.iso

H:\Stuff>for /r %x in (*.iso *.bin) do @echo %x
H:\Stuff\a\xyz.ISO
H:\Stuff\a\xyz.bin
H:\Stuff\b\abc.iso
H:\Stuff\b\abc.BIN
于 2012-04-23T19:07:06.960 に答える
1

toUpper 関数を作成して %%~xa で呼び出し、.ISO または .BIN と比較することができます。ここに参照があります。

于 2012-04-23T18:56:08.400 に答える
0

最新の Windows には powershell があります。PS のワンライナーは次のようになります: ls * -recurse -include *.iso,*.binファイル名の大文字と小文字を無視します。(lsは ) のエイリアスですdir[Joey のコメントを参照]

于 2012-04-23T19:04:09.707 に答える