web-dev-qa-db-ja.com

Windowsでファイルをコピーするときにファイル属性を保持する方法

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

cp -pr directory

Windowsでそれをするには? Windowsエクスプローラでもできますか?任意のGUIツールの提案?

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

39
netvope

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

Windowsエクスプローラを使用するだけでは不可能です。 CopyFile( http://msdn.Microsoft.com/ja-jp/library/aa363851%28VS.85%29.aspx の資料を見れば - ))あなたはそれが言うのを見るでしょう:
この記事は、ファイルの作成/変更/アクセス時間に関するセマンティクスを文書化する必要があります。

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

5
Daisetsu

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

20
afrazier

...またはZipアーカイブを作成し(圧縮方法を "Store"に設定)、コピーしたい場所にファイルを解凍します。日付/時刻属性は元のファイルと同じです。

19
Silkworm

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 =監査情報)、

onlyだけで日付とディレクトリのタイムスタンプを保存したいが、notとしたい場合は空のサブディレクトリを上書きコピーしてnot他の属性を保持したい場合は、次のようにします。
Robocopy C:\some_directory D:\some_directory /DCOPY:T /COPY:T /S

/S空ではないサブディレクトリをコピーします。

完全な構文を表示するには、コマンドプロンプトでrobocopy /?を入力するか、次のブログ投稿をご覧ください。 https://ss64.com/nt/robocopy.html および https://techjourney.net/ robocopy構文コマンドラインスイッチと例/

最近実行したコマンドの例
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フラグを追加できます。これにより、不要なディレクトリやファイルがコピー(または削除)されず、コマンドにエラーがないことを確認できます。

編集:ルートディレクトリ(別名ドライブ)からフォルダ(非ルートディレクトリ)へのコピー時の問題

上記のコマンド例を実行した後、ディレクトリは見えませんでした。 (Windows 10でshow hidden filesshow system filesがチェックされていたとしても!) 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

その他のソフトウェア

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

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

RoboCopyのウィキペディアのページ(この記事の先頭にリンクされています)には、使用可能な他のソフトウェアがリストされています。

5
SherylHohman

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

Robocopy XP026は確かにWindows Vistaに含まれていますが、Windows XP上で動作します。 "Robocopy XP026"を検索するか、見つけるのが簡単ではないので、ここにファイルを送ることができます。または、Robocopy GUIをインストールしてからSystem32フォルダーでrobocopy.exeファイルを検索し、コマンドラインから使用することもできます。私が持っているファイルは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では動作しません。

4
Gabriel

RoboCopyはCOPYALLスイッチでそれを実行できるはずです。 GUIのバージョンは Microsoft Technet から入手できます。

3
Russ Warren

FastCopy はこれができ、無料です。

1
yarun can

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

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

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

コピー先のフォルダにショートカットを追加すると、コピーしたいファイルを右クリックしたときにsendtoメニューに項目が表示されます。

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

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

1
dmaier

私はこれを達成する

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

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

windows内のcygwin環境またはwindowsドライブを搭載したwindows内のlinux仮想マシン(例:virtualbox)

NB cygwinとvirtualboxはどちらも無料で、Windows上でLinuxの機能を多少なりとも拡張することができます - 両方ともセットアップが少し必要です。特にvirtualboxが、たくさんの利点があります。

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

0
tom

xcopyはこれのためにうまく働きます。属性をコピーするには、/ kフラグを指定するだけです。

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

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

0
Chris

このコマンドはファイルの同じタイムスタンプをコピーします。フォルダ自体にタイムスタンプを付けるのとまったく同じことはしません。また、送信元(Temp1)と送信先(Temp2)の両方を引用符で囲んだことにも注意してください。これはパスにスペースがある場合に行われます。スペースはありませんが、最悪の場合は含めるべきだと思いました。

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

タイムスタンプもフォルダで同じにするには:

robocopy/E /コピー:DAT/dcopy:DAT "C:\ Temp1" "c:\ Temp2"

0
pablo

フォルダを移動して作成日時を維持する簡単な方法は、これらのユーティリティを使用することです。

http://lantechsoft.com/data-copy.html

ファイルをコピーしている間日付を保存できるもう一つのもの。

http://technocomsolutions.com/data-copy-tool.html

0
Eric

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

0
Davidus428