web-dev-qa-db-ja.com

フォルダーとコンテンツを一度にコピーするバッチ/バット

コピーを行うバッチスクリプトを書いています。フォルダー全体をコピーするスクリプトを作成します。単一のファイルをコピーしたい場合、これを行います

copy %~dp0file.txt file.txt 

この構造のフォルダーがある場合、正確な構造を維持しながら、フォルダー全体とその内容を一度にコピーするコマンドがあります。

mainfolder/
  file1.txt
  file2.txt
  insidefolder/
     file3.txt
     file4.txt 
     file5.txt
32
zmol

xcopyがある場合は、/E param。空のディレクトリのディレクトリ構造を維持するなど、ディレクトリとサブディレクトリとそれらの中のファイルをコピーします

xcopy [source] [destination] /E
54
akf

古い方法:

xcopy [source] [destination] /E

xcopy非推奨です。 RobocopyはXcopyを置き換えます。 Windows 8、8.1、および10に付属しています。

robocopy [source] [destination] /E

robocopyにはいくつかの利点があります:

  • 259文字を超えるコピーパス
  • マルチスレッドコピー

詳細 こちら

11
Vertexwahn

xcopyコマンドはあなたが探している魔法の弾丸だと思います。

元のディレクトリ階層を維持しながら、ファイル、ディレクトリ、さらにはドライブ全体をコピーできます。基本的なcopyコマンドと比較して、使用可能な追加オプションもいくつかあります。

こちらのドキュメント をご覧ください。

バッチファイルをWindows Vista以降でのみ実行する必要がある場合は、代わりに robocopy を使用できます。これはxcopyよりも強力なツールで、現在はオペレーティングシステムに組み込まれています。ドキュメントが利用可能です こちら

5
Cody Gray

ここでの元の質問と関連する質問に興味があります。

答えとして、今週、XCOPYでいくつかの実験を行いました。

元の質問に答えるために、ここに実験結果を投稿します。

オペレーティングシステムに付属のXCOPYのコピーを使用して、Windows 7 64ビットProfessional SP1で実験を行いました。

実験のために、スクリプトエディターOpen Object RexxとテキストエディターKEditを使用したエディターマクロ言語Kexxでコードを作成しました。

XCOPYはRexxコードから呼び出されました。 Kexxコードは、XCOPYの画面出力を編集して、重要な結果に焦点を合わせました。

すべての実験は、XCOPYを使用して1つのディレクトリを複数のファイルとサブディレクトリでコピーする必要がありました。

実験は10ケースで構成されていました。各ケースで引数をXCOPYに調整し、XCOPYを1回呼び出しました。 10件すべてが同じコピー操作を行おうとしていました。

主な結果は次のとおりです。

(1)10件のうち、コピーを行ったのは3件のみでした。他の7つのケースは、XCOPYへの引数の処理からすぐに、エラーメッセージを出しました。

Invalid path

Access denied

ファイルはコピーされません。

コピーを実行した3つのケースのうち、すべて同じコピーを実行しました。つまり、同じ結果が得られました。

(2)ディレクトリXと、ディレクトリXをルートとする階層ファイルシステムツリー内のディレクトリX内のすべてのファイルとディレクトリをコピーする場合、明らかにXCOPY-これは元の質問の多くであるように見えます-しないでください。

1つの結果は、XCOPYを使用してディレクトリXとそのコンテンツをコピーする場合、コンテンツをコピーできますが、ディレクトリX自体をコピーすることはできません。したがって、ディレクトリXの日時スタンプ、そのアーカイブビット、所有権に関するデータ、属性などが失われます。

もちろん、ディレクトリXがディレクトリYのサブディレクトリである場合、YのXCOPYはディレクトリYのすべての内容をディレクトリXでコピーします。したがって、この方法でディレクトリXのコピーを取得できます。ただし、ディレクトリXのコピーは元のディレクトリXの日時スタンプではなく、XCOPYの実行時刻の日時スタンプ。

日時スタンプのこの変更は、ダウンロードされた多くのWebページを含むディレクトリのコピーでは扱いにくい場合があります。WebページのHTMLファイルには元の日時スタンプがありますが、HTMLで使用されるファイルの対応するサブディレクトリファイルには、XCOPYの実行の日時スタンプがあります。そのため、タイムスタンプ、すべてのサブディレクトリ、HTMLファイル、および対応するサブディレクトリでコピーを並べ替える場合、

x.htm

x_files

日時の並べ替えで遠く離れて表示されることがあります。

階層ファイルシステムは1969年にIIRCからMITでMulticsに戻り、それ以来、多くの人々がディレクトリXを与えられて、(i)ディレクトリXとそのすべてのコンテンツをコピーし、(ii) Xのすべての内容をコピーしますが、ディレクトリX自体はコピーしません。さて、もし実験からだけであれば、XCOPYは(ii)だけを行います。

したがって、10件の結果は以下のとおりです。いずれの場合も、結果の最初の3行にはXCOPYの最初の3つの引数があります。したがって、最初の行には、コピーするディレクトリのツリー名である「ソース」があります。 2行目にはコピーを取得するディレクトリのツリー名、「宛先」があり、3行目にはXCOPYのオプションがあります。残りの1-2行には、XCOPYの実行結果が含まれています。

オプションに関する1つの大きなポイントは、オプション/ Xおよび/ Oの結果がresultであることです。

Access denied

これを確認するには、ケース8を、同じで、/ Xと/ Oを持たず、コピーした他のケースと比較します。

これらの実験により、XCOPYの理解が深まり、元の質問に対する回答が得られます。

======= case 1 ==================
"k:\software\dir_time-date\"
"k:\software\xcopy002_test\xcopy002_test_dirs\output_sub_dir_1\"
options = /E /F /G /H /K /O /R /V /X /Y
Result:  Invalid path
Result:  0 File(s) copied
======= case 2 ==================
"k:\software\dir_time-date\*"
"k:\software\xcopy002_test\xcopy002_test_dirs\output_sub_dir_2\"
options = /E /F /G /H /K /O /R /V /X /Y
Result:  Access denied
Result:  0 File(s) copied
======= case 3 ==================
"k:\software\dir_time-date"
"k:\software\xcopy002_test\xcopy002_test_dirs\output_sub_dir_3\"
options = /E /F /G /H /K /O /R /V /X /Y
Result:  Access denied
Result:  0 File(s) copied
======= case 4 ==================
"k:\software\dir_time-date\"
"k:\software\xcopy002_test\xcopy002_test_dirs\output_sub_dir_4\"
options = /E /F /G /H /K /R /V /Y
Result:  Invalid path
Result:  0 File(s) copied
======= case 5 ==================
"k:\software\dir_time-date\"
"k:\software\xcopy002_test\xcopy002_test_dirs\output_sub_dir_5\"
options = /E /F /G /H /K /O /R /S /X /Y
Result:  Invalid path
Result:  0 File(s) copied
======= case 6 ==================
"k:\software\dir_time-date"
"k:\software\xcopy002_test\xcopy002_test_dirs\output_sub_dir_6\"
options = /E /F /G /H /I /K /O /R /S /X /Y
Result:  Access denied
Result:  0 File(s) copied
======= case 7 ==================
"k:\software\dir_time-date"
"k:\software\xcopy002_test\xcopy002_test_dirs\output_sub_dir_7"
options = /E /F /G /H /I /K /R /S /Y
Result:  20 File(s) copied
======= case 8 ==================
"k:\software\dir_time-date"
"k:\software\xcopy002_test\xcopy002_test_dirs\output_sub_dir_8"
options = /E /F /G /H /I /K /O /R /S /X /Y
Result:  Access denied
Result:  0 File(s) copied
======= case 9 ==================
"k:\software\dir_time-date"
"k:\software\xcopy002_test\xcopy002_test_dirs\output_sub_dir_9"
options = /I /S
Result:  20 File(s) copied
======= case 10 ==================
"k:\software\dir_time-date"
"k:\software\xcopy002_test\xcopy002_test_dirs\output_sub_dir_10"
options = /E /I /S
Result:  20 File(s) copied
0
a_programmer

使用できるフォルダコピー

robocopy C:\Source D:\Destination /E

ファイルコピー用

copy D:\Sourcefile.txt D:\backup\Destinationfile.txt /Y 

あるフォルダー内のファイルを削除します

forfiles -p "D:\FolderPath" -s -m *.[Filetype eg-->.txt] -d -[Numberof dates] -c "cmd /c del @PATH"

また、Windowsのタスクをスケジュールして、特定の時間にこのタスクを自動的に実行できます。