批处理文件条件 - 仅当FOR循环为真时才执行下一个语句

时间:2015-04-09 13:25:44

标签: batch-file if-statement cmd

我在安装新脚本之前构建/调整了一个脚本以卸载任何以前版本的Java。该脚本如下;

1 - 卸载任何以前版本的JAVA

SET regVar32=HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WinDOws\CurrentVersion\Uninstall
SET regVar64=HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\WinDOws\CurrentVersion\Uninstall\

SET myCMD=REG QUERY %regVar32% /s /f *java*
FOR /f " usebackq delims={} tokens=2" %%i IN (`%myCMD%`) DO ( msiexec /x {%%i} /qn /norestart )

SET myCMD=REG QUERY %regVar64% /s /f *java*
FOR /f " usebackq delims={} tokens=2" %%i IN (`%myCMD%`) DO ( msiexec /x {%%i} /qn /norestart )

2 - 清理注册表

3 - 清理文件和文件夹

4 - 安装新版本的JAVA

问题是脚本没有任何条件,如果例程1没有找到要卸载的东西,它将继续执行其他子例程。 我希望能够做的是,如果上面的例程1没有任何东西可以卸载GOTO :INSTALL并安装新的JAVA而不运行2和3。

我希望我能够清楚地解释自己;-)提前感谢您的帮助。

3 个答案:

答案 0 :(得分:0)

(for /f .... do (msiexec .... )) || goto :install

如果for命令找不到任何要处理的行,则会引发错误级别。使用条件执行,您可以检测它并直接跳转到所需的标签。

答案 1 :(得分:0)

换句话说,您想知道步骤1中的两个for命令 - 卸载是否处理了任何文件。你可以这样做:

SET anyFileUninstalled=false

SET myCMD=REG QUERY %regVar32% /s /f *java*
FOR /f " usebackq delims={} tokens=2" %%i IN (`%myCMD%`) DO ( 
   msiexec /x {%%i} /qn /norestart
   SET anyFileUninstalled=true
)

SET myCMD=REG QUERY %regVar64% /s /f *java*
FOR /f " usebackq delims={} tokens=2" %%i IN (`%myCMD%`) DO ( 
   msiexec /x {%%i} /qn /norestart
   SET anyFileUninstalled=true
)

if %anyFileUninstalled% neq true goto install

答案 2 :(得分:0)

所以我终于能够在你们这里​​的帮助下得到正确的帮助。这是它最终的结果;

ECHO -------------------------------------------------------
ECHO UNISTALL ANY PREVIOUS VERSIONS OF JAVA 32 Bit
ECHO -------------------------------------------------------
SET uinstallState=false
SET jver="Java 7"
SET regVar32=HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
SET myCMD=REG QUERY %regVar32% /s /f %jver%
FOR /f " usebackq delims={} tokens=2" %%i IN (`%myCMD%`) DO (
 SET uinstallState=true
 ECHO Uninstall Key: {%%i}
 ECHO Condition: %uinstallState%
  )

ECHO -------------------------------------------------------
ECHO UNISTALL ANY PREVIOUS VERSIONS OF JAVA 64 Bit
ECHO -------------------------------------------------------
SET uinstallState=false
SET jver="Java 7"
SET regVar64=HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\
SET myCMD=REG QUERY %regVar64% /s /f %jver%
FOR /f " usebackq delims={} tokens=2" %%i IN (`%myCMD%`) DO (
 SET uinstallState=true
 ECHO Uninstall Key: {%%i}
 ECHO Condition: %uinstallState%
  )
IF %uinstallState% NEQ true GOTO INSTALL

现在它将跳过子程序2和3并直接进入INSTALL,如果没有要卸载的话。 : - )

谢谢大家的帮助。