1

Windows コマンド シェルで、提供されたファイル拡張子パターンのみに一致する FOR ループまたは DIR コマンドを取得するにはどうすればよいですか? または別の言い方をすれば、貪欲でない拡張機能のマッチングを行う方法は?

たとえば、ディレクトリにfloo.tif、が含まれておりfloorbar.tifffloormatic.tifw操作したいだけですfloo.tif

for %%a in (floo*.tif) do @echo %%a

結果:

floo.tif
floorbar.tiff
floormatic.tifw

これが望ましい結果です。

floo.tif

dir *.tif同じ結果になります。

4

4 に答える 4

2

私が念頭に置いていたのはこれでした:

dir /b | findstr /i "^floo.*\.tif$"

また

dir /b floo*.tif | findstr /i "tif$"

どちらも.tiffと.tifwの一致を妨げ、期待した結果が得られます。

の正規表現の語彙findstrは厳しく制限されています。たとえば、\w単語の文字を一致させることはできません。また、(foo|bar|baz)表記法はサポートされていません。ただし、少なくとも、標準のワイルドカードマッチングよりもきめ細かい制御が可能です。findstr /?サポートされている構文を確認してください。

for /f "delims=:" %%I in ('dir /b floo*.tif ^| findstr /i "tif$"') do (
    rem process each %%I match
)
于 2013-01-25T02:46:51.363 に答える
1
for /f "eol=: delims=" %%a in (
  'dir /b /a-d floo*.tif^|findstr /ix "floo.*\.tif"'
) do echo %%a
于 2013-01-25T02:10:43.347 に答える
1

これは私が当面のプロジェクトで行ったことですが、次回は @dbenham と @rojo が推奨する @Loadmaster の vfind または findstr の使用を検討します。

for %%a in (*.tif) do (
  if /i "%%~xa"==".tif" @echo Doing something to %%a...
  )

の利点はif、他のプログラムを実行する必要がないことです。そのため、より高速でコンパクトに記述でき、後で精神的に解読しやすくなります。vfind の利点は、完全に単純明快であることですが、findstr はパターン マッチングをより詳細に制御できます。

于 2013-01-25T20:26:24.080 に答える
1

私はずっと前に書いたファイル名を見つけるための Win32 コマンドライン ユーティリティを持っています。これは長いファイル名と一致するため、その問題に悩まされることはありません: vfind.exe。(ソースコードも公開されています。)

私はこのように使用します:

for /f "delims=" %%i in ('vfind floo*.tif') do @echo %%a
于 2013-01-25T00:54:06.870 に答える