批次腳本取得資料夾中匹配的表達式文件名

批次腳本取得資料夾中匹配的表達式文件名

使用批次腳本,我進入資料夾,在該資料夾中,我有不同的文件,例如 -

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

從這些檔案中,我想取得以 . 開頭Test並具有副檔名的檔案的名稱.zip。在這種情況下,Test-1.2.0.zip。因為它的版本可以是動態的。

您能幫我使用批次腳本來尋找Test-1.2.0.zip並返回作為輸出嗎?

答案1

透過右鍵單擊開始列中的 Windows 徽標,從清單中選擇「執行」並開啟它。然後寫下「最近」這個詞,然後按一下「確定」。它將打開您筆記型電腦上最近使用的資料夾,嘗試在其中搜尋您的檔案。

答案2

嘗試使用For /F循環:

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

where命令假定"."為文字字符,而不是正則表達式 1 位數/字符:

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阿梅埃X緊張)
@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

  • 為了埃弗塞種類在 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 個或多個數字/字符

相關內容