删除所有不包含字符串的文件&根据模式重命名文件

时间:2015-11-12 20:54:39

标签: windows batch-file

我有一个目录,可以将文件组织到以ID号命名的其他目录中。这些目录中的每一个都包含图标以及图形对象的动画帧。我需要保留包含字符串“icon”

的所有文件

以下是目录的示例:

0501
|   05010000.effect.default.0.png
|   05010000.effect.default.1.png
|   05010000.effect.default.2.png
|   05010000.effect.default.3.png
|   05010000.effect.default.icon.png
|   05010000.effect.default.iconRaw.png

之后,目录应如下所示:

0501
|   05010000.effect.default.icon.png
|   05010000.effect.default.iconRaw.png

如果我还可以将目录中的项重命名为:

,那会更好
0501
|   5010000.png
|   5010000raw.png

尊重每张图片的原始ID号并删除前导码0.

这甚至可能无法实现,但我需要完成数以千计的图像,因此手动过程是不可行的。

2 个答案:

答案 0 :(得分:1)

需要从包含所有文件夹的文件夹(如示例文件夹0501)执行以下批处理文件。该脚本实际上并没有删除任何内容,只是打印出删除命令。当您确信解决方案符合您的要求时,请移除ECHO

@ECHO OFF
FOR /F "tokens=*" %%G IN ('DIR /S /B *.png ^| FINDSTR /V /I icon') DO (
    ECHO DEL %%G
)

答案 1 :(得分:1)

下面的脚本将执行删除和重命名。但是用于为重命名创建新文件名的替换区分大小写,因此文件名必须是小写的,就像在您的示例中一样。

这实际上并没有删除和重命名 - 它只是将命令打印到屏幕上。删除DEL和REN命令前面的ECHO以执行命令。

@ECHO OFF
SETLOCAL ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION
FOR /F "tokens=*" %%G IN ('DIR /S /B *.png ^| FINDSTR /V icon') DO (
    ECHO DEL %%G
)
FOR /F "tokens=*" %%G IN ('DIR /S /B *.png ^| FINDSTR icon') DO (
    SET X=%%~nG
    SET Y=!X:.info.icon=!
    ECHO REN %%G !Y:~1!%%~xG
)

第一个for循环删除不正确的文件(与@ zb226的答案相同),第二个循环重命名我们保留的文件。

工作原理是:

FOR /F "tokens=*" %%G IN ('DIR /S /B *.png ^| FINDSTR /V icon') DO (
   ...
)

FOR在单引号中执行命令,找到要删除的文件,然后在DO找到每个文件名后运行一次命令(文件名在%%G中)。找到文件的命令使用DIR执行目录列表(/ B只返回文件名,/ S递归子目录),然后使用FINDSTR通过返回不包含icon的文件名来过滤文件名(/ V返回不匹配的东西。)

FOR /F "tokens=*" %%G IN ('DIR /S /B *.png ^| FINDSTR icon') DO (
   ...
)

FOR用单引号执行命令,找到要重命名的文件,然后在找到的每个文件名的DO一次后运行命令(文件名在%%G中)。找到文件的命令使用DIR执行目录列表(/ B只返回文件名,/ S递归子目录)然后使用FINDSTR通过返回包含icon的文件名来过滤文件名

SET X=%%~nG
SET Y=!X:.info.icon=!
REN %%G !Y:~1!%%~xG

这里发生了很多事情:

  • X=%%~nG仅将%%G中存储的文件名分配给X
  • !X:.info.icon=!从文件名中删除.info.icon
  • !Y:~1!删除第一个字符(前导零),因此!Y:~1!是新文件名,%%~nG是旧文件名。
  • 现在%%G是旧文件的完整驱动器,路径,文件名和扩展名,!Y:~1!%%~xG构建新文件的文件名和扩展名。