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

标签 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可以。

  • 最后一个数字不是随机的。是日期和时间。

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

    至于替换批处理脚本中的字符,可以通过string replacements来完成:
    C:\>echo %DATE:/=%
    30042015
    
    C:\>echo %TIME::=_%
    10_01_22.39

    关于powershell - 将批处理脚本转换为Powershell脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29961656/

    相关文章:

    powershell - 如何在 wsl2 上使用 linux dd 命令来刻录可启动的 USB?

    Powershell 删除具有特定名称的子文件夹

    c# - 从 C# 应用程序运行 powershell

    c# - 在没有 CMD.EXE 的情况下运行批处理命令

    powershell - 如何在新窗口中从 .bat 启动 PowerShell 并运行 .ps1 而不退出控制台?

    .net - Get-Content 在 Windows 7 环境中返回 System.Object[] 而不是 System.String

    c# - Powershell 命令不会在 C# 中运行

    java - 使用 Executor 批处理任务

    arrays - 如何在Batch中定义一个大数组?

    windows - Windows 批处理脚本起始行中的双引号