クラウドストレージの競合ファイルをまとめて削除するバッチファイル

前回の記事で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
    

    ファイル名に半角スペースや半角カッコ含む場合の取扱がややこしく苦戦しましたが、全部取りのぞいてから処理をすることでなんとか対応しました。もっとシュッとしたやり方はある気がします。

    以下、なにやら参考にしたとおぼしきリンクのメモがあったのでそのまま紹介します。

    シェア
    広告
    野良人 代表
    新免祥太
    1988年岡山生まれ。外食企業のWEB・EC担当を経験したのち、2013年12月より「野良人(のらんど)」の屋号で独立しWEBデザイン・プログラミングなどWEBサイト制作の工程全般を請け負っています。お気軽にご相談ください。
    <次の記事(2020/07/25)
    WordPress開発環境「Local」5.XでのSSHログインメモ
    前の記事>(2020/05/17)
    DropBoxで謎の大量同期が繰り返し発生した現象の原因と解決法
    記事一覧