Windows環境でファイルを管理していると、「特定の拡張子のファイルだけを別のドライブにコピーしたい」と思う場面があります。例えば、ドキュメントファイル(.docxや.pdf)、画像ファイル(.jpgや.png)、プログラムファイル(.batや.ps1)などを定期的にバックアップするケースです。
手作業でコピーするのは手間がかかりますが、Windowsのバッチファイルを使えば自動で実行でき、業務効率化やバックアップの自動化に役立ちます。この記事では、Windowsバッチで特定の拡張子だけを別ドライブにコピーする方法を、実際のサンプルコードとともに解説します。プログラミング初心者の方でも理解できるように丁寧に説明していきます。
Windowsバッチとは?
Windowsバッチ(バッチファイル)とは、Windowsのコマンドプロンプトで実行できるコマンドをまとめて記述したテキストファイルのことです。拡張子は「.bat」または「.cmd」として保存します。
例えば、以下のような単純な命令を並べて保存すれば、一度ダブルクリックするだけで複数の処理を自動で実行できます。
echo Hello World
pause
バッチの利点は、手作業で入力するコマンドをまとめ、自動化できる点です。特定の拡張子のファイルコピーも、この仕組みを使えば簡単に実現できます。
特定の拡張子だけをコピーする基本コマンド
ファイルコピーに使う基本的なコマンドは以下の2つです。
- copyコマンド
単純にファイルをコピーするためのコマンドです。copy C:\data\*.txt D:\backup\
この例では、CドライブのC:\data
フォルダにある「.txt」ファイルをすべてDドライブのbackup
フォルダにコピーします。 - xcopyコマンド
サブフォルダを含めてコピーする場合に便利です。xcopy C:\data\*.txt D:\backup\ /S /Y
/S
… サブディレクトリも含めてコピー/Y
… 上書き確認を表示しない
このように、ワイルドカード *.拡張子
を指定することで、特定の種類のファイルだけをコピーできます。
バッチファイルで自動化する方法
それでは、実際にバッチファイルを作成して、自動で特定の拡張子を別ドライブにコピーしてみましょう。
サンプルコード(.txtファイルをコピーする場合)
@echo off
setlocal
:: コピー元とコピー先を変数で指定
set SOURCE=C:\data
set DEST=D:\backup
:: コピー対象の拡張子
set EXT=txt
echo %SOURCE% から %DEST% へ *. %EXT% ファイルをコピーします...
:: 実行
xcopy "%SOURCE%\*.%EXT%" "%DEST%\" /S /Y
echo コピーが完了しました!
pause
このバッチのポイント
set SOURCE
とset DEST
でコピー元・コピー先を自由に設定可能set EXT
に拡張子を入れるだけで対象を切り替え可能xcopy
コマンドでサブフォルダも含めてコピー
このように変数を使って記述することで、柔軟性の高いバッチファイルになります。
複数の拡張子をコピーする場合
1種類だけではなく、複数の拡張子を対象にしたいケースも多いです。その場合は for
文を使います。
@echo off
setlocal
set SOURCE=C:\data
set DEST=D:\backup
:: 複数拡張子を指定
for %%E in (txt pdf jpg png) do (
echo *.%%E ファイルをコピー中...
xcopy "%SOURCE%\*.%%E" "%DEST%\" /S /Y
)
echo すべてのコピーが完了しました!
pause
動作解説
for %%E in (...)
で、複数の拡張子をループ処理.txt
、.pdf
、.jpg
、.png
をまとめてコピー可能- バックアップ用途に便利
コピー処理を定期的に実行する方法
バッチを作成しただけでは自動で実行されません。定期的にコピーしたい場合は「タスクスケジューラ」を使います。
- Windowsのスタートメニューで「タスクスケジューラ」と検索
- 「基本タスクの作成」を選択
- 実行する時間や頻度を設定(例:毎日夜23時)
- 実行するプログラムに作成した
.bat
ファイルを指定
これで、毎日自動的にコピーが実行されるようになります。
実用例:画像ファイルを別ドライブにバックアップ
例えば、写真を保存しているフォルダから、画像だけを外付けHDDにコピーする場合を想定します。
@echo off
set SOURCE=C:\Users\user\Pictures
set DEST=E:\PhotoBackup
for %%E in (jpg jpeg png gif bmp) do (
echo %%E ファイルをコピー中...
xcopy "%SOURCE%\*.%%E" "%DEST%\" /S /Y
)
echo 画像ファイルのバックアップが完了しました!
pause
これをタスクスケジューラに登録しておけば、写真データの定期バックアップが自動で行えます。
トラブルシューティング
コピー先に同じファイルがある場合
上書き確認が出て処理が止まることがあります。
→ /Y
オプションを付ければ自動的に上書き可能。
サブフォルダも含めたい場合
→ xcopy
に /S
を追加する。
フォルダごとコピーしたい場合
→ robocopy
コマンドを使うのも有効です。
robocopy C:\data D:\backup *.txt /S
robocopy
はWindowsに標準搭載されており、大量ファイルや差分コピーに強いので業務用途ではこちらがおすすめです。
まとめ
この記事では、Windowsバッチを使って特定の拡張子だけを別ドライブにコピーする方法を解説しました。
copy
やxcopy
で拡張子を指定してコピーできる- バッチファイルにすれば毎回自動化できる
- 複数の拡張子は
for
ループで処理できる - タスクスケジューラと組み合わせれば定期バックアップも可能
- 大量ファイルは
robocopy
が便利
バッチファイルをうまく活用することで、日々のファイル管理がぐっと楽になります。業務のバックアップや個人データの保護に、ぜひ試してみてください。