我目前有这个脚本,可以作为计划任务运行:
@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可以。 最后一个数字不是随机的。是日期和时间。
例如,日期为“30/04/2015”(将其删除会留下30042015)
例如,时间为“10:21:40,43”(将其条纹会留下10214043)
因此它将保留一个文件名robocopylog3004201510214043.txt
最佳答案
在运行外部程序方面,CMD和PowerShell之间几乎没有区别。我建议使用 call 运算子(&
),即使在这种特殊情况下并非必须使用。
& 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
关于powershell - 将批处理脚本转换为Powershell脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29961656/