kiyo_hikoのブログ

メモ+日記?

タッチパネルWindows PCで誤ってファイルコピーしたときに取り消す方法

なにを言ってるのかイミフなタイトルなので補足

状況が伝わりにくいかもしれません。こういうことがありました。
そのとき対処した内容のメモです。

  1. タッチパネルPCで外付けドライブに一部のファイルを退避しようと思い立った
  2. ファイルが飛び飛びなのでCtrlを押しながらタップして選択まくった
  3. 100個ぐらい選んだところで手が滑ってスワイプ(ドラッグ)した

→ Ctrlマウスドラッグでファイルコピーしたときと同じ操作になったぞい。

  • 選択の労力はパーになるわ、「なになに - コピー.*」なファイルが大量に作られるわで怒髪天

コピーを無理くり取り消す

  • なんか右クリックでundoできませんでした。何故。

仕方ないので「コピー」の名を持ってるファイルを検索してあぶり出し、全部けします。
しかしWindowsの検索窓は気まぐれなので、よくわからん検索結果を提示してきてあてになりません。

  • Windows2000ぐらいまでの厳密文字列の比較とか正直選ばせてほしい

そこでPowerShellです。「コピー」の名を持つファイルをリストアップして消します。

  • どうせPowerShell使うならと、コピー元のハッシュと照合して安全に消します。

組んだPowerShellスクリプトは下段にあります。

一応注意喚起(免責)

ファイルコピーの取り消し(=ファイル削除)を伴うPC操作の話なので取り扱いは事前テストしたうえで慎重に。
不注意で事故っても私は何の責任も持ちません。

作ったもの(説明はあと)

これを走らせます。
自分はPowerShell ISEで即席で書いたのでそのままISEで走らせてps1に保存してました。

# 対象フォルダーは逐次指定するなりカレントにするなりお好きに
cd C:\Users\kyhk\Downloads

# 重複したやつをリストアップ
$dups = gci -Filter "* - コピー*"

foreach ($dup in $dups) {
    # 元ファイル名はたぶんこんなだろう
    $orig = $dup -replace " - コピー", ""

    # 元ファイル名でファイル見つけた
    if (Test-Path $orig) {
        $hash_orig = Get-FileHash $orig
        $hash_dup = Get-FileHash $dup

        # ハッシュも一致した
        if ($hash_orig.Hash -eq $hash_dup.Hash) {
            $dup
            Write-Host "ハッシュ値が同じ元ファイルを検出しました。コピー側を自動で削除します。"
            del $dup # 消す
        }
    }
}

説明

極めて大雑把に

  • gci:dirコマンドみたいなものです。Filterでワイルドカード付けられます
  • Test-Path:ファイルの存在確認できます
  • Get-FileHash:ファイルからハッシュオブジェクトを作ります。別のハッシュ値と比べるときはHashプロパティ経由で値を取りませう

これで解決しました

超めんどくさかった