【发布时间】:2011-07-16 02:14:40
【问题描述】:
在 cmd(和 bash)中,管道“|”以第一个命令输出的原始格式(作为字符串)将输出推送到另一个命令。
在 PowerShell 中,从管道中出来的所有内容都是一个对象(即使是字符串也是字符串对象)。
因此,某些命令在 PowerShell 命令窗口而不是 Windows 命令窗口中运行时会失败。
例子:
dir c:\windows | gzip > test.gz
当此命令在 Windows 命令提示符窗口中运行时,它可以正常工作 - C:\windows 的目录列表被压缩到 test.gz 文件中。
PowerShell 中的相同命令失败,因为 PowerShell 不使用 cmd 样式管道并将其替换为 PowerShell 管道(使用文件系统项数组)。
问。如何禁用 PowerShell 中的默认管道行为以使传统的 Windows 命令在 PowerShell 中同样工作?
我尝试在管道“`|”之前使用转义字符“`”,但没有成功。我也试过invoke-expression -command "command with | here",但也失败了。
【问题讨论】:
-
为什么要绕过这个?如果你在 powershell 中工作,为什么不接受它的约定?
-
您似乎正试图将文件列表传递给 zip 程序以压缩这些文件。如果是这种情况,我会重新表述您的问题,询问如何在 PowerShell 中完成此任务,而不是如何让 PowerShell 表现得像 DOS。
标签: windows powershell cmd pipe