Um exemplo de dir
usado em um loop FOR
com como alterar a letra da unidade ao gerar o seguinte:
FOR /F "usebackq delims==" %i IN ('dir /s /a:d /b c:\workspace\workInProgress*') DO @echo "c:%~pi" "d:%~pi"
Eu tentei encontrar uma resposta para isso, mas a maioria das questões relacionadas a robocopy e correspondência de padrões são focadas em excluir pastas, enquanto minha intenção é incluir pastas.
Supondo que eu tenha as seguintes pastas.
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\*
Eu tenho um script de backup que executa o comando ROBOCOPY
para cada diretório que eu quero fazer backup.
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
Toda vez que uma nova pasta é adicionada, tenho que atualizar o script para incluir a nova pasta.
Como posso usar ROBOCOPY
para pesquisar a pasta workspace
para encontrar qualquer diretório que contenha a string workInProgress
e copiá-lo para um local de destino.
Como sei que a pasta a ser copiada terá a string workInProgress
em seu nome, é possível executar um único comando ROBOCOPY
para pesquisar recursivamente o diretório c:\workspace
e copiar em qualquer diretório que corresponda o padrão *workInProgress*
"
As pastas workInProgress
podem conter strings diferentes depois que a string workInProgress
, por exemplo,
workInProgress daily
workInprogress unknown
Não há nenhum padrão conhecido em outras pastas que não contenham workInProgress
em seu nome. Outras pastas podem conter nomes aleatórios.
Um exemplo de dir
usado em um loop FOR
com como alterar a letra da unidade ao gerar o seguinte:
FOR /F "usebackq delims==" %i IN ('dir /s /a:d /b c:\workspace\workInProgress*') DO @echo "c:%~pi" "d:%~pi"
Algo como isso provavelmente funcionaria para você.
$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
}