Windowsコマンドプロンプトで特定のファイルを除く全ファイルの削除方法

削除前に必ずバックアップと対象一覧を確認してください。delで消したファイルは通常ごみ箱へ移動しません。本記事の基本例は指定フォルダー直下の通常ファイルだけを対象とし、サブフォルダーは再帰処理しません。まず使い捨てのテストフォルダーで、削除しないecho表示から試します。管理者権限や強制削除の/f、確認を省く/qは使いません。

目次

特定の1ファイルだけ残す場合:先に候補を表示

cmd.exeで実行する例です。keep.txtを残すファイル名に置き換えます。遅延展開を無効にした新しいcmdで、C:\Work\DeleteTestへ移動します。cdが失敗したら以降は実行せず停止し、cdの表示とdirで正しい場所か確認してください。

cmd /d /v:off
cd /d "C:\Work\DeleteTest"
cd
dir /a
for %i in (*) do if not exist "%~fi\" if /i not "%~nxi"=="keep.txt" echo del /p "%~fi"

ここではechoにより削除コマンドを表示するだけです。出力の全件とバックアップを確認した後、実際に削除する場合だけ次の行を実行し、各ファイルの確認に答えます。確認と実行の間に内容が変わるフォルダーでは使わないでください。

for %i in (*) do if not exist "%~fi\" if /i not "%~nxi"=="keep.txt" del /p "%~fi"

%~nxiは拡張子込みのファイル名、%~xiは拡張子です。/iで大文字小文字を区別しません。複数名を残すにはif /i not “%~nxi”==”keep2.csv”のような条件を追加します。バッチ内では%iを%%iへ変更し、バッチ自体は削除対象フォルダーの外へ置いてください。隠し・システム・読み取り専用ファイルまで無理に消す例ではなく、アクセス拒否などの残存理由を個別に確認します。

Windowsのコマンドプロンプトは、多くのユーザーにとって少し難しく感じるかもしれませんが、基本的なコマンドさえ理解していれば、非常に強力なツールになります。この記事では、特定のファイルを残し、他の全ファイルを簡単に削除する方法を解説します。ファイル整理やバッチ処理の自動化に役立てることができます。

手順1: コマンドプロンプトの基本操作

まずは、コマンドプロンプトを起動する方法から始めましょう。Windowsキー + Rを押して「実行」ダイアログボックスを開き、「cmd」と入力してエンターキーを押します。これでコマンドプロンプトが起動します。

ディレクトリの変更

コマンドプロンプトで作業を始める前に、操作したいディレクトリ(フォルダ)に移動する必要があります。これにはcdコマンドを使用します。例えば、事前に用意したテストフォルダーに移動するには、以下のように入力します。

cd /d "C:\Work\DeleteTest"

ファイルとディレクトリのリスト表示

現在のディレクトリにあるファイルとサブディレクトリのリストを表示するには、dirコマンドを使用します。このコマンドは、ファイルの操作を行う前に、どのファイルが対象になっているかを確認するのに便利です。

コマンドの実行

コマンドプロンプトでは、ファイルやディレクトリに対して様々な操作を行うコマンドを実行できます。ファイルを削除するにはdelコマンド、ディレクトリを削除するにはrmdirまたはrdコマンドを使用しますが、この記事で後ほど詳しく説明します。

これらの基本的なコマンド操作を理解することで、Windowsのコマンドプロンプトを使ってより複雑なタスクを効率的にこなすことができるようになります。次のセクションでは、特定のファイルを残して他のファイルを削除する方法について詳しく見ていきましょう。

手順2: 特定ファイルを除外してファイルをリストアップ

Windowsコマンドプロンプトを使用して特定のファイルを除外し、残りのファイルをリストアップする方法は、ファイル管理や特定の操作を行う前の準備作業に非常に役立ちます。この手順では、条件に合わないファイルをリストから除外する方法を説明します。

findstrコマンドの利用

ファイルをリストアップする際に特定のファイルを除外する一つの方法は、dirコマンドとfindstrコマンドを組み合わせることです。ここでは、例として.txt拡張子を持つファイルをリストから除外する方法を見ていきます。

dir /b /a-d | findstr /v /i /r "\.txt$"

このコマンドでは、dirコマンドで現在のディレクトリのファイルリストを取得し、その出力をfindstrコマンドにパイプします。/vオプションは指定したパターンに一致しない行のみを表示します。/iオプションは大文字小文字を区別しない検索を行います。そして、"\.txt$"は、末尾が文字どおりの.txtである行を検索する正規表現です。/bは名前のみ、/a-dはディレクトリ以外を表示します。これは一覧確認用で、隠し属性などの扱いがfor (*)と完全一致する削除リストではありません。この文字列出力をそのまま削除処理へ渡さないでください。

除外したいファイルが複数ある場合

複数の拡張子や特定の条件を除外したい場合は、findstrの検索パターンを拡張します。例えば、.txtと.docxファイルを除外したい場合は、以下のようにコマンドを実行します。

dir /b /a-d | findstr /v /i /r "\.txt$ \.docx$"

この方法を使えば、特定の条件に合わないファイルを効率的に除外し、目的のファイルだけを素早く特定することができます。コマンドプロンプトでのファイル管理がより柔軟に、より効率的になります。

注意点

コマンドプロンプトでこれらのコマンドを使用する際は、正確なファイル名やパターンを指定することが重要です。間違ったパターンを指定すると、予期しないファイルがリストから除外される可能性があります。また、コマンドの出力を慎重に確認し、操作を実行する前に期待通りの結果が得られているかを確認してください。

手順3: forコマンドを使った条件付きファイル削除

Windowsコマンドプロンプトで特定のファイルを除いて全ファイルを削除する際には、forコマンドを活用することで複雑な条件も簡単に扱うことができます。この手順では、forコマンドを使って、特定の条件に合致するファイルのみを対象に削除操作を行う方法を説明します。

forコマンドの基本構文

forコマンドの基本構文は以下の通りです。

for %変数 in (セット) do コマンド [コマンドパラメータ]

このコマンドを使って、指定された「セット」に含まれる各アイテムに対して指定したコマンドを実行します。変数は一時的に各アイテムの値を保持するために使用されます。

特定のファイルを除く全ファイルの削除

拡張子.txtのファイルをすべて残したい場合は、次のように候補を表示します。これはkeep.txtという1ファイルだけを残す条件とは違います。

for %i in (*) do if not exist "%~fi\" if /i not "%~xi"==".txt" echo del /p "%~fi"

この例は直下のファイルを調べ、拡張子が.txtでない候補を表示するだけです。/iにより.TXTも残します。確認後に実際の削除が必要な場合だけechoを外し、del /pの確認を省略しないでください。%~xiは拡張子、%~fiはフルパスです。

注意点

コマンドプロンプトでこのコマンドを実行する際は、非常に注意が必要です。誤って大切なファイルを削除してしまう可能性があります。また、バッチファイル(.bat)内でこのコマンドを使用する場合は、変数のパーセント記号(%)を二重にする必要があります(%%iのように)。

この手順を使えば、コマンドプロンプトで複雑なファイル操作も柔軟に扱うことができます。特定の条件に合わせてファイルを効率的に管理する方法を理解することで、Windows環境での作業効率が大きく向上します。

手順4: スクリプトの応用例

Windowsコマンドプロンプトで学んだコマンドを応用し、より複雑なタスクを自動化するためのスクリプトの例を紹介します。ここでは、特定の条件を満たすファイルをバックアップするスクリプトを作成する方法を解説します。

バックアップスクリプトの作成

このスクリプトでは、特定のファイルタイプのファイルを検索し、それらを別のディレクトリにコピーします。例えば、ドキュメントファイル(.docx)を自動的にバックアップする場合を考えます。

スクリプトの内容

@echo off
setlocal DisableDelayedExpansion
set "sourceDir=C:\Work\DeleteTest"
set "backupDir=D:\Backup\DeleteTest-copy"
if not exist "%sourceDir%\" exit /b 1
robocopy "%sourceDir%" "%backupDir%" *.docx /S /XJ /R:1 /W:1 /L
if errorlevel 8 (
  echo Copy check failed. Do not delete source files.
  exit /b 1
)
echo Dry run only. No files were copied.

これは.docxだけのコピー予定を表示するバッチです。/Lがあるため実際にはコピーしません。.txt以外を削除する前の完全なバックアップにはならない点に注意してください。削除対象を保護するには必要な全ファイルを別の保存先にバックアップし、復元できることを確認します。

スクリプトの動作解説

Robocopyの/Sはサブフォルダーも対象(空フォルダーを除く)、/XJはジャンクションを除外、/R:1 /W:1は再試行を制限します。コピー元とコピー先を同じ場所や親子関係にせず、既存ファイルの上書き可能性も確認します。/MIRや/PURGEは使いません。終了コード8以上は少なくとも一つの失敗を示します。

スクリプトの実行方法

このスクリプトを実行するには、上記のコードをテキストエディタに貼り付け、.bat拡張子で保存します(例:backupDocs.bat)。最初は/Lを残して実行し、対象と保存先を確認します。実コピーを意図する場合のみ/Lを外します。終了コードとログ、コピー先の実ファイルを確認するまでバックアップ成功とは判断しません。

注意点

スクリプトを実行する前に、ソースディレクトリとバックアップディレクトリのパスを正しく設定してください。また、重要なデータを扱う際は、誤った操作によるデータ損失を避けるためにも、スクリプトの動作をよく理解し、テストを行うことが重要です。

コマンドプロンプトを使ったスクリプトの応用は、日常の作業を大幅に効率化することができます。この例を参考に、自分のニーズに合わせたスクリプトを作成してみましょう。

演習問題: コマンドプロンプトを使用して、特定の拡張子を持つファイルのみを残す演習問題

あなたの任務は、コマンドプロンプトを使用して、特定のディレクトリ内から特定の拡張子を持つファイルのみを残し、他の全ファイルを削除するスクリプトを作成することです。例として、.txt拡張子を持つファイルのみを残すことに挑戦してみましょう。

解説: 演習問題の解答と詳細な解説

このタスクを達成するために、以下のコマンドを使用します。

for %i in (*) do if not exist "%~fi\" if /i not "%~xi"==".txt" echo del /p "%~fi"

この演習も直下だけの候補表示です。再帰削除の/rや/sを足すと影響範囲が変わるため、この例には追加しません。テストフォルダーにkeep.txt、KEEP.TXT、remove.log、空白入りの名前、サブフォルダーを用意し、残るものと表示対象を確認します。

%iはループ内で現在処理しているファイルを指します。%~xiはそのファイルの拡張子を取得するために使用されます。条件if /i not "%~xi"==".txt"は、拡張子が大文字小文字を無視して.txtでない場合に真となります。echoを付けたままなら削除しません。

注意点

このコマンドを実行する前に、重要なファイルが削除されないように十分注意してください。また、バッチファイル内でこのコマンドを使用する場合は、パーセント記号を二重にする必要があることを覚えておきましょう(%%iのように)。

まとめ

コマンドプロンプトを使用して、特定のファイルを残して他のファイルを効率的に削除する方法は、ファイル管理において非常に有用です。この演習を通じて、Windowsのコマンドプロンプトでのファイル操作の基本を理解し、応用する能力を高めることができました。常に、実行するコマンドの影響を理解し、重要なデータを保護するための対策を取ることが重要です。この技術を活用して、日々の作業をより効率的に行いましょう。

公式資料:del/for/findstr/Robocopy。掲載コードは利用環境で実行検証していません。

この記事を書いた人

実務の現場で詰まりがちなポイントを地図にするITブログ「IT trip」を運営。Windows/Office(Teams・Excel)からSQL、サーバ運用、ガジェットまで、再現性のある手順と“なぜそうなるか”を丁寧に解説します。読んだらすぐ試せること、そして迷った人の次の一歩が見えることを大切にしています。

コメント

コメントする

目次