我有这个命令在powershell上工作正常
Compare-Object(Get-Content“tex1.txt”)(Get-Content“tex2.txt”)| Where-Object {$ _。SideIndicator -eq“<=”} | 选择inputobject | ft -hidetableheaders
我试图通过这样做在cmd中运行:
powershell -Command“&{Compare-Object(Get-Content”tex1.txt“)(Get-Content”tex2.txt“)| Where-Object {$ _. SideIndicator -eq”<=“} | select inputobject | ft -hidetableheaders}”
但它说的是:名称,目录或卷语法不正确(是西班牙语,所以我不知道确切的翻译)
我认为问题是管道,因为在管道之前运行所有内容:Compare-Object(Get-Content“tex1.txt”)(Get-Content“tex2.txt”)工作原理
PD:我也尝试在管道前写^但我还没有成功。
先谢谢你。
发布于 2018-09-27 15:14:04
eryksun指出你的问题是你没有逃避嵌入式"
字符。在整个"..."
字符串中,这会导致cmd.exe
看到多个字符串,包括它认为不带引号的部分,这会导致特殊字符出现问题,例如|
和<
- 它们永远不会到达PowerShell。
嵌套双引号字符串cmd.exe
是棘手的业务:
cmd.exe
快乐,你需要加倍嵌入的"
字符。powershell.exe
快乐,你需要 - \
去掉这些字符。简而言之:内部"
字符。必须逃脱\""
(原文如此)。
也就是说,你可以经常逃脱而不需要嵌入双引号:
text1.txt
和text2.txt
'...'
),它不需要转义; 请注意,从PowerShell的角度来看,这些字符串是字符串文字。把它们放在一起:
powershell -Command "Compare-Object (Get-Content tex1.txt) (Get-Content tex2.txt) | Where-Object {$_.SideIndicator -eq '<='} | select inputobject | ft -hidetableheaders"
请注意,我还删除了& { ... }
您的命令,因为没有必要。
https://stackoverflow.com/questions/-100006168
复制相似问题