我在安装新脚本之前构建/调整了一个脚本以卸载任何以前版本的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。
我希望我能够清楚地解释自己;-)提前感谢您的帮助。
答案 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,如果没有要卸载的话。 : - )
谢谢大家的帮助。