将批处理脚本转换为Powershell脚本

时间:2015-04-30 07:30:35

标签: powershell batch-file

我目前有这个脚本,我作为计划任务运行:

@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

1 个答案:

答案 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附加到格式字符串(或ffff等,具体取决于您需要的位数)。但是,您可能需要考虑使用ISO日期格式(yyyyMMddHHmmss),因为这样可以简化按创建顺序列出日志文件。

关于替换批处理脚本中的字符,可以通过string replacements

完成
C:\>echo %DATE:/=%
30042015

C:\>echo %TIME::=_%
10_01_22.39