1
86
批处理脚本中的转义符是
|
2
64
eplawless's own answer
简单有效地解决了他的特定问题:它取代了所有
一般回答
如何在双引号字符串中转义双引号,使用
DR :
有关背景信息,请继续阅读。 背景注:这是基于我自己的实验。如果我错了一定要告诉我。 类POSIX的shell,如类Unix系统上的bash,在传递参数之前标记参数列表(字符串)。 个别地 对于目标程序:在其他扩展中,它们将参数列表拆分为单个单词(分词),并从结果单词中删除引用字符(删除引号)。目标程序在概念上是一个去掉(语法要求)引号的单个参数数组。
相比之下,Windows命令解释器显然不标记参数列表,只传递
单一的
字符串包含
全部的
参数-包括引用字符。-目标程序。
因此,与Unix不同,目标程序的职责是解析参数字符串,并将其分解为各个参数,去掉引号。 因此, 不同的程序可能需要不同的逃逸方法 和 没有单一的逃跑机制 放心 使用所有程序 - https://stackoverflow.com/a/4094897/45375 包含有关无政府状态的优秀背景,即Windows命令行分析。
在实践中,
自从
自从
即使在意外命令不会造成损害的情况下,如果不是所有参数都传递给了整体命令,那么它也不会像设计的那样工作。
许多编译程序/翻译程序只识别
相比之下,
使用
相比之下,
动力壳
,当被调用时
从外面
-例如,来自
相关信息
动力壳
Windows PowerShell
是一个比
PowerShell始终工作 内部的 关于报价:
这在PowerShell命令行上工作,并在从以下位置向PowerShell脚本或函数传递参数时工作: 在内部 电源外壳。
(如上所述,将转义双引号传递给PowerShell
从外面
要求
不幸的是,当调用 外部的 程序,您将面临同时满足PowerShell自己的报价规则的需要 和 为了逃避 目标 程序: 这种有问题的行为也在 this GitHub docs issue 双重的 -内部报价 双重的 引文字符串 :
考虑字符串
如果要将此字符串传递给外部程序,
你必须应用目标程序的转义
此外
对动力壳牌公司
;假设您希望将字符串传递给C程序,该程序希望将嵌入的双引号转义为
注意如何
二者都
同样的逻辑也适用于调用批处理文件,其中
相比之下,嵌入 单一的 -在A中的引号 双重的 引号串 根本不需要逃跑。
单一的
-内部报价
单一的
引文字符串
做
不
要求
额外的
逃避;考虑
PowerShell将单引号字符串转换为双引号字符串,然后将其传递给目标程序。 然而, 双重的 -内部报价 单一的 引文字符串 不需要逃跑 动力壳 仍然需要为 目标程序 :
动力壳
V3
介绍了魔法
注意如何转义嵌入的
但是,这种方法:
因此,尽管PowerShell有许多改进,但在调用外部程序时,它并没有使转义变得更容易。然而,它引入了对单引号字符串的支持。 我想知道,在Windows世界中,是否有可能从根本上切换到让 壳 做所有的标记化技术和报价删除 可预见地 , 正面 , 不考虑目标程序 ,然后通过传递生成的令牌来调用目标程序。 |
3
22
谷歌最终给出了答案。成批替换字符串的语法如下:
它产生了“复制我”。我的脚本现在看起来如下:
它替换了
|
4
8
作为对 mklement0's excellent answer :
几乎所有可执行文件都接受
注释
如果您的批处理文件不能与delayedxpansion一起使用,则可以临时启用它:
如果要从包含转义为的引号的变量传递动态内容
这个替换不安全
万一
OP
如果出于某种原因,即使暂时启用DelayedExpansion也不是一个选项,请继续阅读:
使用
要实现这一点,任何引号前面都要有一个插入符号(
例子:
来源: Everyone quotes command line arguments the wrong way 参见“更好的报价方法”
要传递动态内容,需要确保以下内容:
这不安全,如果
|
5
-2
例如,对于从批处理文件运行的不真实的引擎自动化工具-这对我很有用 如: -cmdline=“-messaging”-device=device-addCmdline=“-sessionid=session-session owner='owner'-sessionname='build'-dataProviderMode=local-logCmds='logCommodity off'-execcmds='automation list;run tests tests+separated+by+t1+t2;quit'“-run 希望这能帮助别人,为我工作。 |
KiraHoneybee · 具有构造函数参数的模板化类 2 年前 |
Jiji · 将简单对象强制转换为简单的通用接口 6 年前 |
Ashish K · 在Groovy中将字符串参数传递给对象方法参数 6 年前 |
snuff · c语法的问题-const*const*定义 6 年前 |
Val · 将整个结构指针数组传递给函数的语法是什么?[已关闭] 6 年前 |
dragi · 将参数传递到void方法(整数或对象) 6 年前 |
msinghm · 参数仅与其他参数一起工作,但我希望它们独立工作 6 年前 |
user3251349 · SSRS:参数未过滤MySQL查询 6 年前 |