![从 robocopy 批处理版本到 robocopy 的 PowerShell 版本的转换/注意事项如何?](https://linux22.com/image/1571992/%E4%BB%8E%20robocopy%20%E6%89%B9%E5%A4%84%E7%90%86%E7%89%88%E6%9C%AC%E5%88%B0%20robocopy%20%E7%9A%84%20PowerShell%20%E7%89%88%E6%9C%AC%E7%9A%84%E8%BD%AC%E6%8D%A2%2F%E6%B3%A8%E6%84%8F%E4%BA%8B%E9%A1%B9%E5%A6%82%E4%BD%95%EF%BC%9F.png)
经过一番谷歌搜索,网上的大多数帖子都在谈论 PowerShell 的好处,而使用 robocopy 的环境是 Windows Server 2016。因此,需要将原始包含两个命令行的批处理文件转换为其 PowerShell 版本。
将批处理版本的 robocopy 转换为 PowerShell 版本时需要注意哪些事项?由于 PowerShell 很新,而且是从头开始的。是否有任何 PowerShell 版本差异,如 ps ver1 ver2 ver3?如果使用 PowerShell 或增强版,有什么好处吗?
/b 模式是干什么用的?微软官方网站好像没有提供详细的信息……
批处理命令如下:
//get the locale independent time
FOR /F %%A IN ('WMIC OS GET LocalDateTime ^| FINDSTR \.') DO @SET D=%%A
//unluckily could not find details of /b backup option to find out what is /b mode working for?
robocopy X:\dat Y:\dat /v /xo /xa:sh /xj /unicode /mov /b /r:1 /w:1 /LOG+:C:\log\%D:~0,4%%D:~4,2%%D:~6,2%.log /xd "$RECYCLE.BIN" "System Volume Information"
答案1
PowerShell 并不新鲜。它已经存在了 10 多年,并且现在跨平台,Win / OSX / Linux。
Robocopy (robocopy.exe) 是一个独立的可执行文件,无论您使用哪种脚本/shell 语言。您不需要 .bat、.cmd、.ps1 脚本即可使用它。您可以直接使用它。
PS 有自己的复制(Copy-Item)和删除(Remove-Item)cmdlet,但是在大多数情况下,robocopy 是首选。
您可以像现在一样继续使用 robocopy,即使在 PS 中,尽管处理开关和参数有点不同,这取决于您在脚本中执行的操作。
PS 命令提示符/consolehost (powershell.exe) 可用于替换 DOS 命令提示符。您将以几乎相同的方式使用它。但是,如果您使用脚本开发工具/编辑器、ISE (powershell_ise.exe)、Visual Studio Code、Notepad++ 等,则需要更改批处理文件思维方式。
请参阅有关 PS 和 Robocopy 的讨论及其答案