我有一个目录,可以将文件组织到以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.
这甚至可能无法实现,但我需要完成数以千计的图像,因此手动过程是不可行的。
答案 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
构建新文件的文件名和扩展名。