クラウドストレージの競合ファイルをまとめて削除するバッチファイル
2020/07/25
前回の記事でDropBoxの同期がしばらくうまくいかず、大量の競合ファイルが発生しました。整理のためのバッチファイルを作ったので載せます。
概要
この記事は、備忘録として今度公開しよう…と思ってメモ書きの状態で寝かせたまま数か月が経ったものです。正直、コードの意図とかちょっと忘れているのですが、たしか以下のような感じだった気がします。
- 競合ファイルのファイル名に付く
(XXXX の競合コピー XXXX-XX-XX)
を見つける - 競合ファイル同士を比較
- 更新日時の古い方を削除
- 必要に応じてファイル名の
(XXXX の競合コピー XXXX-XX-XX)
を削除
ファイルを消すものなので、ご利用の際はお手元でテストのうえご活用ください。
バッチファイル
以下を.batファイルとして保存し、消したいフォルダに置いてダブルクリックで実行すると、置いたフォルダ以下の競合ファイルを削除します。
bat
cd /d %~dp0
set ConflictedCopy= (EXAMPLE の競合コピー 2020-02-20)
rem スペースと()の除去
set before=%ConflictedCopy: =%
set before=%before:(=%
set before=%before:)=%
setlocal enabledelayedexpansion
for /R %%a in (*"%ConflictedCopy%"*) do (
set fname=%%a
rem スペースと()の除去
set fname=!fname: =!
set fname=!fname:^(=!
set fname=!fname:^)=!
set fname=!fname:%before%=!
for %%f in (!fname!) do set fdate=%%~tf
if "%%~ta" gtr "!fdate!" (
rem 競合ファイルの方が新しい場合は元ファイルを削除した後リネーム
del !fname!
rem 置換後ファイル名にパスが含まれているとエラーになるので外す
set fname=!fname:%%~dpa=!
ren "%%a" !fname!
) else (
rem 元ファイルの方が新しい場合は競合ファイルを削除
del "%%a"
)
)
endlocal
cmd /k
ファイル名に半角スペースや半角カッコ含む場合の取扱がややこしく苦戦しましたが、全部取りのぞいてから処理をすることでなんとか対応しました。もっとシュッとしたやり方はある気がします。
以下、なにやら参考にしたとおぼしきリンクのメモがあったのでそのまま紹介します。
広告
2020/07/25