Windowsでファイルをコピーするときにファイル属性を保持するにはどうすればよいですか?


41

Linuxでは、次のことが簡単にできます。

cp -pr directory

Windowsでそれを行う方法は?Windowsエクスプローラーで実行できますか?GUIツールの提案はありますか?

NTFSのアクセス許可と作成/変更/アクセス時間を維持できれば最高です。少なくとも、ファイルディレクトリの変更日を保存する必要があります。Windowsエクスプローラのコピーでは、ディレクトリの変更日は保持されません。



1
重複しているとは思わない。ファイル作成時間は、ファイル属性の1つにすぎません。
netvope

その質問の答えは、すべてのタイムスタンプ、mtime、ctime、およびatimeを保持するソフトウェアを提供します。
ジョンT

これは、興味のある:support.microsoft.com/kb/310316。残念ながら、これらのレジストリキーの一部はVista以降では動作しません。
アムロ

robocopy c:\folderA c:\folderB /mir /itは、あなたが必要とすることすべてです。これにより、c:\ folderBが完全に削除され、c:\ folderAをミラーリングする新しいc:\ folderBが作成されることに注意してください。
-Pacerier

回答:


6

Windowsでこれを行う簡単な方法はありません。ファイルの作成日を保存できると主張するプログラムがいくつかあります。
ここでは、トリックを行う可能性があるいくつかのプログラムですhttp://forum.soft32.com/windows/preserve-creation-date-Copy-ftopict361820.html   (;ないウェイバックマシン内のリンク切れ)。

Windowsエクスプローラーだけを使用することはできません。CopyFile、CopyFile関数(winbase.h)のドキュメントを 見ると、この問題を回避していることがわかります。ただし、  CopyFile関数(Windows Developer Preview) (同じURLの2012アーカイブ)は次のように述べています。

ファイル時間セマンティクス

この記事では、ファイルの作成/変更/アクセス時間に関するセマンティクスを文書化する必要があります。

作成時刻:ターゲットファイルが既に存在する場合、その作成時刻は保持されます。それ以外の場合、現在のシステム時刻に設定されます。
最終変更時刻:常にソースファイルの変更時刻からコピーされます。
最終アクセス時刻:常に現在のシステム時刻に設定されます。


リンクが壊れています。
Smile4ever

21

RoboCopyは、/ DCOPY:Tスイッチを使用してディレクトリのmtimeを保持できますが、これはVista以降でのみ機能します。ACLを保持することもできます。または、ディレクトリmtimes、ACL、およびADSを保持するようにFastCopyを構成できます。


Windowsでは、ファイル/フォルダーの属性をコピーするだけでなく、コピープロセス全体でファイルの整合性とエラー処理を適切に行えるため、robocopyを使用することをお勧めします。
megamorf

@megamorf:robocopyはどのように特別なことをしますか?データのチェックサムやハッシュは行わず、OSに依存して、他のほとんどのプログラムと同様にエラーを報告します。
フレイザー14年

現在のところ、robocopyには事前事後チェックサム比較機能がないことに同意します。ただし、一般に、エラーが発生すると、robocopyはファイル全体を再送信します。エラーが発生した後、ファイル全体を再度送信せずに、ファイルの残りの部分を宛先に書き込むことを再開する場合は、/ Zスイッチを指定します。
メガモーフ14年

@afrazier、なぜ単純に使用しないの/mirですか?
-Pacerier

2
@Pacerierは、質問はツリーのミラーリングに関するものではないため、ファイルとフォルダーをコピーし、可能な限り多くのメタデータを保持することです。/mir宛先フォルダからデータを削除するだけでなく、/dcopy:tディレクトリのmtimes /copyallを保持し、ファイルのタイムスタンプ以外のものを保持する必要がありました。
フレイジャー

19

...または、zipアーカイブを作成して(圧縮方法を「保存」に設定して)、コピーするファイルを解凍します。日付/時刻属性は元のファイルと同じです。


クールなアイデア。しかし、これはファイルのプロパティなどの「他のもの」をコピーしますか?
-Pacerier

2
これは常に機能するとは限りません。たとえば、7-zipでは、7zip圧縮を使用してもファイル時間の1つが保持されません(どれを忘れるか)。ディレクトリ時間は保存されません(思い出します)、ZIPでは、作成時間と変更時間の両方を保存できますが、7zipは、解凍方法に応じて時間の一部のみを保持します:プログラムメニューからドラッグアンドドロップまたは抽出するかどうか。若いバッタ、よくテストしてください。
ジョン

3
どうもありがとう、これは私にとってはうまくいった。ZIP形式の7zipを使用しました(作成日は7Z形式では保持されません)。
AFract

これを行うために使用する特定のコマンドを追加できますか?あなたが提案した圧縮方法を使用する特定のコマンドの例は?これにより、より多くの提案やコメントとは対照的に、より完全な回答になります。また、無数の人々が検索を実行して提案を達成する方法を見つけなくても済むようにします。また、ボーナスとして、リンクドキュメントまたはこの方法についての詳細情報との記事は素晴らしいだろうすべての情報は、(検索)車輪の再発明から皆を保存し、劇的upvotesを増やすことができます提供私たちはあなたに感謝。。!
SherylHohman

6

Robocopyコマンドラインツール(ほとんどのバージョンのWindowsに付属)
Windows 10マシンでは、次の場所にあります。C:\Windows\System32

Wikipediaから、ファイルディレクトリのタイムスタンプ、およびその他の属性を保持するために、次の一連のオプションとともに使用できます。

Robocopy C:\some_directory D:\some_directory /DCOPY:T /COPYALL /E /R:0

  • /DCOPY:T元のディレクトリのタイムスタンプを保持する(バージョンXP026以降が必要)
  • /E:空のディレクトリを含むディレクトリを再帰的にコピーします
  • /R:0:ロックされたファイルを再試行しません(失敗したコピーの再試行回数のデフォルト値は100万です)。

  • /COPYALL:すべてのファイル情報をコピーします
    (と同等/COPY:DATSOU、ここで

    • D=データ、
    • A=属性、
    • T= ファイルのタイムスタンプ
    • S=セキュリティ= NTFS ACL、
    • O=所有者情報、
    • U=監査情報)、

あなたがいる場合のみ、日付やディレクトリのタイムスタンプを維持したいのですが、やるではない、空のサブディレクトリがコピーされたくやんではない他の属性は、あなたが使用することができ、保存します。
Robocopy C:\some_directory D:\some_directory /DCOPY:T /COPY:T /S

空でないサブディレクトリを/Sコピーする場所

完全な構文を確認するにrobocopy /?は、コマンドプロンプトで入力するか、https//ss64.com/nt/robocopy.htmlおよびhttps://techjourney.net/robocopy-syntax-command-lineのブログ投稿を ご覧ください。 -switch-and-examples /

最近実行したコマンドの例:
Robocopy D:\ C:\D_backup /DCOPY:T /COPYALL /E /R:0 /ZB /ETA /TEE /V /FP /XD D:\$RECYCLE.BIN /XD "D:\System Volume Information" /LOG:C:\D_backup_robocopy.LOG /MIR

2つのサブディレクトリを除外すると、/XDフラグを2回使用する必要があることに注意してください。また、ディレクトリ名にスペースが含まれているため、2番目のディレクトリ除外では引用符が使用されます。

最後に、/L実際に実行する前にコマンドをテストするフラグを追加できます。この方法で、不要なディレクトリ/ファイルをコピー(または削除)せず、コマンドにエラーがないことを確認できます。

編集:ルートディレクトリ(ドライブ)からフォルダー(非ルートディレクトリ)にコピーする際の注意点

上記のサンプルコマンドを実行した後、ディレクトリは表示されませんでした!(たとえshow hidden filesshow system filesWindowsの10で確認された!)次のコマンドごとにhttps://serverfault.com/a/455029/399723これを固定:

attrib -h -s C:\D_backup

または、/A-:SH「システムファイルから非表示属性を設定解除」を追加すると、https://serverfault.com/a/565804/399723のように、最初にディレクトリが非表示になるのを防ぐことができますhttps://ss64.com/nt/robocopy.htmlも参照してください
この議論は、ソリューションとしてこのオプションにさらに光を当てます。

Robocopy D:\ C:\D_backup /A-:SH /DCOPY:T /COPYALL /E /R:0 /ZB /ETA /TEE /V /FP /XD D:\$RECYCLE.BIN /XD "D:\System Volume Information" /LOG:C:\D_backup_robocopy.LOG /MIR

その他のソフトウェア:

または、コマンドラインを使用したくない場合は、robocopyのGUIバージョンをダウンロードできます。

もう1つのWindowsユーティリティはXCopyです。これはWindows 10に含まれていますが、非推奨です。落とし穴のリンクを参照してください。

RoboCopyのWikipediaページ(この投稿の上部にリンクされています)には、使用できる他のソフトウェアがリストされています。


1
いい答えだ。最初のものはちょっと時代遅れなので、選ばれたものでなければなりません。Windows 7以降、robocopyを使用してクライアントのバックアップから空のディレクトリを削除しましたが、Windows XP
DGoiko

@DGoikoあなたは正しいと思う。確かにWindows 7で広く使用しました。残念ながら、特別なWindows 7 Proラップトップを購入することはもはや選択肢ではありません。だから、私は今勝ちました10。あまりよく知られていない。
シェリルホーマン

Robocopy GUIは優れています。
エディクマール

4

同期してください!3.5は、すべてのタイムスタンプ(ファイルとフォルダー、変更と作成)を保持します。これは、Robocopyに加えてWindows XPで問題なく動作する唯一のソフトウェアであり、多くのことを試しました。ただし、FlashGetやOrbit Downloaderなどのソフトウェアを使用してダウンロードしたソースファイルで破損したファイルが生成される可能性があることに注意してください(結果のファイルは同じサイズですが、25kBのみが実際にコピーされます-残りはゼロで埋められます)。私はソフトウェアの作成者にその理由を理解できるか尋ねたが、彼には何の手がかりもなかった。速度を最適化するために小さなパケットでファイルをダウンロードするソフトウェアと、データパーティションが非常に断片化されていることに関係していると思います。

Robocopy XP026は確かにWindows Vistaに含まれていますが、Windows XPで動作します。「Robocopy XP026」を検索するか、見つけるのが簡単ではないため、ここにファイルを送信できます。または、Robocopy GUIをインストールrobocopy.exeしてからSystem32フォルダーでファイルを検索し、コマンドラインから使用できるようにします。私が持っているファイルは208kBで、バージョン番号は5.1.2600.26です。

ただし、「バックアップモード」にはバグがあるようです。

http://msmvps.com/blogs/martinzugec/archive/2008/03/03/ugly-bug-in-robocopy-ignoring-security-on-file-level.aspx

RobocopyバージョンXP027には明ら​​かにこのバグはありませんが、Windows XPでは動作しません。


ファイルダウンロードユーティリティ(Bittorrentなど)は、ディスク上のファイルのフルサイズ(0でいっぱい)を割り当て、複数のソースからセクションをダウンロードして、ファイル内の適切な場所に保存します。開始時のファイルには多くの0000があります。ファイルが完全にダウンロードされたことはないか、同期します!0000が多すぎてコピーをあきらめました。
クロエ

ありがとう!Synchronize Itを使用しました!それもとても速いです!SyncToyとUnisonは、ファイルの変更時間を台無しにしていました。UnisonはCygwinシンボリックリンクを破損していました。SyncToyは宛先のジャンクションにあることが判明した「マイミュージック」をコピーしていましたが、リフレッシュすると、すべてが同じであるにもかかわらず、再度コピーしたいのです!
クロエ



1
xcopy *.* C:\temp\Pics /c /d /e /h /i /k /q /r /s /x /y

どのスイッチがファイルの日付を保持するかわかりませんが、これは機能します。次に、前述のようにファイルの日付も保持するC:\ temp \ Picsディレクトリを圧縮します。


1
コピーの圧縮はこの議論にどのように適合しますか?
スコット

また、[zip]ファイルのタイムスタンプを維持することで適合します。これは、質問をした人を占めるようです。どういたしまして、スコット。これは、正しい答えではないにしても、役に立つ答えをたまたま作るものです。
amn

これはファイルの日付/時刻を保存しますが、フォルダーの場合は保存しません。
バルネコ

1

これまでのところ、私にとって最も簡単な方法は「送信」メソッドです。外部アプリケーションは必要ありません。私の経験では、元のファイル属性はすべて保持されます。

以前使用した方法は、圧縮/ zipフォルダー方式でした。ただし、圧縮と解凍の両方でファイルがコピーされるだけでなく、処理および圧縮されるため、これには確かに時間がかかります。

%appdata%\Microsoft\Windows\SendTo
または。 C:\Users\_______\AppData\Roaming\Microsoft\Windows\SendTo

コピーするフォルダーにショートカットを追加すると、コピーsendtoするファイルを右クリックすると、メニューにアイテムが表示されます。


「右クリック>送信」を使用するコツを共有していただきありがとうございます。作成日を除き、機能します。以前は、ネイティブのxcopyコマンドを使用していましたxcopy Source Destination /kes。(kフラグを使用すると、変更タイムスタンプを保持できますが、作成日は保持されません)。zip(またはrar)への圧縮方法は良い方法ですが、多くの場合、時間がかかりすぎます。
OuzoPower

0

フォルダとディレクトリを移動するのは簡単で、作成日を保持します。ただ、保持Shiftして、新しい場所(移動コマンド)にフォルダをドラッグします。変更日は現在の日付になりますが、作成日には元の日付が保持されます。


2
こんなことしないで!これにより、元のフォルダーからファイルが削除されます。これをしようとすると、携帯電話から回復不能なデータが失われただけです(CTRL + Zが機能しません)。
BadAtPHP


0

これにはxcopyが正常に機能します。/ kフラグを指定して属性をコピーするだけです。

構文
xcopy Source [宛先] [オプションのパラメーター]

xcopyコマンドは、1つ以上のファイルまたはディレクトリツリーをある場所から別の場所にコピーできます。xcopyコマンドは、Windows 95からWindows 8までのすべてのバージョンのWindowsに含まれています。


1
/Kパラメータを試してみましたが、作成日が保持されませんでした。
CoDEmanX

それは時々動作し、時には動作しないので、私には思えます
SebastianH

0

私はこれを達成します

rsync -avu --modify-window = 3602 source_directory / target_directory /

(これは実際にあるディレクトリから別のミラーへの同期ツールとして使用され、timewindowオプションは、Linuxシステムと比較して夏時間などのためにWindowsシステムが1時間クロックを移動するときの問題を防ぐためのものです)

Windows内のcygwin環境、または WindowsドライブがマウントされたWindows内のLinux仮想マシン(例、virtualbox)

NB cygwinとvirtualboxはどちらも無料であり、WindowsでのLinux機能の程度を多少変更することができます。どちらも少し設定が必要です。特にvirtualboxですが、多くの利点があります。

私自身の問題は、ファイルには正しい時間がありますが、ディレクトリにはないということでした。rsyncは、ディレクトリの日付とファイルの日付を整理しました。


0

このコマンドは、ファイルの同じタイムスタンプをコピーします。フォルダー自体のタイムスタンプがまったく同じではないことに注意してください。また、ソース(Temp1)と宛先(Temp2)の両方を引用符で囲んだことに注意してください。これは、パスにスペースがある場合に行われます。スペースはありませんが、最悪のシナリオには含める必要があると考えました。

robocopy /E /copy:DAT "C:\Temp1" "c:\Temp2"

フォルダーのタイムスタンプも同じに保つには:

robocopy / E / copy:DAT / dcopy:DAT "C:\ Temp1" "c:\ Temp2"

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