コピーを行うバッチスクリプトを書いています。フォルダー全体をコピーするスクリプトを作成します。単一のファイルをコピーしたい場合、これを行います
copy %~dp0file.txt file.txt
この構造のフォルダーがある場合、正確な構造を維持しながら、フォルダー全体とその内容を一度にコピーするコマンドがあります。
mainfolder/
file1.txt
file2.txt
insidefolder/
file3.txt
file4.txt
file5.txt
xcopy
がある場合は、/E
param。空のディレクトリのディレクトリ構造を維持するなど、ディレクトリとサブディレクトリとそれらの中のファイルをコピーします
xcopy [source] [destination] /E
古い方法:
xcopy [source] [destination] /E
xcopyは非推奨です。 RobocopyはXcopyを置き換えます。 Windows 8、8.1、および10に付属しています。
robocopy [source] [destination] /E
robocopyにはいくつかの利点があります:
詳細 こちら 。
xcopy
コマンドはあなたが探している魔法の弾丸だと思います。
元のディレクトリ階層を維持しながら、ファイル、ディレクトリ、さらにはドライブ全体をコピーできます。基本的なcopy
コマンドと比較して、使用可能な追加オプションもいくつかあります。
こちらのドキュメント をご覧ください。
バッチファイルをWindows Vista以降でのみ実行する必要がある場合は、代わりに robocopy
を使用できます。これはxcopy
よりも強力なツールで、現在はオペレーティングシステムに組み込まれています。ドキュメントが利用可能です こちら 。
ここでの元の質問と関連する質問に興味があります。
答えとして、今週、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
使用できるフォルダコピー
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のタスクをスケジュールして、特定の時間にこのタスクを自動的に実行できます。