我正在尝试为网络策略编写一个bat文件,如果该程序不存在则会安装该程序以及其他几个函数.我正在使用GOTO语句,具体取决于是否符合某些标准.但是,似乎所有标签都没有正确触发标签.
我简化了我的脚本,以便掌握可能发生的事情.
@echo off
IF EXIST c:\test\test.txt (GOTO :EXISTING) ELSE GOTO :MISSING
:EXISTING
echo file exists
:MISSING
echo file missing
ping localhost -n 5 >NUL
Run Code Online (Sandbox Code Playgroud)
基本上,它会检查文件"test.txt"是否存在于文件夹"c:\ test"中,而id为.所以应该将echo文件存在于控制台中.但是,"文件存在"和"文件丢失"都会回显到控制台.我发现如果我从文件夹中删除文件或只是重命名它,它只会回应"文件丢失"
为什么它运行两个标签?
因为GOTO只是执行跳转到脚本中的某一点,所以从该点开始依次执行.如果你想在运行'EXISTING'之后停止它,那么你需要做这样的事情.注意额外的GOTO和新标签:
@ECHO OFF
IF EXIST c:\test\test.txt (GOTO :EXISTING) ELSE GOTO :MISSING
:EXISTING
echo file exists
goto :NEXTBIT
:MISSING
echo file missing
:NEXTBIT
ping localhost -n 5 >NUL
Run Code Online (Sandbox Code Playgroud)
值得注意的是,使用cmd.exe(即基于NT的命令shell [NT,Win2k,XP等]),您可以执行IF ... ELSE这样的块:
@ECHO OFF
IF EXIST c:\test\test.txt (
ECHO File exists
) ELSE (
ECHO File missing
)
ping localhost -n 5 >nul
Run Code Online (Sandbox Code Playgroud)
...所以你可以完全消除你的GOTO.