好的,我了解到可以使用&
或&&
将多个命令组合成一行,但是看起来在同一行中声明的变量set
实际上无法插值:
C:\Users\Andrew>set foo=hello, world!&& echo %foo%
%foo%
C:\Users\Andrew>echo %foo%
hello, world!
为什么我无法使其工作,是否有任何方法可以在一行中使其工作?
我需要一行代码的原因是,我正在使用的外部程序接受单个命令作为预运行钩子,并且当然,我需要运行多个命令。
预防性防御措施
"
hello, world!
应该用双引号括起来!" 实际上,这样做似乎会将文字中的双引号存储在变量中,而我不想要这样,例如:
"在C:\Users\Andrew>set bar="hello, world!"&& echo %bar% %bar% C:\Users\Andrew>echo %bar% "hello, world!"
&&
前应该有一个空格!" 实际上,这样做似乎会在变量中存储一个尾随空格,我不希望这样,例如:foo = bar && baz;
"两个都需要!" >:(
C:\Users\Andrew>set bar="hello, world!"&& echo %bar%
%bar%
C:\Users\Andrew>echo %bar%
"hello, world!"
C:\Users\Andrew>set mu="hello, world!" && echo %mu%
%mu%
C:\Users\Andrew>echo (%mu%)
("hello, world!" )
set
有这种替代语法,而且那个消失的插入符号技巧真的很聪明。非常感谢!(是的,我考虑过把所有东西都放在一个bat
文件中,但出于心理/后勤原因,一行代码会更好。这就是“好了,大家只需将此行复制/粘贴到您的窗口中,然后瞧!”,和“每个人下载这个文件,在您的$PATH
中放置它”,等等之间的区别。) - Andrew Cheong%^mu%
部分。我认为你的意思是使用^
来防止第一阶段过早地评估%mu%
,并使用call
在脱字符被移除但 set 命令已经通过时再次解析 echo 命令。这正确吗?谢谢。 - Andrewset "mu=hello, world!" && call echo %%mu%%
(仅适用于脚本)。 - Vopel