信不信由你,我已经搜遍了所有的stackoverflow和谷歌,并且无法找到适合我的答案。
(Windows 7 64位)我试图创建一个一次运行多个程序的批处理文件。简单吧?它运行第一个.exe
程序之前一切正常。在.exe
程序的GUI关闭后,批处理文件/ cmd窗口也会关闭。我不希望它关闭;我想要运行批处理文件的其余部分。
在批处理文件中,我尝试了以下方法,但没有一种方法阻止批处理文件关闭:
Git-1.9.5-preview20141217.exe
Git-1.9.5-preview20141217.exe
pause
call Git-1.9.5-preview20141217.exe
pause
start Git-1.9.5-preview20141217.exe
pause
start "" /wait Git-1.9.5-preview20141217.exe
pause
start "" /w Git-1.9.5-preview20141217.exe
pause
start "" /w /b Git-1.9.5-preview20141217.exe
pause
有谁知道我可以尝试的另一种方法?也许我应该只调用一个powershell命令,甚至将整个批处理文件翻译成powershell,但我试图避免使用powershell,以便这个脚本可以在多个版本的Windows上运行。
我还应该提一下,通过上述方法,脚本在执行pause
命令之前关闭。
这里是其他.exe
程序的完整脚本:
:Git
@echo off
(
echo.
echo.
echo DOWNLOADING GIT...
)
powershell -Command "(New-Object Net.WebClient).DownloadFile('http://github.com/msysgit/msysgit/releases/download/Git-1.9.5-preview20141217/Git-1.9.5-preview20141217.exe', 'Git-1.9.5-preview20141217.exe')"
(
echo.
echo.
echo LAUNCHING GIT INSTALLATION PROGRAM...
echo.
echo !IMPORTANT! WHEN YOU REACH THE SCREEN 'Adjusting your PATH environment',
echo SELECT 'Use Git from the Windows Command Prompt'.
echo KEEP ALL OTHER OPTIONS AT THE DEFAULT SETTING.
echo.
echo AFTER READING THE INSTRUCTIONS ABOVE, PRESS ANY KEY TO CONTINUE
)
pause
Git-1.9.5-preview20141217.exe
pause
GOTO CheckOS
:CheckOS
IF EXIST "%PROGRAMFILES(X86)%" (GOTO 64BIT) ELSE (GOTO 32BIT)
:32BIT
(
echo.
echo.
echo 32 BIT
echo.
echo DOWNLOADING TORTOISEHG (MERCURIAL)...
)
powershell -Command "(New-Object Net.WebClient).DownloadFile('http://bitbucket.org/tortoisehg/files/downloads/tortoisehg-3.2.4-x86.msi', 'tortoisehg-3.2.4-x86.msi')"
(
echo.
echo.
echo LAUNCHING TORTOISEHG INSTALLATION PROGRAM...
)
tortoisehg-3.2.4-x86.msi
GOTO MingW
:64BIT
(
echo.
echo.
echo 64 BIT
echo.
echo DOWNLOADING TORTOISEHG (MERCURIAL)...
)
powershell -Command "(New-Object Net.WebClient).DownloadFile('http://bitbucket.org/tortoisehg/files/downloads/tortoisehg-3.2.4-x64.msi', 'tortoisehg-3.2.4-x64.msi')"
(
echo.
echo.
echo LAUNCHING TORTOISEHG INSTALLATION PROGRAM...
)
tortoisehg-3.2.4-x64.msi
GOTO MingW
:MingW
(
echo.
echo.
echo DOWNLOADING MINGW...
)
powershell -Command "(New-Object Net.WebClient).DownloadFile('http://downloads.sourceforge.net/project/mingwbuilds/mingw-builds-install/mingw-builds-install.exe?r=http%3A%2F%2Fsourceforge.net%2Fprojects%2Fmingwbuilds%2F%3Fsource%3Dtyp_redirect&ts=1422376004&use_mirror=iweb', 'mingw-builds-install.exe')"
(
echo.
echo.
echo LAUNCHING MINGW INSTALLATION PROGRAM...
)
mingw-builds-install.exe
(
echo.
echo.
echo DONE! PRESS ANY KEY TO CLOSE.
)
pause
GOTO END
:END
对于运行外部.exe
程序的行,我已经尝试了在此问题开头列出的所有7种命令形式,但脚本在到达下一个{{{0}之前始终关闭1}}命令。我还尝试使用以下建议中的pause
和cmd.exe /c
,但不幸的是,脚本在到达cmd.exe /k
命令之前仍然退出。
我想出了问题(虽然不是如何修复它)。如果我删除这些行:
pause
以便以下命令在同一个批处理标签下,它可以工作!但我不确定为什么包含 GOTO CheckOS
:CheckOS
IF EXIST "%PROGRAMFILES(X86)%" (GOTO 64BIT) ELSE (GOTO 32BIT)
:32BIT
标签会导致其中断。我以前在其他批处理脚本中使用过此标签,并且工作正常。
没关系,抱歉。 :S仅在程序已经运行时才有效。如果已经运行,则修改,修复或删除"屏幕弹出而不是"安装"屏幕。显然只有"安装"屏幕关闭:CheckOS
窗口。
括号是问题所在。删除后,其他一切都有效。删除括号后,此问题开头的方法编号为1。
答案 0 :(得分:1)
尝试在新shell中打开可执行文件:
@echo off
cmd.exe /c Git-1.9.5-preview20141217.exe
echo Still here.
/ c开关告诉(新)shell在程序终止时关闭。批处理脚本的执行将暂停。
例如:
@echo off
echo New window.
cmd.exe /c %WINDIR%\system32\notepad.exe
echo Window still open.
cmd.exe /c %WINDIR%\system32\notepad.exe
echo Window closed. You won't see this.