Robocopyを使用して、いくつかのフォルダーをディレクトリから離れたネットワーク共有にコピーするソリューションを探しています。興味のない何百ものフォルダが含まれているディレクトリからいくつかのフォルダを選択したいと思います。正規表現を使用してLinuxでscpと同様のことをしたいのですが、これはrobocopyでは機能しません。
c:\robocopy "c:\results\1319_TC1.*" "\\datastore\somefolder\"
これを試してください:
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) }
バッチファイルで行います。ディレクトリごとにオンラインにする必要があります。
代わりに、これを行うことができます。これにより、すべてがコピーされ、それが簡単な場合は余分なものが削除されます。Robocopyz:\ directory d:\ directory/MIR/COPYALL(注意:MIRはミラーイメージ用であり、方法なので、空のディレクトリでのみ使用してください)。
Robocopyだけでこれを行うことはできません。 Linuxマシンにアクセスできる場合、find
と-exec
オプションを使用するのは簡単です。または、Windowsでcygwinを使用することもできます(findコマンドがあると思います)、またはRubyまたはWindowsでPython=)のようなスクリプト言語を使用できます。
このような簡単なpowershell:
$Dir = get-childitem "c:\results\" -recurse
$List = $Dir | where {$_.FullName -match "1319_TC1."}
$List | split-path FullName -parent | get-unique
「1319_TC1」に一致するフォルダにあるすべてのファイルのリストが表示されます。次に、これらのフォルダのそれぞれについてrobocopy
を実行する必要があります。
次のようにします。
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
)に渡すことができます。 john
とpaul
のユーザープロファイルを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
私はこれが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を使用し、リストまたはワイルドカードを使用して、コピーしないディレクトリを除外します。