Robocopy:ディレクトリのコンテンツを移動するが、ディレクトリを保持する方法


23

簡単なタスク:

ディレクトリのすべてのコンテンツを移動c:\Users\files\Desktop\test 2しますc:\Users\files\Desktop\test 1

C:\admin\temp>robocopy "c:\Users\files\Desktop\test 2" "c:\Users\files\Desktop\test" *.* /S /MOVE

理にかなっていますが、今ではディレクトリc:\Users\files\Desktop\test 2も削除されます。ディレクトリ自体を削除せずにCONTENTを移動するだけのスイッチはありますか?


なぜRobocopyは何と違うのですか?
ジョンガーデニアス


1
robocopy test1 test2 ... && mkdir test2
jftuga

私は、ユーザーのrobocopyをそのディレクトリ自体、削除できませんでした下を走っていたので、メインディレクトリのパーミッションを変更することになった
マシュー・ロック

回答:


14

私はネットワーク共有から同じことをしようとしています。

SET MoveDirSource=\\Server\Folder
SET MoveDirDestination=Z:\Folder

Windows 7マシンでのテストの結果と解決策を次に示します。

提案:

ROBOCOPY "%MoveDirSource%" "%MoveDirDestination%" /MOVE /E

問題:ソースフォルダーを移動します。

提案:

ROBOCOPY "%MoveDirSource%" "%MoveDirDestination%" /MOVE /E /XD "%MoveDirSource%"

問題:ソースフォルダーは引き続き移動します。

提案:

ROBOCOPY "%MoveDirSource%" "%MoveDirDestination%" /MOV /E

問題:ソースフォルダーに空のフォルダー構造を残します。

実用的なソリューション:

MKDIR "%MoveDirDestination%"
FOR    %%i IN ("%MoveDirSource%\*") DO           MOVE /Y "%%i" "%MoveDirDestination%\%%~nxi"
FOR /D %%i IN ("%MoveDirSource%\*") DO ROBOCOPY /MOVE /E "%%i" "%MoveDirDestination%\%%~nxi"

最初の2行は最上位ファイルを移動し、3行目はフォルダーを移動します。ダブル%%はバッチファイルで使用するためのものであり、コマンドラインに貼り付けるには、これらを単一のパーセンテージマークに変更する必要があることに注意してください。

宛先の〜nxiはFOR SUBSITUTION VARIABLE(FOR /?を参照)です。ここで〜nxiは、現在ループされているアイテムの名前と拡張子を表します。

RobocopyのデフォルトはRETRY A MILLION回で、各試行の間に30秒待機するため、robocopy引数に/ R:1 / W:1を追加することをお勧めします。


8

/ MOVオプションを試しましたか?

           /MOV :: MOVe files (delete from source after copying).

F:> robocopy /?


ROBOCOPY :: Windows用の堅牢なファイルコピー

開始日:2010年8月6日金曜日11:51:26 2010

          Usage :: ROBOCOPY source destination [file [file]...] [options]

         source :: Source Directory (drive:\path or \\server\share\path).
    destination :: Destination Dir  (drive:\path or \\server\share\path).
           file :: File(s) to copy  (names/wildcards: default is "*.*").

::
:: Copy options :
::
             /S :: copy Subdirectories, but not empty ones.
             /E :: copy subdirectories, including Empty ones.
         /LEV:n :: only copy the top n LEVels of the source directory tree.

             /Z :: copy files in restartable mode.
             /B :: copy files in Backup mode.
            /ZB :: use restartable mode; if access denied use Backup mode.
        /EFSRAW :: copy all encrypted files in EFS RAW mode.

/COPY:copyflag[s] :: what to COPY for files (default is /COPY:DAT).
                   (copyflags : D=Data, A=Attributes, T=Timestamps).
                   (S=Security=NTFS ACLs, O=Owner info, U=aUditing info).

       /DCOPY:T :: COPY Directory Timestamps.

           /SEC :: copy files with SECurity (equivalent to /COPY:DATS).
       /COPYALL :: COPY ALL file info (equivalent to /COPY:DATSOU).
        /NOCOPY :: COPY NO file info (useful with /PURGE).

        /SECFIX :: FIX file SECurity on all files, even skipped files.
        /TIMFIX :: FIX file TIMes on all files, even skipped files.

         /PURGE :: delete dest files/dirs that no longer exist in source.
           /MIR :: MIRror a directory tree (equivalent to /E plus /PURGE).

           /MOV :: MOVe files (delete from source after copying).
          /MOVE :: MOVE files AND dirs (delete from source after copying).

 /A+:[RASHCNET] :: add the given Attributes to copied files.
 /A-:[RASHCNET] :: remove the given Attributes from copied files.

        /CREATE :: CREATE directory tree and zero-length files only.
           /FAT :: create destination files using 8.3 FAT file names only.
           /256 :: turn off very long path (> 256 characters) support.

         /MON:n :: MONitor source; run again when more than n changes seen.
         /MOT:m :: MOnitor source; run again in m minutes Time, if changed.

  /RH:hhmm-hhmm :: Run Hours - times when new copies may be started.
            /PF :: check run hours on a Per File (not per pass) basis.

         /IPG:n :: Inter-Packet Gap (ms), to free bandwidth on slow lines.

            /SL :: copy symbolic links versus the target.

        /MT[:n] :: Do multi-threaded copies with n threads (default 8).
                   n must be at least 1 and not greater than 128.
                   This option is incompatible with the /IPG and /EFSRAW options.
                   Redirect output using /LOG option for better performance.

::
:: File Selection Options :
::
             /A :: copy only files with the Archive attribute set.
             /M :: copy only files with the Archive attribute and reset it.
/IA:[RASHCNETO] :: Include only files with any of the given Attributes set.
/XA:[RASHCNETO] :: eXclude files with any of the given Attributes set.

/XF file [file]... :: eXclude Files matching given names/paths/wildcards.
/XD dirs [dirs]... :: eXclude Directories matching given names/paths.

            /XC :: eXclude Changed files.
            /XN :: eXclude Newer files.
            /XO :: eXclude Older files.
            /XX :: eXclude eXtra files and directories.
            /XL :: eXclude Lonely files and directories.
            /IS :: Include Same files.
            /IT :: Include Tweaked files.

         /MAX:n :: MAXimum file size - exclude files bigger than n bytes.
         /MIN:n :: MINimum file size - exclude files smaller than n bytes.

      /MAXAGE:n :: MAXimum file AGE - exclude files older than n days/date.
      /MINAGE:n :: MINimum file AGE - exclude files newer than n days/date.
      /MAXLAD:n :: MAXimum Last Access Date - exclude files unused since n.
      /MINLAD:n :: MINimum Last Access Date - exclude files used since n.
                   (If n < 1900 then n = n days, else n = YYYYMMDD date).

            /XJ :: eXclude Junction points. (normally included by default).

           /FFT :: assume FAT File Times (2-second granularity).
           /DST :: compensate for one-hour DST time differences.

           /XJD :: eXclude Junction points for Directories.
           /XJF :: eXclude Junction points for Files.

::
:: Retry Options :
::
           /R:n :: number of Retries on failed copies: default 1 million.
           /W:n :: Wait time between retries: default is 30 seconds.

           /REG :: Save /R:n and /W:n in the Registry as default settings.

           /TBD :: wait for sharenames To Be Defined (retry error 67).

::
:: Logging Options :
::
             /L :: List only - don't copy, timestamp or delete any files.
             /X :: report all eXtra files, not just those selected.
             /V :: produce Verbose output, showing skipped files.
            /TS :: include source file Time Stamps in the output.
            /FP :: include Full Pathname of files in the output.
         /BYTES :: Print sizes as bytes.

            /NS :: No Size - don't log file sizes.
            /NC :: No Class - don't log file classes.
           /NFL :: No File List - don't log file names.
           /NDL :: No Directory List - don't log directory names.

            /NP :: No Progress - don't display percentage copied.
           /ETA :: show Estimated Time of Arrival of copied files.

      /LOG:file :: output status to LOG file (overwrite existing log).
     /LOG+:file :: output status to LOG file (append to existing log).

   /UNILOG:file :: output status to LOG file as UNICODE (overwrite existing log).
  /UNILOG+:file :: output status to LOG file as UNICODE (append to existing log).

           /TEE :: output to console window, as well as the log file.

           /NJH :: No Job Header.
           /NJS :: No Job Summary.

       /UNICODE :: output status as UNICODE.

::
:: Job Options :
::
   /JOB:jobname :: take parameters from the named JOB file.
  /SAVE:jobname :: SAVE parameters to the named job file
          /QUIT :: QUIT after processing command line (to view parameters).
          /NOSD :: NO Source Directory is specified.
          /NODD :: NO Destination Directory is specified.
            /IF :: Include the following Files.

2
はい、しかし、この動きはJUSTファイルとディレクトリそのまま聞かせて、私は、ファイルやディレクトリを移動するが、所定の位置に親ディレクトリ自体を維持したい
perler

1
-1の回答は質問に答えていません
クリス・マジック

1
@クリス。少し厳しい。答えは「親ディレクトリ」の要件を除いて有効であり、答えを投稿した後にのみ利用できることを明確にするよう求めました。私の答えを使用すると、/ XDまたは/ XAパラメーターを使用できます。
ガイ

2
これは実際、この質問に対する完璧な答えです。「/ mov」スイッチ(「/ move」スイッチではなく)でrobocopyを使用し、親ディレクトリをターゲットにします。出来上がり!
ジョンホーマー

1
これは完璧な答えではありません。movスイッチはサブディレクトリを移動しません。/ mov / eはファイルを移動しますが、サブディレクトリをコピーします。あなたが唯一の親ディレクトリを維持したい場合は、手動で空のサブディレクトリを削除したり、他の回答のいずれかを使用する必要があり、作業その
HugoRune

6

これを行うには、削除したくないディレクトリにプレースホルダーファイルを作成し、/ XFを使用してファイルを除外するようにrobocopyに指示します。

ファイルが除外されているため、ファイルは移動されず、ディレクトリは削除されません。

詳細については、他のサイトを参照してくださいhttp : //www.experts-exchange.com/OS/Microsoft_Operating_Systems/Windows/XP/Q_24306678.html(そして下にスクロールするなど)。


1
これはそうではないようです。私はコピーしたいディレクトリにbatファイル自体を持っていますが、batファイルは除外され、robocopyはまだフォルダを削除しようとします(batファイルが実行されているため失敗します)。
クリスマリシック

@ Chris-Marisic:バッチファイルが存在するディレクトリの外部からバッチファイルを実行してみてください。バッチファイルを含むディレクトリにcdしてそこから実行すると、/ XFを使用してバッチファイルを除外しても、「プロセスは別のプロセスで使用されているためファイルにアクセスできません」と表示されます。
RedGreenCode

4

私は同じ問題にMKDIR出くわし、コマンドを実行してからそれを修正しましたrobocopy

特定のフォルダーのすべてのコンテンツを移動して、親フォルダーのみが残されるようにします。なぜ親フォルダーを再度作成しないのですか?

もちろん、ユーザー権限の問題が発生する可能性もありますが、それも解決できます。


2

robocopyコマンドから除外する一意のプレースホルダーファイルを作成します。

1つのライナーは次のとおりです。

echo.>>"C:\Source\.touch" && (robocopy "C:\Source" "C:\Dest" /XF ".touch" /MOVE /E & del "C:\Source\.touch")

1

/ moveの代わりに/ movスイッチを使用します


2
以前に提案された(serverfault.com/questions/167723/…)動作しませんでした。
sysadmin1138

2
できます。私は今それをやっています!!!! それを実際に「試して」みないとうまくいかないというあなたのyou慢さ!
ジョン・ホーマー

2
それは動作しません。/ movは、親ディレクトリだけでなく、サブディレクトリをそのまま残します。
HugoRune

1

「私の」解決策は、ソースフォルダー内の一時フォルダー内でファイルとフォルダーを移動することです。(一時フォルダーを自分自身にコピーしないでください!)そして、このフォルダーをtagetフォルダーに移動した後。

set Source=I:\_Test\ToArchive
set target=I:\_Test\Archive
set tempFolderName=@_Copy_in_progress_Do_not_use_@
set LogFile=robocopy-result.log

robocopy.exe %source% %source%\%tempFolderName% /E /MOVE /NS /NP /v /W:0 /R:0 /LOG:%LogFile% /XD %source%\%tempFolderName%
sleep 5
robocopy.exe %source%\%tempFolderName% %target% /E /MOVE /NS /NP /v /W:0 /R:0 /LOG+:%LogFile%

一時フォルダーへの「移動」に時間がかかりすぎることを検出しました。ここで更新:

set Source=I:\_Test\ToArchive
set target=I:\_Test\Archive
set tempFolderName=@_Copy_in_progress_Do_not_use_@
set LogFile=robocopy-result.log

mkdir %source%\%tempFolderName%\
for /f "delims==" %%I IN ('dir "%source%" /B') do if NOT %%I==%tempFolderName% (move "%source%\%%I" "%source%\%tempFolderName%")
sleep 3
robocopy.exe %source%\%tempFolderName% %target% /E /MOVE /NS /NP /v /W:0 /R:0 /LOG:%LogFile%

1

幸運にも答えを見つけました。フォルダをディスクの最上位に移動したかった。私は試した:

Robocopy "<PathToFolderToMove>" "H:\" /MOVE /E

宛先に次を使用してエラーが発生しました:H:\" \MOVE \E\

「\」が次の二重引用符をエスケープしていると推測し、コマンドを次のように変更しました。

Robocopy "<PathToFolderToMove>" "H:\." /MOVE /E

「」の内容をドライブのルートにコピーすることになりました。

したがって、質問に対する答えは次のとおりです。

Robocopy "c:\Users\files\Desktop\test 2" "c:\Users\files\Desktop\test\." /MOVE /E

よろしく、
ジョルジュ


1

/mov/eスイッチを使用してテストを実行したところ、完全に機能します。

コマンドラインオプションに注目すると、/movとには違いがあり/moveます。テストファイルは宛先に移動し、ソースのディレクトリ構造はそのまま残ります。


-1

なぜ違うのですか?違いはありません。移動操作は、Robocopyを使用するかどうかに関係なく、コピー\削除操作です。フォルダを移動するように指示しています。移動とは、新しい場所に移動し、前の場所を空けることを意味します。


しかし、それは私が欲しいものではありません。フォルダーを保持したまま、フォルダーのコンテンツを移動したい。ここでは、UNIXスタイルをどのように機能するか:(編集、コメントの中に無いコードなので、スクリーンショットなど) screencast.com/t/YTkwODIzZT
perler

-1正当な質問に対するユーザーの回答の非難
クリスマリシック

@クリス:わかりません。ユーザーを非難する方法は?彼は質問をし、私はそれに答えた。私の答えには非難のヒントがありません。
-joeqwerty

Why is it different? It's not different.OPは、* nixを介して実行できるはずの予期される動作を示すスクリーンショットを投稿しましたが、そのロボコピーはどのファセットでも許可していないようです。
クリスマリシック

おい、本当に?これについて議論していますか?「問題のある」(および読み込まれた)文を削除するために質問を整理しました。
マークヘンダーソン

-1

\ *を追加するだけです

C:\admin\temp>robocopy "c:\Users\files\Desktop\test 2\*" "c:\Users\files\Desktop\test"  /S /MOVE

2
良い答えは、ここで提供されているより多くの説明があるものです。
カスペルド

それは完全に正常に動作し、opが望んだとおりに動作します。また、それはかなり自明です。(バックスラッシュはどういうわけか消えた)
タガス

1
@Tagas:正常に機能していても、説明を追加する必要があります。
スヴェン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.