Robocopy - Copia somente se path for válido e o diretório estiver ausente

0

Eu tenho um processo de robocopy, mas eu não quero que ele nuke coisas de outras pessoas, se uma entrada é fracassada. O processo copia um diretório de uma origem para um destino remoto, mas eu só quero que isso aconteça se o destino remoto não estiver lá. Como posso configurar isso?

    
por Carbon 06.09.2017 / 21:01

1 resposta

1

Você pode verificar facilmente se um diretório já está presente com uma pequena ajuda de cmdlet Test-Path :

param(
    [string]$InputPath,
    [string]$OutputPath,
    [string]$rc_parameter
)

if((Test-Path -Path $OutputPath -PathType Container) -eq $true){
    Write-Out "Output-Path already exists - aborting!"
    Exit
}else{
    Start-Process robocopy -ArgumentList "'"$InputPath'" '"$OutputPath'" $rc_parameter" -NoNewWindow -Wait
    Write-Out "If Robocopy did not throw any errors, everything went fine!"
}

Basta salvá-lo como myrobocopyscript.ps1 , iniciar um console do PowerShell e digitar:

# Syntax:
.\myrobocopyscript.ps1 -InputPath "<YOUR_INPUT-PATH>" -OutputPath "<YOUR_OUTPUT-PATH>" -rc_parameter "/<YOUR_PARAMETERS>"

# Example:
.\myrobocopyscript.ps1 -InputPath "D:\Downloads" -OutputPath "E:\NewFolder" -rc_parameter "/MIR /R:5 /W:15"')

Você também pode usar Test-Path para seu $InputPath : basta adicionar outra condição if(Test-Path) para isso.

Outra opção (totalmente manual) é dividir sua operação existente em três etapas:

  1. Use /L -Switch do Robocopy . Isso listará apenas todas as operações que o Robocopy faria - sem realmente executá-las. (Você pode escrever um /LOG: -File, então você pode usar um editor de texto para usar Ctrl + F na etapa 2)
  2. Verifique a saída dos arquivos EXTRA e, se nenhum for exibido,
  3. Você pode executar o Robocopy sem /L .

No entanto, não acho que isso seja muito útil, pois é fácil perder informações quando mais de algumas dezenas de arquivos devem ser processados.

    
por 06.09.2017 / 21:13

Tags