ここでは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で指定している数値は文字エンコードの識別子になります。以下が、一覧になります。
数値 | エンコード |
932 | Shift-JIS |
10001 | 日本語(Mac) |
51932 | EUC 日本語 |
65001 | UTF-8 |
20932 | EUC-JP |
末尾に日付を付けてのコピー
@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時などの自動化に便利です。
最後に
毎回フォーマットをコピーしたり自動で特定のファイルをBackupする場合などに便利なのでおすすめです。
これから、バッチファイルについて勉強されたい方は、以下がおすすめです。
この一冊でコマンドプロンプトの使い方がまる分かりできる優れものです。何か効率化したいけどどこからしたら良いか分からない時などにこの本を覗いてみて下さい。こんな事もできそうとヒントが貰えると思います。