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


10

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

C:/ Brushesをコピーしたい

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

あなたは私が尋ねていることを理解していますか?これはかなり基本的なもので、Robocopyにはオプションが欠けているようです。これまでにさまざまなフォーラムで質問が寄せられてきましたが、私に関する限り、誰も質問に答えていません。

ここに画像の説明を入力してください


1
これはでの私の経験に基づいたチラシrsyncですが、ターゲットフォルダーの最後にスラッシュが付いていない場合はどうなりますか?GUIを使用する代わりに、コマンドラインレベルでスクリプトを変更してみてはどうですか。コマンドラインツールが必要なことを行うという事実を知っています。

@Randolph West:現在、ターゲットフォルダーの末尾に末尾のスラッシュはありません。Robocopyに、実際のコピージョブにソースフォルダーとその属性などを含めることはできません。何か案は?
ptrcao

robocopyの解決策がない場合は、xxcopyを見ることができます(フリーウェアと商用バージョンがあります)。
ハリーマク

うん、私は完全に理解し、以下に実用的なソリューションを追加しました。本当の問題は、コピーしないようにルート内のすべてのファイルとフォルダーを指定する必要があることです。
-opsin

回答:


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

上にフォルダをドロップするbatか、送信先で使用します。ソースディレクトリの名前とタイムスタンプを持つフォルダーを作成し、すべてのファイルをコピーします。


どうもありがとうございました、その魔法%〜n1のオペレータを探していた
hotzen

@hotzen、何をし%~n1ますか?
Pacerier


「%1をファイル名に展開します。」
hotzen

Microsoftはここで、すべてのリンクを壊し、バッチのパーセントチルダドキュメントを持っているen.wikibooks.org/wiki/Windows_Batch_Scripting#Percent_tilde
kevinf

3

ルートフォルダーをコピーできないことは、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

2

md D:\Backup\Brushes && robocopy C:\brushes D:\Backup\Brushes正しいパスに置き換えて、コマンドラインから試してください。


1
ええ、しかし、元のC:\ brushesフォルダーの属性を持たない新しいフォルダーを作成しています...?
-ptrcao

2

私は答えのいずれにも良い簡単な解決策を見ることができないので:

robocopyの解決策がない場合は、xxcopyを見ることができます(フリーウェアと商用バージョンがあります)。

もちろん、robocopyには他にも多くの代替手段がありますが、一部はここにリストされていますBest Free File Copy Utility
も参照してください。


1
xxcopyは素晴らしいユーティリティですが、フリーウェアバージョンには、コマンドラインスイッチの大きなリストのいずれかを使用する場合に応答する必要があるプロンプトがあります。xxcopyコマンドウィンドウから使用すると、この余分なプロンプトはいらいらします。ただしxxcopy、バッチファイルからの使用はまったく防止(複雑化)します。
ケビンFegan

1

user105198の答えは中途半端ですが、

D:\Backup\Brushes && robocopy C:\brushes D:\Backup\Brushes 実際、新しいフォルダーを作成するだけです。/ MIRおよび/ DCOPY:Tを追加する必要があります

/のmiR先のディレクトリが存在する場合はオプション、先のディレクトリのセキュリティ設定が上書きされます。Technet

/DCOPY:T :: COPY Directory Timestamps.

組み合わせて、手段:ソースディレクトリの属性とタイムスタンプは、作成されたフォルダーにミラーリングされます。

そう:

D:\Backup\Brushes && robocopy C:\brushes D:\Backup\Brushes /MIR /DCOPY:T

1

フォルダーのタイムスタンプ(/ DCOPY:T)をコピーするようにRobocopyに指示すれば、Robocopyが希望どおりに動作することがわかると思います。私の実験から、次の(一見文書化されていないように見える)動作が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パラメーターのみ)でテストしました。Robocopyの新しいバージョン(XP026 以降)のみが/ DCOPY:Tパラメーターをサポートしていることに注意してください。


0

あなたが結合した場合/IF :: Include the following Files./E :: copy subdirectories, including Empty ones.、あなた(近くに)所望の効果が得られます。

C:\Temp\Robocopy Source Root>robocopy . "C:\Temp\Robocopy Destination" /E /IF "Brushes*"

1
「近い」とはどういう意味ですか?あなたが暗示している制限は何ですか?
ptrcao

危険ウィルロビンソン!あなたの提案は、「Brushes」で始まるフォルダーに限定するのではなく、現在のフォルダー内のすべてのフォルダーをコピーするようです
-GlennFromIowa

0

Robocopyは、実際にそれを簡単に行えるようには設計されていません。ただし、方法があります。

ルートフォルダーには、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:\ New Folder(2)" "C:\ New Folder(3)" / S / E / SEC / DCOPY:T

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


うーん、/ XF c:*。*を使用してすべてのルートファイルを除外できると思います。電話ではなく機械の前にいるときにテストします。
オプシン

いいえ、c:*。*は無効です。すべてのファイルを手動でリストする必要があります。
オプシン

0

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

しかし、私はこれが起こるのを見て、それを「バグ」と呼ぶかどうかはわかりませんが、むしろ一連の操作の結果です(OK、バグ)。

このコマンドは、すべてのファイルをコピーするために動作するはずC:\BrushesD:\NEWBrushes、および/DCOPY:Tソースフォルダのタイムスタンプが保存先のフォルダにコピーする必要があります原因:

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

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

その/DCOPY:Tため、コピーしている「ベース」(最上位)フォルダーでは機能が機能しないようです。

私はそれが機能していると信じていますが、宛先フォルダのタイムスタンプは、操作シーケンスの後半にある操作によって「踏まれ」ています。

私はこのコマンドで起こっていると信じています:

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

このようなものです:

  1. フォルダーD:\NEWBrushesが存在しない場合は作成します
  2. からタイムスタンプをコピーC:\BrushesしますD:\NEWBrushes
  3. ファイルのコピー元とサブフォルダC:\BrushesD:\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オプションはrobocopyタイムスタンプをからC:\Brushesにコピーするように指示しますD:\NEWBrushesC:\Brushes最初の実行以降に変更されたフォルダー/ファイルが存在しない場合robocopy)。


-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

}

このPowerScriptを使用すると、問題は解決しますか?
ポン引きジュースIT
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.