フォルダー内の一致する式ファイル名を取得するバッチ スクリプト

フォルダー内の一致する式ファイル名を取得するバッチ スクリプト

バッチスクリプトを使用してフォルダー内に移動し、そのフォルダー内に次のようなさまざまなファイルがあります。

ABc.txt
Pqr.png
.
.
Test-1.2.0.zip

Testこれらのファイルのうち、 で始まり、拡張子が であるファイルの名前を取得したいと思います.zip。この場合、Test-1.2.0.zipです。そのバージョンは動的である可能性があります。

Test-1.2.0.zip出力として検索して返すバッチ スクリプトについて教えていただけますか?

答え1

スタート バーの Windows ロゴを右クリックし、リストから「実行」を選択して開きます。次に、「最近」という単語を入力して [OK] をクリックします。ラップトップの最近使用したフォルダーが開き、ファイルについて検索できます。

答え2

次のようなループを使用してみてくださいFor /F

where .:Strings/Characters+Wildcard+String/Characters

コマンドは正規表現 1 桁/文字ではなくリテラル文字としてwhere想定されます。"."

1 Digit/character          <==>  ? 
1 or More Digit/Character  <==>  *
Test-  1 Digit/Character . 1 Digit/Character . 1 Digit/Character.zip        <==> Test-?.?.?.zip
Test-  1 Digit/Character . 1 Digit/Character . 1 or More Digit/Character:   <==> Test-?.?.*.zip
  • For /Fと一緒に使用する%%~nxiいいえバツテンション)
@echo off 

for /f useback^tokens^=* %%i in (`where .:"Test-?.?.?.zip"`)do echo\%%~nxi
  • Powershellの場合:
Get-ChildItem -File '*.zip'| Where-Object {$_.Name -like 'Test-?.?.?.zip'} | Select-Object -ExpandProperty Name


# Or..
ls -af '*.zip'| ? {$_.Name -like 'Test-?.?.?.zip'} |select -Exp Name
  • 結果:
Test-1.2.0.zip
Test-1.2.1.zip
Test-1.2.2.zip
Test-1.2.3.zip
Test-1.2.4.zip
Test-1.2.5.zip
Test-1.2.6.zip
Test-1.2.7.zip
Test-1.2.8.zip
Test-1.2.9.zip
for /f useback^tokens^=* %%i in (`where .:"Test-?.?.*.zip"`)do echo\%%~nxi
  • Powershellの場合:
Get-ChildItem -File '*.zip'| Where-Object {$_.Name -like 'Test-?.?.*.zip'} | Select-Object -ExpandProperty Name


# Or..
ls -af '*.zip'| ? {$_.Name -like 'Test-?.?.*.zip'} |select -Exp Name
  • 結果:
Test-1.2.0.zip
Test-1.2.1.zip
Test-1.2.10.zip
Test-1.2.11.zip
Test-1.2.12.zip
Test-1.2.13.zip
Test-1.2.14.zip
Test-1.2.15.zip
Test-1.2.16.zip
Test-1.2.17.zip
Test-1.2.18.zip
Test-1.2.19.zip
Test-1.2.2.zip
Test-1.2.20.zip
Test-1.2.3.zip
Test-1.2.4.zip
Test-1.2.5.zip
Test-1.2.6.zip
Test-1.2.7.zip
Test-1.2.8.zip
Test-1.2.9.zip

  • のためにR選別cmd/batコードで使用する。PowerShellの場合は以下を追加for ... ^| Sort /r`) do ...| Sort-Object -Descending
for /f useback^tokens^=* %%i in (`where .:"Test-?.?.*.zip"^|sort /r`)do echo\%%~nxi
  • Powershellの場合:
Get-ChildItem -File '*.zip'| Where-Object {$_.Name -like 'Test-?.?.*.zip'} | Select-Object -ExpandProperty Name | Sort-Object -Descending


# Or..
ls -af '*.zip'| ? {$_.Name -like 'Test-?.?.*.zip'} |select -Exp Name | Sort -Des
  • 結果:
Test-1.2.9.zip
Test-1.2.8.zip
Test-1.2.7.zip
Test-1.2.6.zip
Test-1.2.5.zip
Test-1.2.4.zip
Test-1.2.3.zip
Test-1.2.20.zip
Test-1.2.2.zip
Test-1.2.19.zip
Test-1.2.18.zip
Test-1.2.17.zip
Test-1.2.16.zip
Test-1.2.15.zip
Test-1.2.14.zip
Test-1.2.13.zip
Test-1.2.12.zip
Test-1.2.11.zip
Test-1.2.10.zip
Test-1.2.1.zip
Test-1.2.0.zip


答え3

@echo off

for /f useback^tokens^=* %%i in (`where .:"temp-?.?.*.tar.gz"`)do echo\%%~nxi

この解決策はバッチスクリプトでうまくいきました

?1桁の数字/文字を表し、星(*)charは1つ以上の数字/文字を表します

関連情報