У меня есть процесс робокопии, но я не хочу, чтобы он уничтожал чужие вещи, если ввод не выполняется. Процесс копирует каталог из источника в удаленный пункт назначения, но я хочу, чтобы он делал это только в том случае, если удаленного пункта назначения там нет. Как я могу настроить это?

1 ответ1

1

Вы можете легко проверить, существует ли каталог, с помощью небольшой справки из командлета PowerShell 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!"
}

Просто сохраните его как myrobocopyscript.ps1 , затем запустите консоль PowerShell и введите:

# 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"`)

Конечно, вы можете также использовать Test-Path для своего $InputPath: просто добавьте еще одно условие if(Test-Path) для этого.


Другой (полностью ручной) вариант - разделить существующую операцию на три этапа:

  1. Используйте Robocopy's /L -Switch. Это просто перечислит все операции, которые Robocopy будет делать - фактически не делая их. (Вы можете написать /LOG: -File, чтобы вы могли использовать текстовый редактор, чтобы использовать Ctrl+F на шаге 2)
  2. Проверьте выход для EXTRA файлов и , если ничего не показано,
  3. Вы можете запустить Robocopy без /L

Однако я не думаю, что это будет очень полезно, так как легко пропустить информацию, когда нужно обработать несколько десятков файлов.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .