首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在/piping中使用cmd型管道?

如何在/piping中使用cmd型管道?
EN

Stack Overflow用户
提问于 2011-03-15 19:57:38
回答 4查看 10.3K关注 0票数 4

在cmd (和bash)中,管道"|“以第一个命令的输出(作为字符串)的原始格式将输出推送到另一个命令。

在PowerShell中,出管道的所有东西都是一个对象(甚至一个字符串也是一个字符串对象)。

因此,某些命令在PowerShell命令窗口中运行时会失败,而不是在Windows命令窗口中运行。

示例:

代码语言:javascript
复制
dir c:\windows | gzip > test.gz

当该命令在Windows命令提示符窗口中运行时,它正常工作- C:\windows的目录列表被压缩到test.gz文件中。

PowerShell中的相同命令会失败,因为PowerShell不使用cmd样式的管道,并将其替换为PowerShell管道(处理文件系统项数组)。

Q.如何禁用PowerShell中的默认管道行为以使传统的PowerShell命令在PowerShell中相同工作?

我试着在管道"`“之前使用转义字符"`|",但没有起作用。我也尝试过invoke-expression -command "command with | here",但也失败了。

EN

回答 4

Stack Overflow用户

发布于 2011-03-15 21:36:45

如果要在管道中发送字符串,可以使用cmdlet "out-string“。

例如:

代码语言:javascript
复制
get-process | out-string

如果您正在专门寻找一种PowerShell方式来压缩文件,请查看PowerShell社区扩展。有一堆cmdlet可以压缩和解压缩所有类型的文件。

http://pscx.codeplex.com

票数 7
EN

Stack Overflow用户

发布于 2011-03-16 14:54:41

如果您可以将(CMD) dir的输出输送到gzip中,那么gzip显然知道如何解析dir输出。PowerShell dir命令的(string)输出(又名Get)看起来不一样,因此gzip很可能无法解析它。但是,我也猜到gzip很乐意列出路径列表,所以这可能会奏效:

代码语言:javascript
复制
dir c:\windows | select -ExpandProperty FullName | gzip > test.gz

无保证书者明示或暗示。

票数 4
EN

Stack Overflow用户

发布于 2018-08-30 00:35:14

如果您真的需要在PowerShell中使用旧的DOS管道系统,可以通过在单独的临时DOS会话中运行命令来完成:

代码语言:javascript
复制
& cmd /c "dir c:\windows | gzip > test.gz"

/c开关告诉cmd运行命令,然后退出。当然,这只有当所有的命令都是老式的DOS -你不能混合-n-匹配他们与PowerShell命令。

虽然问题中给出的例子有一些PowerShell替代方案,但是有许多DOS程序使用旧的管道系统,在PowerShell中不能工作。svnadmin load是我有幸与之打交道的一种。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5317269

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档