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
}