Robocopyはルートフォルダとそのタイムスタンプをコピーしません

Robocopyはルートフォルダとそのタイムスタンプをコピーしません - それはすべてのサブディレクトリとファイルをコピーします(適切なオプションが設定されている場合)そしてRobocopyにルートフォルダとそのタイムスタンプまたは属性を欲しいと伝えるオプション/引数はありません逐語的にもコピーされます。

C:/ Brushesをコピーしたいとします。

Robocopyはすべてのサブディレクトリとファイルをコピー先にコピーしますが、Brushesフォルダ自体はコピーしません。関連するすべての属性とタイムスタンプも一緒にコピーされます。

あなたは私が求めていることを理解しましたか?これはかなり基本的なことであり、Robocopyには選択肢がないようです。人々は以前にもさまざまなフォーラムで質問を投げかけてきましたが、私の知る限りでは、誰も質問に答えていません。

enter image description here

10
ロボコピーの解決策がない場合は、 xxcopy をご覧ください(フリーウェア版と商用版があります) 。
追加された 著者 harrymc,
これは私の rsync の経験に基づくチラシですが、ターゲットフォルダの末尾に末尾にスラッシュが付いていない場合はどうなりますか? GUIを使用せずにコマンドラインレベルでスクリプトを変更しようとしたらどうでしょうか。私は、コマンドラインツールがあなたが必要とすることをするという事実を知っています。
追加された 著者 DeadHead,
@Randolph West:現在のところ、ターゲットフォルダの末尾に末尾のスラッシュはありません。 Robocopyに実際のコピージョブにソースフォルダやその属性などを含めることはまだできません。何か案は?
追加された 著者 Phill,
うん、私は完全に理解しており、以下に実用的な解決策を追加しました。本当の問題はあなたがコピーしないためにルートの中のすべてのファイルとフォルダーを指定しなければならないということです。
追加された 著者 aeroson,

10 答え

robocopy %1 "C:\DestinationDirectory\%~n1" /E /V /DCOPY:T /LOG:"C:\DestinationDirectory\Copied.txt" /R:10 /W:30 

Drop a folder onto the bat or use in Send To. It will create folder with name & time stamp of source directory and copy all files.

8
追加された
Microsoftは彼らのすべてのリンクを破った、ここでバッチのパーセントティルダドキュメント、 en.wikibooks.org/wiki/Windows_Batch_Scripting#Percent_tilde
追加された 著者 umbrae,
@hotzen、%〜n1 は何をしますか?
追加された 著者 Pacerier,
ありがとう、その魔法を探していた%〜n1演算子
追加された 著者 somethis,
追加された 著者 somethis,
"%1をファイル名に展開します。"
追加された 著者 somethis,

私はOPに同意します。ルートフォルダをコピーできないことはrobocopyの大きな欠点です。 brushesフォルダーを一時フォルダーに騙して移動し、その一時フォルダーでrobocopy操作を実行してから元に戻すのはどうですか。

何かのようなもの:

md "c:\verytemporary" && move "c:\brushes" "C:\verytemporary"||( echo Line 1 error occurred & goto :eof )
robocopy c:\verytemporary d:\ /MIR /DCOPY:T
move "c:\verytemporary\brushes" "c:\" && rd /q "c:\verytemporary"||echo Line 3 error occurred
3
追加された

<>どの回答にも、簡単で簡単な解決策はありません。

ロボコピーの解決策がない場合は、 xxcopy をご覧ください(フリーウェア版と商用版があります) 。

もちろんrobocopyには他にもたくさんの選択肢がありますが、こちらにリストされています。
ベストフリーファイルコピーユーティリティもご覧ください。

2
追加された
xxxcopy は便利なユーティリティですが、フリーウェア版では、コマンドラインスイッチを多数使用している場合に対応する必要があります。コマンドウィンドウから xxxcopy を使用すると、この余分なプロンプトはいらいらします。しかし、それはバッチファイルからの xxxcopy の使用をまったく妨げます(複雑にします)。
追加された 著者 Kevin Fegan,

Try md D:\Backup\Brushes && robocopy C:\brushes D:\Backup\Brushes from the command-line, substituting the correct paths.

2
追加された
ええ、でも、元のC:\ brushesフォルダの属性を持たない新しいフォルダを作成しているのですか。
追加された 著者 Phill,

user105198の答えは半分です。

D:\Backup\Brushes && robocopy C:\brushes D:\Backup\Brushes will indeed just create a new folder. You will need to append /MIR and /DCOPY:T to it

/mir オプションを指定した場合、インストール先ディレクトリが存在する場合は、   宛先ディレクトリのセキュリティ設定は上書きされます。 Technet

/DCOPY:T :: COPY Directory Timestamps.

つまり、ソースディレクトリの属性とタイムスタンプが、作成されたフォルダにミラーリングされます。

そう:

D:\Backup\Brushes && robocopy C:\brushes D:\Backup\Brushes /MIR /DCOPY:T
1
追加された

Robocopyは、フォルダのタイムスタンプ(/ DCOPY:T)をコピーするように指示すれば、自分の望むとおりの動作をすることがわかります。私の実験から、Robocopyには次のような(一見文書化されていない)振る舞いが当てはまることがわかりました。

移動先ディレクトリが存在するか、存在しないか、移動元ディレクトリと異なる名前であるかに関係なく、移動元ディレクトリの指定されたすべてのプロパティが移動先ディレクトリに適用されます。

指定されたプロパティには、(少なくとも)セキュリティ情報(/ SEC)またはフォルダタイムスタンプ(/ DCOPY:T)を含めることができます。

したがって、次の例では、c:\ destination \ folderにc:\ source \ folderと同じタイムスタンプが割り当てられます。

robocopy c:\source\folder C:\destination\folder /E /DCOPY:T

Windows 7、Windows 8、およびWindows 2003リソースキットに含まれているRobocopyのバージョン(/ SECパラメータのみ)でこれをテストしました。/DCOPY:Tをサポートしているのは、新しい Robocopy (XP026以降)のみです。パラメータ

1
追加された

私は今、robocopyを使った、すばやく簡単なバックアップスクリプトのためにルートフォルダを解決しました。誰にでも役立つはずです:

$Destination="F:\Backup" #change destionation backup drive and foder
$BackupDirs="d:\folder1", "d:\folder2", "d:\folder3\subfolder", "d:\fodler4\subfolder\subsubfodler" #change source folders

#make a loop for every source folder
foreach ($Backup in $BackupDirs) {

#split folder name
$fdname = Split-Path $Backup -leaf

#define folder to create in destionation
$dirtocreate = Join-Path $Destination $fdname

#make directory, yes, some extra script to skip when exist should be in place, but -erroraction solved this in lazy mode :)
md $dirtocreate -ErrorAction SilentlyContinue 

#copy with subfolders and log
robocopy $backup $dirtocreate  /s /nfl /ndl /log:c:\scripts\backup.log

}
1
追加された
では、このPowerScriptを使用すれば問題は解決しますね。
追加された 著者 Roger Hills,

/IF :: Include次のファイル/E :: copyサブディレクトリ(空のものも含む)を組み合わせると、目的の効果が得られます(近くにあります)。

C:\Temp\Robocopy Source Root>robocopy . "C:\Temp\Robocopy Destination" /E /IF "Brushes*"
0
追加された
「近い」とはどういう意味ですか?あなたが意味している制限は何ですか?
追加された 著者 Phill,
Danger Will Robinson !!! あなたの提案は現在のフォルダ内のすべてのフォルダをコピーするようです。
追加された 著者 GlennFromIowa,

理論的には、/DCOPY:T を使用すると問題はすべて解決されるはずです。

しかし、私はこれが起こるのを見ました、そして、私がそれを「バグ」と呼ぶことを確信しているのではなく、むしろ一連の操作の結果(OK、バグ)。

このコマンドはすべてのファイルを C:\ Brushes から D:\ NEWBrushes にコピーします。コピー先フォルダにコピーされるコピー元フォルダ

robocopy "C:\Brushes" "D:\NEWBrushes" /COPY:DAT /DCOPY:T

私が見たことは(少なくともRobocopyのいくつかのバージョンでは)、コマンドは成功するということですが、 D:\ NEWBrushes フォルダのタイムスタンプは現在の日付と時刻に設定されています。

そのため、/DCOPY:T 機能は、コピーしている "base"(最上位)フォルダには機能しません。

私はそれがうまくいっていると思いますが、目的のフォルダのタイムスタンプは操作シーケンスの後半にある操作によって「踏まれて」います。

私が信じているのは、このコマンドに対して起こっていることです。

robocopy "C:\Brushes" "D:\NEWBrushes" /COPY:DAT /DCOPY:T

このようなものです:

  1. Create folder D:\NEWBrushes if it doesn't already exist
  2. Copy the timestamp from C:\Brushes to D:\NEWBrushes
  3. Copy files and sub folders from C:\Brushes to D:\NEWBrushes

ステップ3、フォルダ D:\ NEWBrushes の内容を変更すると、 D:\ NEWBrushes のタイムスタンプが変更されるようです。

私にとっては、「回避策」としては、 robocopy コマンドを実行してファイルとフォルダをコピーしてから、(同じ) robocopy コマンドをもう一度実行します。

だから、あなたが最初に実行するとき:

robocopy "C:\Brushes" "D:\NEWBrushes" /COPY:DAT /DCOPY:T

すべてのファイルとフォルダがコピーされます。それからそれをもう一度実行します。

robocopy "C:\Brushes" "D:\NEWBrushes" /COPY:DAT /DCOPY:T
  (or)
robocopy "C:\Brushes" "D:\NEWBrushes" /DCOPY:T

2回目に robocopy を実行すると、 D:\ NEWBrushes 内のファイルやフォルダは変更されず、/DCOPY:T オプションは C:\ Brushes から D:\ NEWBrushes にタイムスタンプをコピーするcode> robocopy C:\ Brushesにフォルダ/ファイルがない場合) robocopy の最初の実行以降に変更された

0
追加された

Robocopy isn't really designed to do that easily. However, there is a way.

ルートフォルダは50ファイルと40フォルダと言うことができます。フォルダXだけが必要です(ただし、日時スタンプも必要です)。

ROBOCOPY c:\ d:\ /XF 50 root file names c:\boot.ini c:\bla.txt etc. /XD c:\windows c:\drivers c:\temp etc. /S /E /SEC /DCOPY:T

/ DCOPY:Tは、フォルダのタイムスタンプを保持するように指示します。/XFはどのファイルをコピーしないかを指定し、/ XDはどのフォルダーをコピーしないかを指定します。フォルダc:\ Xを指定しないでください。

これの主な欠点は、ルート内のすべてのフォルダとファイル名を調べて、ここでそれらをすべて呼び出すことです。あなたが異なるシステムでこれをたくさんしているなら、スクリプトを書くことができます。

実用例

robocopy c:¥testing c:¥abc/XF c:¥testing¥Testing.txt/XD "C:¥testing¥New Folder(2)" "C:¥testing¥New Folder(3)"/S/E/SEC/DCOPY:T

ルートワーキングの例

robocopy c:\ d:\/XF c:\ Testing.txt/XD "C:\新しいフォルダ(2)" "C:\新しいフォルダ(3)"/S/E/SEC/DCOPY:T

私のテストはうまくいきました、私はいくつかのフォルダとサブフォルダを作成します、c:\ testingはこの場合ルートでした、c:\ abcは別のドライブのルートでした(明らかにそれらは本当ではない、しかしこの目的のために意味があるはずです)。あなたが私が/ XDでそれを指定しなかったのを見ることができるように、私がルートから欲しかったフォルダーは「新しいフォルダー」と呼ばれました。また、必ずc:\を指定するか、使用する名前をグローバルにしてください。つまり、Testing.txtファイルでc:\ testingを指定しなかった場合、コピーされているすべてのサブフォルダーから除外されます。/SECはすべてのファイルセキュリティとタイムスタンプをコピーします。

0
追加された
うーん、私はあなたがすべてのルートファイルを除外するために/ XF c:*。*を使用することができると思います。電話ではなくマシンの前にいるときにテストします。
追加された 著者 aeroson,
いいえ、c:*。*は無効です。手動ですべてのファイルをリストする必要があります。
追加された 著者 aeroson,