我目前有这个脚本,我作为计划任务运行:
@echo on
START /WAIT c:\windows\system32\Robocopy.exe "D:\folder" "\\192.168.2.87\folder" /E /MT:20 /R:50 /W:10 /V /ETA /LOG:c:\robocopy.txt
我想转换并将其作为PowerShell脚本运行,原因有两个:
C:\robocopylog3004201510214043.txt
,而我实际上并没有找到有关如何从批处理脚本中删除“:”和“/”等字符的信息。我知道PowerShell可以。最后一个数字不是随机的。这是日期和时间。
日期例如是“2015年4月30日”(剥离它将离开30042015) 例如,时间是“10:21:40,43”(条纹将离开10214043)
所以它会留下文件名robocopylog3004201510214043.txt
答案 0 :(得分:3)
在运行外部程序时,CMD和PowerShell之间几乎没有区别。我建议使用调用运算符(&
),即使在这种特殊情况下它不是必需的。
& c:\windows\system32\Robocopy.exe "D:\folder" "\\192.168.2.87\folder" /E /MT:20 /R:50 /W:10 /V /ETA /LOG:c:\robocopy$(Get-Date -format 'ddMMyyyyHHmmss').txt
无论如何, robocopy
同步运行,因此不需要“等待”指令。
number format ddMMyyyyHHmmss
生成一个时间戳,包括日,月,年,小时,分钟和秒。我不建议也包括毫秒,因为你可能不会在同一秒内多次运行robocopy。如果必须包含毫秒,请将ff
附加到格式字符串(或f
,fff
等,具体取决于您需要的位数)。但是,您可能需要考虑使用ISO日期格式(yyyyMMddHHmmss
),因为这样可以简化按创建顺序列出日志文件。
关于替换批处理脚本中的字符,可以通过string replacements:
完成C:\>echo %DATE:/=%
30042015
C:\>echo %TIME::=_%
10_01_22.39