【Windowsバッチファイル入門】Windowsバッチファイルを用いたファイルコピー方法

Windowsバッチファイル

「毎回同じファイルをコピーする作業が億劫…」そんな方におすすめなのが、Windowsバッチファイルを使った自動ファイルコピー

この記事では、基本構文から応用(バックアップ・複数ファイル対応・エラー対策)まで、初心者でもすぐ使えるコード例を解説します。

この記事の対象

  • ファイルのコピー方法を知りたい方
  • 指定したパスにコピーする方法を知りたい方
  • 複数のファイルをまとめてコピーする方法を知りたい方
スポンサーリンク
スポンサーリンク

基本的な型

copy <source> <destination> 

基本的な使用方法としては、「copy 元ファイル コピー先」になります。

使用例

同一フォルダ内で別名コピー

@echo off
copy test.xlsx test_copy.xlsx

上記は、バッチファイルと同じ階層にあるファイルを別名でコピーする方法です。

指定先のパスにコピー

パスを用いて指定する場合は以下のようなります。

@echo off
copy test.xlsx c:\test\test_copy.xlsx

このプログラムは、バッチファイルと同じ階層にあるファイルを別のディレクトリに任意のファイル名「test_copy」でコピーする方法です。

同一の拡張子だけをコピー

@echo off
copy *.txt C:\test

カレントディレクトリにある「.txt」拡張子を全て指定のフォルダ内にコピーするプログラムです。ワイルドカード「*」を拡張子の前に持ってくる事で特定の拡張のファイルを取得しています。

日本語とスペースが含まれたファイルとディレクトリのコピー

@echo off
chcp 65001
rem ファイル名とパスを設定
set "filename=TODOLIST-コピー.xlsm"
set "TargetPath=C:\hoge\hoge\OneDrive - hoge\test\コピー"
set "TargetFile=%TargetPath%\%filename%"
set "SourceFile=C:\hoge\hoge\Desktop\TODOLIST.xlsm"

rem ファイルのコピー
echo %TargetFile%
copy "%SourceFile%" "%TargetFile%"

日本語やスペースが含まれたファイル名やディレクトリの場合、エラーになります。

回避方法としては、日本語の場合は「chcp 65001」を最初に指定すると上手くいきます。

また、スペースなどが含まれている場合は「”~~~”」とする事で回避できます。

【補足】chcpの数字

chcpで指定している数値は文字エンコードの識別子になります。以下が、一覧になります。

数値エンコード
932Shift-JIS
10001日本語(Mac)
51932EUC 日本語
65001UTF-8
20932EUC-JP
https://learn.microsoft.com/ja-jp/windows/win32/intl/code-page-identifiers より作成

末尾に日付を付けてのコピー

@echo off
for /f "tokens=2 delims==" %%a in ('wmic OS Get localdatetime /value') do set "dt=%%a"
set "Year=%dt:~0,4%"
set "Month=%dt:~4,2%"
set "Day=%dt:~6,2%"
set "DateNow=%Year%%Month%%Day%"

set "filename=TODOLIST_%DateNow%.txt"
set "TargetPath=C:\hoge\hoge\Downloads"
set "TargetFile=%TargetPath%\%filename%"

set "SourceFile=C:\hoge\Desktop\hogetest.txt"
copy "%SourceFile%" "%TargetFile%"

ファイルの末尾に日付を付けてコピーするプログラムになります。

ファイルのBackup時などの自動化に便利です。

フォルダごとまとめてコピー(注意あり)

@echo off
xcopy "C:\hoge\フォルダ" "D:\backup\フォルダ" /E /I /H /Y
  • /E: 空フォルダも含める 元フォルダ以下をすべてコピー
  • /Y: 上書き確認を無視

コピー前後で確認するエラー対策

@echo off
if not exist "C:\hoge\data.txt" (
    echo コピー元が存在しません!
    pause
    exit /b 1
)
copy "C:\hoge\data.txt" "D:\backup\data.txt"
if errorlevel 1 (
    echo コピーに失敗しました!
) else (
    echo コピー成功!
)
pause

まとめ

  • copy → 単純ファイルコピー
  • xcopy → フォルダ丸ごとバックアップ
  • 日付付ファイル名+エラーチェックで自動化も安心

最後に

毎回フォーマットをコピーしたり自動で特定のファイルをBackupする場合などに便利なのでおすすめです。

これから、バッチファイルについて勉強されたい方は、以下がおすすめです。

この一冊でコマンドプロンプトの使い方がまる分かりできる優れものです。何か効率化したいけどどこからしたら良いか分からない時などにこの本を覗いてみて下さい。こんな事もできそうとヒントが貰えると思います。


タイトルとURLをコピーしました