有条件删除文件的批处理脚本

有条件删除文件的批处理脚本

Nokia Lumia 1020 的用户知道可以设置以全分辨率存储拍摄的照片,但也会存储缩小尺寸的照片。我希望有一个脚本可以自动删除所有低分辨率版本。

文件名如下:

WP_20150303_17_20_38_Pro.jpg
WP_20150303_17_20_38_Pro__highres.jpg
WP_20150303_17_21_21_Pro.jpg
WP_20150303_17_21_21_Pro__highres.jpg
WP_20150303_17_21_32_Pro.jpg
WP_20150303_17_21_32_Pro__highres.jpg
WP_20150303_17_22_47_Pro.jpg
WP_20150303_17_22_47_Pro__highres.jpg
WP_20150303_17_28_14_Pro.jpg
WP_20150303_17_28_14_Pro__highres.jpg

我可以删除 *_pro.jpg,但这样会存在风险,如果根本没有高分辨率版本怎么办。我该如何编写一个脚本,先检查是否存在高分辨率文件,然后再删除低分辨率版本?

答案1

创建批处理文件。从这里开始:循环命令:针对另一个命令的结果和这里:命令行参数(参数)

For /F "tokens=*" %%G in ('dir /b *_pro.jpg') do (
   echo %%~dpnG
)

现在你可以 echo %%~dpnG改为

   if exist "%%~dpnG__highres.jpg" echo del "%%~dpnxG"

甚至

   if exist "%%~dpnG__highres.jpg" (
        echo del "%%~dpnxG"
   ) else (
        echo retain %%~dpnxG
   )

彻底检查输出(最好两次)并echo del用替换del

在命令中添加/s开关dir如下:dir /b /s *_pro.jpg也处理子文件夹中的文件。

答案2

我使用的.bat文件:

    @Echo off
For /F "tokens=*" %%G in ('dir /s /b *_pro.jpg') do (
    if exist "%%~dpnG__highres.jpg" (
        echo delete %%~dpnxG
   ) else (
        echo retain %%~dpnxG
   )
)

Echo.
Echo _________________________________________________
Echo.

 Echo Do you really want to delete these files (Y/N)?
CHOICE /C YN /N 
IF ERRORLEVEL 2 goto doend
IF ERRORLEVEL 1 goto doerase
exit

:doerase
For /F "tokens=*" %%G in ('dir /s /b *_pro.jpg') do (
    if exist "%%~dpnG__highres.jpg" (
        del "%%~dpnxG"
   ) else (
        REM echo retain %%~dpnxG
   )
)

:doend
pause

相关内容