我有一个复杂的程序,它需要执行一系列命令,我需要使用 && 将它们组合成一个命令,但这会使这个命令变得很长,因此很难阅读和维护。
因此我尝试使用 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
答案1
我不知道你为什么失败了。不要试图逃避&&
,你会没事的。
转义&&
不再是连接命令。转义告诉 cmd.exe 将它们视为文本。如果您尝试通过命令显示这一点echo
,它将无法正常工作,因为将&&
获得文字解释。
这是我刚刚制作的简单批处理文件效果非常好。
@echo off
pushd %TEMP%
set TheCommand=tree
set TheCommand=%TheCommand% && dir
%TheCommand%
popd
结果(来自桌面上名为“test.bat”的批处理):
C:\Users\XXXXX\Desktop>test
Volume in drive C has no label.
Volume Serial Number is XXXXXX
Directory of C:\Users\XXXXX\AppData\Local\Temp
03/09/2023 12:44 PM <DIR> .
03/09/2023 12:44 PM <DIR> ..
03/09/2023 12:31 PM 6,634,180 17e7aa4d-2647-47b0-b8ca-51ae8002695d.tmp
03/09/2023 12:29 PM 0 189c12c6-9281-433a-94a4-2f2ebd4c7d5d.tmp
03/09/2023 12:44 PM 0 2b1fb125-4350-4934-9e68-427321701000.tmp
03/09/2023 12:29 PM 5,763 38145745-fdf5-4cd2-ad17-d4277a2def23.tmp
03/09/2023 12:31 PM 2,923,294 66835aae-283d-433a-84bb-bf5da4aa777e.tmp
03/09/2023 12:31 PM 218,820 78abe627-e18a-4ec8-b920-e0c20eef117c.tmp
03/09/2023 12:31 PM 444,036 99121e46-5b7e-4985-9f6b-5e48f03963ad.tmp
03/09/2023 12:29 PM 0 c7868484-5d58-48b0-a2b0-9dc22811c155.tmp
02/03/2023 07:58 AM <DIR> Diagnostics
03/09/2023 12:29 PM 4,194,332 ExchangePerflog_8484fa31fa76b577cfcccd43.dat
03/09/2023 12:30 PM 12,730,645 fcc5fb22-4ce2-48fc-9f66-2a8b31088e1d.tmp
03/09/2023 12:43 PM <DIR> Outlook Logging
03/09/2023 12:29 PM 1,205 VCXSrv.0.log
03/09/2023 12:43 PM 0 {EB6CCD1B-254A-448B-B6D0-50D80EF04749} - OProcSessId.dat
12 File(s) 27,152,275 bytes
4 Dir(s) 741,288,493,056 bytes free
Folder PATH listing
Volume serial number is XXXXXX
C:.
├───Diagnostics
│ ├───EXCEL
│ ├───ONENOTE
│ │ └───Upload
│ ├───OUTLOOK
│ ├───POWERPNT
│ │ └───Upload
│ └───WINWORD
│ └───Upload
└───Outlook Logging
C:\Users\XXXXX\Desktop>
答案2
这并不理想,但您可以在新 shell 中执行该命令(cmd /c
):
set command=dir
set command=%command% ^^^&^^^& tree
rem this line will print the combined string
echo %command%
rem execute the combined string
cmd /c %command%