web-dev-qa-db-ja.com

robocopyを使用して複数のフォルダーを単一の宛先にコピーする

Robocopyを使用して、いくつかのフォルダーをディレクトリから離れたネットワーク共有にコピーするソリューションを探しています。興味のない何百ものフォルダが含まれているディレクトリからいくつかのフォルダを選択したいと思います。正規表現を使用してLinuxでscpと同様のことをしたいのですが、これはrobocopyでは機能しません。

c:\robocopy "c:\results\1319_TC1.*" "\\datastore\somefolder\"
5
SDGuero

これを試してください:

gci C:\results\1319_TC1.* | foreach-object { robocopy $_.fullname (".\datastore\somefolder\" + $_.name) }

_gci C:\results\1319_TC1.*_は最初に一致するすべてのファイル/ディレクトリを取得し、それらをパイプに入れます。ここで_foreach-object_は最初のコマンドからのすべての結果を処理します。各結果のフルパス(結果ディレクトリへのフルパス)をrobocopyし、それらを元のフォルダー名で。\ datastore\somefolder \に配置します。例:
_C:\results\1319_TC1.123456_-> _C:\results\datastore\somefolder\1319_TC1.123456_

中かっこで囲まれた部分は、そのターゲットディレクトリ名と元のフォルダ名を組み合わせたものです。

編集:
ターゲットディレクトリがUNCパスであることがわかりました。 Robocopyは、UNCパスを受け入れます(パス名が256文字より長い場合でも)。私のコマンドで_(".\datastore\somefolder\"_を_("\\datastore\somefolder\"_に置き換えるだけです。したがって、正しいコマンドは次のようになります。

gci C:\results\1319_TC1.* | foreach-object { robocopy $_.fullname ("\\datastore\somefolder\" + $_.name) }

4
wullxz

バッチファイルで行います。ディレクトリごとにオンラインにする必要があります。

代わりに、これを行うことができます。これにより、すべてがコピーされ、それが簡単な場合は余分なものが削除されます。Robocopyz:\ directory d:\ directory/MIR/COPYALL(注意:MIRはミラーイメージ用であり、方法なので、空のディレクトリでのみ使用してください)。

2
KCotreau

Robocopyだけでこれを行うことはできません。 Linuxマシンにアクセスできる場合、find-execオプションを使用するのは簡単です。または、Windowsでcygwinを使用することもできます(findコマンドがあると思います)、またはRubyまたはWindowsでPython=)のようなスクリプト言語を使用できます。

1
James

このような簡単なpowershell:

$Dir = get-childitem "c:\results\"  -recurse
$List = $Dir | where {$_.FullName -match "1319_TC1."}
$List | split-path FullName -parent | get-unique

「1319_TC1」に一致するフォルダにあるすべてのファイルのリストが表示されます。次に、これらのフォルダのそれぞれについてrobocopyを実行する必要があります。

0
Nate

次のようにします。

for /d %d in (c:\results\1319_TC1.*) do robocopy "%d" "\\datastore\somefolder\%~nxd" /E /W:0 /R:0 /XO /XJ

ここでは、Windowsコマンドfor/d swithを使用して1319_TC1.*のすべてのディレクトリをループし、forコマンドは各ディレクトリ名、完全パス名c:\results\1319_TC1.*を格納します。変数%dに1つずつ。

%~nxdを使用して、フォルダー名と拡張子をパス全体から分離し、robocopyに渡して、\\datastore\somefolderの宛先に同じフォルダーが作成されるようにします。

好みに合わせてロボコピースイッチを選択してください。

forコマンドを使用すると、明示的な名前を入力して別のコマンド(この場合はrobocopy)に渡すことができます。 johnpaulのユーザープロファイルをdatastoreにコピーする例を次に示します。最初にソースフォルダーcd c:\usersに移動して、フルパス名なしでソースフォルダー名を一覧表示します。

cd c:\users
for /d %d in (john,paul) do  robocopy "%d" "\\datastore\somefolder\%d" /E /W:0 /R:0 /XO /XJ
0
R. Rozis

私はこれが6年前の質問に対する答えであることを知っていますが、以前のすべての答えはクラッジでした。これはグーグルのトップの結果なので、私は特定の質問に対する正しい解決策を提案するだろうと思いました。

c:\robocopy "c:\results\1319_TC1.*" "\\datastore\somefolder\"

複数のソースディレクトリを選択することはできません。ただし、ディレクトリareファイルです。

.\folder1\folder3\.\folder1\folder4.\folder2の構造がある場合

Robocopyを使用してfolder3とfolder4をfolder2にコピーするための正しい構文は次のとおりです。

robocopy folder1 folder2 folder* /e

/ eはすべてのディレクトリを移動します。

ここが面白いところです。どのディレクトリをコピーするかを制御するには、リストまたはワイルドカードを含めずに、コピーするディレクトリを選択します。/XDを使用し、リストまたはワイルドカードを使用して、コピーしないディレクトリを除外します。

0
Tzalumen