如何将“=”作为参数的一部分从 Windows 的 bit-bash 传递给 .cmd 或 .bat 文件
Posted
技术标签:
【中文标题】如何将“=”作为参数的一部分从 Windows 的 bit-bash 传递给 .cmd 或 .bat 文件【英文标题】:how to pass "=" as part of argument to .cmd or .bat file from bit-bash for windows 【发布时间】:2021-10-29 05:19:42 【问题描述】:在我在 windows10 中打开的 git-bash shell 中,这个测试
./test.cmd 123=456
返回
123
test.cmd 的内容是:
echo %1
我试过./test.cmd 123\=456
和123^456
还是不行。
如果我从 cmd shell 运行 ./test.cmd 123=456
,它可以正常工作并输出 123=456
。
我可以转义其他特殊字符,只是不能=
$ ./test.bat "123^^^&456"
C:\Users\551527>echo 123&456
123&456
551527@S29C0N4 MINGW64 ~
$ ./test.bat "123^^^=456"
C:\Users\551527>echo 123
123
=
有什么不同?
【问题讨论】:
我会说这与 Windows 如何解释批处理脚本有关。这不是 Git Bash 做的,但 cmd 做的我很确定。我刚刚在cmd
中进行了相同的测试并得到了相同的结果。
嗯,编辑你的问题,我刚刚注意到你说你在cmd
中得到不同的结果,所以我再次测试,当我在cmd 中运行test.cmd 123=456
时,我确实得到了123
。我不明白为什么你会看到不同的结果。
此外,在cmd
,./test.cmd 123=456
给我错误'.' is not recognized as an internal or external command,
。我必须运行.\test.cmd 123=456
才能获得输出123
,所以我必须问你是否确定测试确实在cmd
中运行,即使这看起来像是一个愚蠢的问题。
【参考方案1】:
第一个问题:等号是cmd.exe中的分隔符
如果您以分隔符开始批处理文件,这只会拆分参数。
myBatch.bat three;argu=ments
-- %1 = three
-- %2 = argu
-- %3 = ments
-- %* = three;argu=ments
为避免拆分,您必须使用引号(插入符号在这里不起作用)。
myBatch.bat "three;argu=ments"
-- %1 = "three;argu=ments"
-- %~1 = three;argu=ments
第二个问题:git-bash 与参数的工作方式不同
bash 对参数有不同的规则,它决定什么是单个参数并删除周围的引号
使用
./myBatch.bat "三个;argu=ments"
由 bash 解析,检测到单个参数,然后使用该单个参数调用 cmd.exe,例如:
cmd /c myBatch.cmd three;argu=ments
在这一点上,很明显你不能构建一个复杂的命令行,它适用于 cmd.exe 和 bash。
可以为具体问题构建解决方案,但总是很痛苦。
【讨论】:
以上是关于如何将“=”作为参数的一部分从 Windows 的 bit-bash 传递给 .cmd 或 .bat 文件的主要内容,如果未能解决你的问题,请参考以下文章