xcopy:コピーではなくファイルを移動しますか?


11

xcopyVerifyフラグを使用してネットワーク経由でファイルをコピーするのではなく、移動に使用したいと思います。ファイルを移動するためのxcopyのスイッチが見つかりませんでした。xmove使用できるI はありますverifyか?

現時点では使用してxcopy /D /Vいますが、ファイルが宛先に正常にコピーされたことを確認した場合にのみ、ソースでファイルを削除する必要があります。


1
を使用/vしても、ファイルが正しく書き込まれたことを保証するものではないことに注意してください。ディスクキャッシュとOSキャッシュは、書き込みキャッシュ内のファイルが正常にコミットされる前にそこから取得されることを意味します。安全な唯一のオプションは、コピーを作成し、検証のスケジュールを設定し、後で削除することです。ヒューリスティックに5分で十分だと思いますが、ディスクアクティビティとキャッシュのサイズによって異なります(私はキャッシュされた書き込みエラーに遭遇した人として話しています)。
AFH 2014年

回答:


11

あなたはチェックするべきですrobocopy、それはよりもはるかに強力ですxcopy/MOVまたはでファイルを簡単に移動できます/MOVE

ファイルのみを移動するには(コピー後にソースから削除)

robocopy from_folder to_folder files_to_copy /MOV

ファイルとディレクトリを移動するには(コピー後にソースから削除)

robocopy from_folder to_folder files_to_copy /MOVE

http://ss64.com/nt/robocopy.html


2
Robocopyはverify私が見ることができる範囲ではありません。
JBurace、2014年

@JBurace私が投稿したリンクを見ると、次のように述べられています/MOVE : Move files and dirs (delete from source after copying)。コピーしない場合、ソースは削除されません。
imtheman 2014年

2
移動してもファイルサイズが一致しない場合はどうなりますか?これが私がやらなければならない理由verifyです。robocopy情報に、2つのファイルサイズが実際に移動されたのではなく、正しく移動されたことを確認するものは何もありません。
JBurace、2014年

@JBuraceそのように機能するとは思わない。すべてのファイルをコピーしない場合は、何もコピーされていないかのように動作するため、ソースは削除されません。
imtheman 2014年

1

バッチファイルを使用してXcopyコマンドを検証で実行した後、Xcopyから返されたエラーレベルをチェックして、ファイルが正常にコピーされたかどうかを判断できます。存在する場合は、ソースを削除します。

Xcopyのドキュメントから:

Exit
code  Description
====  ===========
  0   Files were copied without error.
  1   No files were found to copy.
  2   The user pressed CTRL+C to terminate xcopy.
  4   Initialization error occurred. There is not
      enough memory or disk space, or you entered
      an invalid drive name or invalid syntax on
      the command line.
  5   Disk write error occurred.

バッチの例:

Rem Attempt file copy...
xcopy /D /V %1 %2

Rem Check result code and if it was successful (0), delete the source.
if errorlevel 0 (
    echo Copy completed successfully
    del /Q %1
    exit /B
)

Rem Not Errorlevel 0...
echo Copy failed for some reason.

errorlevel私がやっている場合はまだ動作:dir args && xcopy args >> logfile.txt?またはerrorlevelの結果dirでしょうか?
JBurace 2014年

最後に実行したコマンドの結果が含まれます。:次のような簡単なバッチファイルでそれをテストすることができpastebin.com/6GwNA7MP
Ƭᴇcʜιᴇ007

if errorlevel 0常にトリガーします。それは本当にチェックしているif errorlevel >= 0ので、代わりにエラーケースをチェックするべきif errorlevel 1 ( ... failure case ... ) else ( ... success case ... )です。または、スタイルをご希望の場合またはスタイルをご希望のif not errorlevel 0 (... success case ... )場合if %ERRORLEVEL% EQU 0 ( ... success case ... )
Jesse Chisholm

もちろん、これははるかに効率が悪くなります(同じハードドライブでの移動は非常に安価です)...
Ohad Schneider
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.