У меня есть процесс робокопии, но я не хочу, чтобы он уничтожал чужие вещи, если ввод не выполняется. Процесс копирует каталог из источника в удаленный пункт назначения, но я хочу, чтобы он делал это только в том случае, если удаленного пункта назначения там нет. Как я могу настроить это?
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)
для этого.
Другой (полностью ручной) вариант - разделить существующую операцию на три этапа:
- Используйте Robocopy's
/L
-Switch. Это просто перечислит все операции, которые Robocopy будет делать - фактически не делая их. (Вы можете написать/LOG:
-File, чтобы вы могли использовать текстовый редактор, чтобы использовать Ctrl+F на шаге 2) - Проверьте выход для
EXTRA
файлов и , если ничего не показано, - Вы можете запустить Robocopy без
/L
Однако я не думаю, что это будет очень полезно, так как легко пропустить информацию, когда нужно обработать несколько десятков файлов.