【发布时间】:2014-09-24 18:25:38
【问题描述】:
我有以下在命令窗口中执行的命令:
"C:\Program Files (x86)\VisualSVN Server\bin\svnadmin.exe" dump --quiet "C:\svnrepo" | "C:\Program Files\7-Zip\7z.exe" a -si "C:\svnbak.7z"
这会将我的 SVN 存储库的内容转储到一个接受的 7-zip 实例中,该实例将压缩的内容写入磁盘。当命令运行时,我可以观察到 7z 文件随着运行直到完成而增加。
当尝试放入 Powershell v2 脚本时,我 altered it 到:
& "C:\Program Files (x86)\VisualSVN Server\bin\svnadmin.exe" dump --quiet "C:\svnrepo" | "C:\Program Files\7-Zip\7z.exe" a -si "C:\svnbak.7z"
它抱怨“表达式只允许作为管道的第一个元素”。基于另一个SO answer,我将命令更改为:
& "C:\Program Files (x86)\VisualSVN Server\bin\svnadmin.exe" dump --quiet "C:\svnrepo" | & "C:\Program Files\7-Zip\7z.exe" a -si "C:\svnbak.7z"
Powershell 脚本似乎在运行,但没有看到文件被缓慢写入,只是我的内存增加了。我假设 Powershell 不是将内容写入 7-zip 进程,而是“缓存”内容,直到转储完成。转储完成后,内容将被推送到 7-zip。有没有办法防止这种情况发生(以获得与初始命令相同的结果)?
【问题讨论】:
-
& 运算符是处理带有空格的命令和参数时的噩梦。您可以尝试将 7zip 表达式放在括号内或脚本块中并尝试执行。
-
要去掉&运算符,试试
New-Alias 7z "C:\Program Files\7-Zip\7z.exe",然后你可以用7z代替& "C:\Program Files\7-Zip\7z.exe" -
这是一个非常有趣的问题。我尝试将 35MB 的文本文件通过管道传输到 7z,而 PowerShell 使用 500MB 的 RAM 来完成。
标签: powershell pipe powershell-2.0