從命令中刪除所有例外

從命令中刪除所有例外

我有一個資料夾,其中包含大約 50 個不同的檔案(NAME1.jpg、NAME2.jpg、NAME3.jpg...)。

我有一個程式可以運行,將每個檔案分成大約 4 個不同的檔案並重新命名它們(NAME1-0.jpg、NAME1-1.jpg、NAME2-0.jpg、NAME2-1.jpg...)

我想製作一個 .bat 文件,該文件將運行並刪除所有不是 *-0.jpg 文件的文件。

到目前為止,我最接近的是這一行:

for %i in (*) do if not %i == "*.jpg" del "%i"

但這只是刪除了資料夾中的所有文件,包括我想要保存的 -0.jpg 。

有更好的線路可以使用嗎?

答案1

我想刪除所有不是 *-0.jpg 檔案的檔案。

我有一個程式可以運行,將每個檔案分成大約 4 個不同的檔案並重新命名它們(NAME1-0.jpg、NAME1-1.jpg、NAME2-0.jpg、NAME2-1.jpg...)

使用以下批次檔 (test.cmd):

@echo off
setlocal enabledelayedexpansion
for /f "tokens=*" %%i in ('dir /b NAME?-?.jpg') do (
  rem get file name
  set _fname=%%~ni
  rem get last 2 characters of file name
  set _last2=!_fname:~-2!
  if [!_last2!] NEQ [-0] del "%%i"
  )

例子:

F:\test>dir *.jpg
 Volume in drive F is Expansion
 Volume Serial Number is 3656-BB63

 Directory of F:\test

08/12/2015  23:51                 0 NAME1-0.jpg
08/12/2015  23:51                 0 NAME1-1.jpg
08/12/2015  23:51                 0 NAME2-0.jpg
08/12/2015  23:51                 0 NAME2-1.jpg
               4 File(s)              0 bytes
               0 Dir(s)  1,776,919,613,440 bytes free

F:\test>test
F:\test>dir *.jpg
 Volume in drive F is Expansion
 Volume Serial Number is 3656-BB63

 Directory of F:\test

08/12/2015  23:51                 0 NAME1-0.jpg
08/12/2015  23:51                 0 NAME2-0.jpg
               2 File(s)              0 bytes
               0 Dir(s)  1,776,919,613,440 bytes free

進一步閱讀

  • Windows CMD 命令列的 AZ 索引- 與 Windows cmd 行相關的所有內容的絕佳參考。
  • 目錄- 顯示檔案和子資料夾的清單。
  • 啟用延遲擴展- 延遲擴展將導致變數在執行時而不是在解析時擴展。
  • 對於 /f- 根據另一個指令的結果循環指令。
  • 如果- 有條件地執行指令。
  • - 顯示、設定或刪除 CMD 環境變數。使用 SET 所做的變更將僅在目前 CMD 會話期間保留。

相關內容