私はこれに対する答えを見つけようとしましたが、robocopyとパターンマッチングに関連するほとんどの質問はフォルダーを除外することに焦点を当てていますが、私の意図はフォルダーを含めることです。
私が次のフォルダを持っていると仮定します。
c:\workspace\folder1\subfolder1\workInProgress monthly\*
c:\workspace\folder1\subfolder1\completed monthly\*
c:\workspace\folder1\subfolder1\rejected weekly\*
c:\workspace\folder2\subfolder2\workInProgress yearly\*
c:\workspace\folder2\workInProgress documents daily\*
c:\workspace\folder2\subfolder2\completed monthly\*
c:\workspace\folder2\subfolder21\rejected weekly\*
c:\workspace\folder3\subfolder3\workInProgress weekly\*
c:\workspace\folder3\subfolder3\completed daily\*
c:\workspace\folder3\subfolder3\rejected weekly\*
バックアップするディレクトリごとにROBOCOPY
コマンドを実行するバックアップスクリプトがあります。
ROBOCOPY "c:\workspace\folder1\subfolder1\workInProgress monthly" D:\folder1\subfolder1\workInProgress documents /COPYALL /B /SEC /E /MIR /Z /XO /XF *.LCK /R:5 /W:5 /LOG+:dSyncFilesMinimal_%vl%_%tl%.txt /IPG:5
ROBOCOPY "c:\workspace\folder2\subfolder2\workInProgress yearly" D:\folder2\subfolder1\workInProgress documents /COPYALL /B /SEC /E /MIR /Z /XO /XF *.LCK /R:5 /W:5 /LOG+:dSyncFilesMinimal_%vl%_%tl%.txt /IPG:5
ROBOCOPY "c:\workspace\folder2\workInProgress daily" D:\folder2\subfolder1\workInProgress documents /COPYALL /B /SEC /E /MIR /Z /XO /XF *.LCK /R:5 /W:5 /LOG+:dSyncFilesMinimal_%vl%_%tl%.txt /IPG:5
ROBOCOPY "c:\workspace\folder3\subfolder3\workInProgress weekly" D:\folder3\subfolder1\workInProgress documents /COPYALL /B /SEC /E /MIR /Z /XO /XF *.LCK /R:5 /W:5 /LOG+:dSyncFilesMinimal_%vl%_%tl%.txt /IPG:5
新しいフォルダが追加されるたびに、スクリプトを更新して新しいフォルダを含める必要があります。 ROBOCOPY
を使用してworkspace
フォルダーを検索し、文字列workInProgress
を含むディレクトリを見つけて、コピー先の場所にコピーするにはどうすればよいですか。
コピーするフォルダの名前に文字列workInProgress
が含まれることがわかっている場合、単一のROBOCOPY
コマンドを実行して、c:\workspace
ディレクトリを再帰的に検索してコピーすることは可能ですか。パターンに一致する任意のディレクトリ全体*workInProgress*
"
workInProgress
フォルダーには、文字列workInProgress
の後に異なる文字列を含めることができます。例:
workInProgress daily
workInprogress unknown
名前にworkInProgress
が含まれていない他のフォルダーには既知のパターンはありません。他のフォルダにはランダムな名前を含めることができます。
dir
ループで使用されるFOR
の例と、それを出力するときにドライブ文字を変更する方法:
FOR /F "usebackq delims==" %i IN (`dir /s /a:d /b c:\workspace\workInProgress*`) DO @echo "c:%~pi" "d:%~pi"
このようなものはおそらくあなたのために働くでしょう。
$dirs = GetChildItem -recurse -include "*workinprogress*" | ?{ $_.PsIsContainer }
foreach ($dir in $dirs)
{
ROBOCOPY $dir.FullName D:\folder1\subfolder1\workInProgress documents /COPYALL /B /SEC /E /MIR /Z /XO /XF *.LCK /R:5 /W:5 /LOG+:dSyncFilesMinimal_%vl%_%tl%.txt /IPG:5
}