批处理文件等待安装完成后再执行下一行的命令

18
我有一个批处理文件,它会检查CONFIG目录是否存在,以判断用户是否已安装.NET Framework。
如果该目录不存在,则表示用户未安装.NET Framework。批处理文件将继续安装.NET Framework。然而,由于.NET Framework需要在安装我的拨号器的设置之前安装,所以我添加了一个PAUSE语句,让用户在框架安装完成后按任意键继续。
但是,我们的客户不喜欢这个方法,因为他们的一些客户无法理解并在框架安装完成之前按键。这导致设置失败,因为首先没有安装框架。
我使用等待用户输入的PAUSE命令。然而,是否有一种方法可以自动等待框架完成,而不使用PAUSE命令?
非常感谢您的建议。
@ECHO OFF
REM Copy the configuration file
copy config.xml "%AppData%\DataLinks.xml"

REM Search for the CONFIG file, if this doesn't exit then the user doesn't have the .Net framework 2.0
SET FileName=%windir%\Microsoft.NET\Framework\v2.0.50727\CONFIG
IF EXIST %FileName% GOTO INSTALL_DIALER
ECHO.You currently do not have the Microsoft(c) .NET Framework 2.0 installed.
ECHO.This is required by the setup program for MyApplication.
ECHO.
ECHO.The Microsoft(c) .NET Framework 2.0 will now be installed on you system.
ECHO.After completion setup will continue to install MyApplication on your system.
ECHO.
REM Install the .Net framework and wait for the user to input before install the dialer 
PAUSE
ECHO Installing... Please wait...
SET FileName =
Start .\NetFx20SP2_x86.exe
ECHO Once the .Net Framework has completed. Press any key to continue to install the dialer.
PAUSE
Start .\setup.exe
ECHO ON
EXIT

REM .Net framework has been skipped contine to install the dialer.
:INSTALL_DIALER
ECHO *** Skiped Dotnet Framework 2.0.50727 ***
ECHO Installing... Please wait...
SET FileName=
Start .\setup.exe
ECHO ON
EXIT
4个回答

15

你可以使用

START /WAIT NetFx20SP2_x86

也要记住。

REM comment

等于

::comment

使用 .\ 是不必要的,文件扩展名也是如此,除非存在具有冲突名称的目录/文件。您还不需要两次清理“filename”变量(两个 "=" 指向无)。

ECHO.something

相等

ECHO something

除了空白行以外,什么都不做。


大家好,这里的所有解决方案都有效。但是,我想知道WAIT命令前面的反斜杠是什么意思,即/WAIT。 - ant2009
我只是在想,如果用户在安装过程中取消了,安装框架大约需要5分钟。有没有一种方法可以退出批处理文件?当我测试安装时,它运行了一段时间然后失败了,因为用户取消了框架的安装。谢谢。 - ant2009
@Joey,你在谈论哪些版本的Windows和上下文?我很好奇。此外,echo.foo (spaces) >foo.txtecho bar (spaces) >bar.txt都可以正确输出前导空格。 - Camilo Martin
抱歉,我记错了 echo 部分;现在已经太久在 PowerShell 的世界里了,我忘记了一些东西。所以我想唯一需要使用 echo. 的地方是当你需要一个空行或输出一个不在你控制之下的变量时。至于 ::,那似乎早在很久以前就被修复了,但有时在 () 中使用它们时可能会遇到麻烦(例如在循环或条件语句中)。虽然我无法在 Win 2k 上再次重现,但那可能是 NT 4 的问题。 - Joey
@Joey感谢您的测试。我也不再使用batch了,即使是最简单的自动化任务也很难实现。 - Camilo Martin
显示剩余3条评论

3
您可以使用以下方式:
 START /WAIT NetFx20SP2_x86.exe

斜杠是用来表示启动命令的选项,而不是目标文件。要查看更多这样的选项,请看这里(我会称其为“正斜杠”)。


2

好的,我对你的脚本进行了优化:

@echo off
rem Copy the configuration file
copy config.xml "%AppData%\DataLinks.xml"

rem Search for the CONFIG file, if this doesn't exist then the user doesn't have the .Net framework 2.0
if not exist "%windir%\Microsoft.NET\Framework\v2.0.50727\CONFIG" (
    echo You currently do not have the Microsoft(c) .NET Framework 2.0 installed.
    echo This is required by the setup program for MyApplication.
    echo.
    echo The Microsoft(c) .NET Framework 2.0 will now be installed on you system.
    echo After completion setup will continue to install MyApplication on your system.
    echo.
    Start /w .\NetFx20SP2_x86.exe
)
Start /w .\setup.exe

1: 由于您只在测试目的中使用CONFIG文件一次,因此为其使用变量是无用的。此外,"="号必须粘贴到变量名上,否则将创建一个带有空格的变量。 "set filename ="和"set filename ="是两个不同的东西。是的,变量名可以包含多个单词和空格,但需要非常小心,可能很难处理。

2: 对于注释,我不建议使用"::",抱歉Camilo,因为它在括号内无法正常工作。在这里可能没问题,但如果您对所有批处理都采用此方法,则稍后可能会遇到问题,如果您不知道这一点,您会想知道为什么代码出错了。

3: 当脚本到达结尾时,不需要使用"exit"来结束脚本,也不需要重置为"echo on"。脚本自己会重置回显状态并退出。

希望这些能帮到您。


2

只需从调用中删除 START 行,如下所示:

.\NetFx20SP2_x86.exe
Start .\setup.exe

这将使安装阻塞,也就是说批处理文件会停止处理,直到NetFx20SP2_x86.exe程序终止。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接