web-dev-qa-db-ja.com

条件付きでファイルを削除するバッチスクリプト

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を削除することはできますが、高解像度バージョンがまったくない場合はどうなるかというリスクがあります。最初に高解像度ファイルが存在するかどうかを確認してから、低解像度バージョンを削除するスクリプトを作成するにはどうすればよいですか?

2
Nano

バッチファイルを作成します。ここから開始: ループコマンド:別のコマンドの結果に対して そしてここ: コマンドライン引数(パラメーター)

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
   )

出力を徹底的にチェックし(2回以上)、echo deldelに置き換えます。

次のように/sスイッチをdirコマンドに追加します。dir /b /s *_pro.jpgは、サブフォルダー内のファイルも処理します。

1
JosefZ

私が使用する.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
0
Nemo Nemo