web-dev-qa-db-ja.com

Robocopyを使用して、パターンマッチングを使用してディレクトリを検索およびコピーする

私はこれに対する答えを見つけようとしましたが、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の後に異なる文字列を含めることができます。例:

    workInProgress dailyworkInprogress unknown

  • 名前にworkInProgressが含まれていない他のフォルダーには既知のパターンはありません。他のフォルダにはランダムな名前を含めることができます。

2
ziggy

dirループで使用されるFORの例と、それを出力するときにドライブ文字を変更する方法:

FOR /F "usebackq delims==" %i IN (`dir /s /a:d /b c:\workspace\workInProgress*`) DO @echo "c:%~pi" "d:%~pi"
2
Brian

このようなものはおそらくあなたのために働くでしょう。

$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
}
1