我有一个 robocopy 进程,但如果输入有误,我不希望它毁掉其他人的内容。该进程将目录从源复制到远程目标,但我只希望它在远程目标不存在时才这样做。我该如何设置?
答案1
借助 PowerShell 的帮助,您可以轻松检查目录是否已存在测试路径 cmdlet:
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 的
/L
-Switch。这将仅列出 Robocopy 将执行的所有操作 - 而无需实际执行这些操作。(您可以编写一个/LOG:
-File,以便使用文本编辑器在步骤 2 中使用Ctrl+ F) - 检查输出中的
EXTRA
文件,如果没有显示, - 您可以在没有 的情况下运行 Robocopy
/L
。
然而,我认为这不会很有用,因为当需要处理几十个文件时很容易遗漏信息。