【バッチファイル】バッチファイルにフォルダをドロップしてそのフォルダをコピーするには

この記事では、バッチファイルにフォルダをドロップしてそのフォルダをコピーする方法についてご説明します。

【動画】バッチファイルにフォルダをドロップしてそのフォルダをコピーする実際の動き

本題に入る前に、まずは次の動画をご覧ください。


注意

今回紹介するバッチファイルはフォルダをコピーするので、大事なファイルを上書きしてしまったり、フォルダが生成されるなど、パソコン内のディレクトリ環境を変えてしまう場合があります。

バッチファイルを実行する前は、必ずコピー先の指定に十分お気を付けください。

その点を留意して自己責任でお使いいただければ幸いです。

フォルダの例

「C:¥work¥10_勉強¥17_バッチファイル¥0005¥from」配下のフォルダに、「file」というフォルダが存在しています。

今回はこの「file」のフォルダを、バッチファイルにドロップして「C:¥work¥10_勉強¥17_バッチファイル¥0005¥to」配下にコピーします。

なお、「file」というフォルダには下の画像のとおりにファイルとフォルダが格納されています。

今回紹介するバッチファイルを実行すると、バッチファイルのコピー処理が実行されて「C:¥work¥10_勉強¥17_バッチファイル¥0005¥to」配下に「file」のフォルダがコピーされます。

「file」配下を見てみると、すべてがコピーされています。

コードの例

@echo off

rem コピー先のフォルダを指定する
set copyTo=C:¥work¥10_勉強¥17_バッチファイル¥0005¥to

rem ドラッグされたフォルダをコピーする
xcopy /E /I "%~1" %copyTo%¥%~n1

注目すべきコード①

最初に見て頂きたいのは4行目です。

rem コピー先のフォルダを指定する
set copyTo=C:¥work¥10_勉強¥17_バッチファイル¥0005¥to

コードの説明

以上のコードは、コピー先のフォルダパスを取得するコードです。

バッチファイルにフォルダをドロップしてそのフォルダをコピーする先のフォルダパスを指定します。

注目すべきコード②

次に見て頂きたいのは7行目です。

rem ドラッグされたフォルダをコピーする
xcopy /E /I "%~1" "%copyTo%¥%~n1"

コードの説明

以上のコードは、xcopyコマンドを実行して、バッチファイルにドロップされたフォルダをコピー先にコピーする処理のコードです。

第1引数:”%~1″

第1引数である「”%~1″」には、バッチファイルにドロップされたフォルダのフルパスが格納されています。

以下の画像だと、「C:¥work¥10_勉強¥17_バッチファイル¥0005¥from」配下の「file」のフォルダがバッチファイルにドロップされたので、「”%~1″」には「C:¥work¥10_勉強¥17_バッチファイル¥0005¥from¥file」の文字列(フルパス)が格納されます。

ちなみに「”」(ダブルクォーテーション)で囲っているのは、スペースを含むフォルダ名を認識させるためです。

フォルダ名にスペースが含まれていると、スペースの前後で2つの引数として認識されてしまうため、「”」(ダブルクォーテーション)で囲むことで1つの引数として認識させることができます。

第2引数:”%copyTo%¥%~n1″

第2引数である「”%copyTo%¥%~n1″」には、コピー先のパスが格納されています。

例えば「C:¥work¥10_勉強¥17_バッチファイル¥0005¥from」配下の「file」のフォルダがドロップされた場合、「”%copyTo%¥%~n1″」には、「C:¥work¥10_勉強¥17_バッチファイル¥0005¥from¥file」の文字列が格納されます。

「”%copyTo%¥%~n1″」だと分かりづらいので、下のとおりに分解してみます。

  1. %copyTo%:copyToに格納されている値(コピー先のフォルダ)
  2. ¥:パスの区切り文字「¥」
  3. %~n1:ドロップされたフォルダのパスの最下層のディレクトリ

①%copyTo%

「%copyTo%」は、copyToに格納されている値(コピー先のフォルダ)が格納されています。

今回の例では、copyToに「C:¥work¥10_勉強¥17_バッチファイル¥0005¥to」が格納されています。

②¥

「¥」はパスの区切り文字です。

③%~n1

「%~n1」は第1引数の「%~1」に格納された、バッチファイルにドロップされたフォルダのフルパスの最下層ディレクトリです。

例えば「C:¥work¥10_勉強¥17_バッチファイル¥0005¥from」配下の「file」のフォルダがドロップされた場合、「%~n1」には「file」の文字列が格納されます。

【オプション①】/E

「/E」のオプションは、ディレクトリまたはサブディレクトリが空であってもコピーする、というオプションです。

【オプション②】/I

「/I」のオプションを付けると、xcopyコマンド実行時にコピー先のフルパス(C:¥work¥10_勉強¥17_バッチファイル¥0005¥to¥file)をフォルダとして判断し コピーを行います。

xcopyコマンドがフォルダだと判断するため、xcopy実行時に、「C:¥work¥10_勉強¥17_バッチファイル¥0005¥to¥file」がファイル名を指定しているのか、それともディレクトリ名を指定しているのかを確認する以下の画像のメッセージは表示されなくなります。

動作確認

フォルダの例」をご覧ください。

最後に

この記事では、バッチファイルにフォルダをドロップしてそのフォルダをコピーする方法についてご説明しました。

バッチファイルにドロップするだけでフォルダがコピーされるのでお手軽で便利です。

例えば定期的に何かフォルダをバックアップしておきたい時に使うと良いですね。

バッチファイルにフォルダをドロップしてそのフォルダをコピーしたい場合は本記事を参考にして頂けたら幸いです。

プログラミングのスキルを習得するなら

プログラミングのスキルを習得したい、今のスキルをもっと高めたい、そう考えているなら「プログラミングスクール」がおすすめです。

プログラミングのスキルの基礎を身につけるなら「TechAcademy」で1週間の無料体験があるので、これで「プログラミングの基礎」を学ぶのにおすすめですよ。

→ TechAcademyの「1週間 無料体験」はこちら