如何在Windows变量中使用命令行中的&&

bvjxkvbb  于 2023-03-09  发布在  Windows
关注(0)|答案(3)|浏览(247)

我有一个复杂的程序,它需要执行一系列命令,我需要使用&&将它们组合成一个命令,但这会使这个命令很长,因此很难阅读和维护。
因此我尝试使用set来合并它们,组合后的命令可以正确打印,但不能正确执行。下面是一个例子。我如何纠正这段代码,使它在语法上有效?

@echo off 
set command=dir
set command=%command% ^^^&^^^& tree

rem this line will print the combined string
echo %command%

rem this line will not execute the combined string
%command%

pause

dir && tree只是一个例子,我用它作为一个例子。在我的程序中有许多命令组合在一起,如cmd1 && cmd2 && cmd3 && ...。我不能一个接一个地运行它们,我需要使用&&,只有在前一个成功的情况下才运行每个命令。

yv5phkfx

yv5phkfx1#

很难看,但是下面的代码可以工作。给字符串加上引号,但是去掉引号执行它:

@echo off
set command=dir
set command="%command% && tree"

rem this line will print the combined string (quotes as well)
echo %command%

rem this line will execute the combined string
%command:~1,-1%

样本输出:

"dir && tree"
 Volume in drive C has no label.
 Volume Serial Number is CE8B-D448

 Directory of C:\x

03/05/2023  10:44 PM    <DIR>          .
03/05/2023  10:44 PM    <DIR>          ..
03/05/2023  10:44 PM    <DIR>          a
03/05/2023  10:44 PM    <DIR>          b
03/05/2023  10:43 PM               204 x.bat
               1 File(s)            204 bytes
               4 Dir(s)  19,423,408,128 bytes free
Folder PATH listing
Volume serial number is CE8B-D448
C:.
├───a
└───b
eqoofvh9

eqoofvh92#

希望不使用一行程序是一个更干净的解决方案。

if dir tree

或者,在一般情况下,

if cmd1 (if cmd2 (if cmd3 (if cmd4 cmd5))))

圆括号还允许您轻松地将代码拆分为多行,以提高可读性。

zu0ti5jz

zu0ti5jz3#

&&表示“如果前一个命令成功”
“成功”自然依赖于观察者。
所以我建议

set "commands="dir""
set "commands=%commands% "tree""
for %%e in (%commands%) do if not errorlevel 1 %%~e

相关问题