1

my.batという名前のWindowscmdバッチスクリプトで、バッチファイルmy.batを除く、現在のディレクトリ内のすべてのファイルに対してコマンドを実行したいと思います。現在、my.batで以下のコマンドを使用して* .txt * .pptに対してのみコマンドを実行していますが、実際には、異なる拡張子の新しいファイルがフォルダーに追加される可能性があるため、1つのタイプのファイル拡張子を除外してこのコマンドを実行します(私の場合、*。bat)の方が読みやすくて便利です。

FOR /F "delims=|" %%i IN ('dir /b *.txt *.ppt') DO echo %%i

質問:その特定のファイル拡張子を持つそのファイルだけを除外し、除外されたファイルを除くすべての拡張子のすべてのファイルでforコマンドを実行するにはどうすればよいですか?

4

2 に答える 2

3
FOR /F "tokens=* delims=|" %%i IN ('dir /b *.*') do if not %%~xi==.bat echo %%i

私も追加tokens=*しました。そうしないと、スペースがあると完全なファイル名を取得できません。

ドットなしでエコーするには

setlocal enabledelayedexpansion
FOR /F "tokens=* delims=|" %%i IN ('dir /b *.*') do (
set e=%%~xi
set e=!e:.=!
echo !e!
)

これは、ファイルに他のドットがないことを提供します。そうでない場合は、ドットも削除されます。ただし、すべてのファイルの拡張子が3文字であるとは限らないため、これは最後から4番目の文字を削除するよりも少し頑丈です。

于 2012-12-19T12:10:10.007 に答える
1

次のように、dir /bコマンドの出力をに渡すことができます。findstr

FOR /F "delims=|" %%i IN ('dir /b ^| findstr /v /r "^my.bat$"') DO echo %%i

パラメータに一致しないものを印刷するオプション/v。一致は、を含む行のみに一致し、他には何もfindstr一致しない正規表現に基づいています。my.bat

于 2012-12-19T12:10:18.813 に答える