删除所有例外情况的命令

删除所有例外情况的命令

我有一个文件夹,里面大约有 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 会话期间保留。

相关内容