powershell - Powershell用单引号调用cmd
问题描述
我想做与Powershell 调用 cmd.exe 命令相同的操作,例如 copy /b,但现在我遇到了 quote : ' 的问题,此时是出乎意料的。
我试图用 \ 逃脱,但更糟
function concat-filenames {
cmd.exe --% /c (echo file '$($args[0])' & echo file '$($args[0])' )>list.txt
}
解决方案
--%
,停止解析符号,不能与 PowerShell 变量和表达式组合,因为它将命令行的其余部分传递给目标可执行文件 -cmd.exe
在这种情况下 -按原样,唯一的例外是cmd.exe
样式的扩展(插值)环境变量引用,例如%USERNAME%
.
通常,--%
有许多限制- 请参阅此答案。
像下面这样的东西应该可以工作;请注意,&
必须引用才能传递给cmd.exe
,而>
,由于未引用,因此被 PowerShell 插入。
function concat-filenames {
cmd.exe /c echo file $args[0] '&' echo file $args[0] > list.txt
}
请注意,在命令cmd.exe
之后的尾随空格中echo
,在后续运算符(例如&
or >
)之前,将成为输出的一部分。
如果您打算将单引号作为值的一部分传递(而不是将它们的语法用作 PowerShell 字符串文字),请使用可扩展字符串( "..."
):
function concat-filenames {
cmd.exe /c echo file "'$($args[0])'" '&' echo file "'$($args[0])'" > list.txt
}
请注意,在这两种情况下,PowerShell 都会在后台按需执行重新引用:如果扩展(内插)参数值包含空格,则将其包裹在双引号 ( "..."
) 中。
推荐阅读
- javascript - 使用 React 构建受保护的路由
- php - Codeigniter 使用 for 循环将数据从一个表传输到另一个表
- flutter - 如何让我的更改通知器触发我的警报对话框?
- javascript - Webrtc 为什么从不调用调用者的ontrack?
- java - 为更改片段创建自定义类
- android - React Native:为什么这个屏幕在snack.expo.io 和我的设备上呈现不同?
- ios - 点击按钮时SwiftUI获取用户的位置
- c++ - 调试断言失败 C++ 转发列表合并
- python - 使用 python 抓取表格数据
- google-cloud-platform - 创建正在进行的 vm 时出现没有资源的错误