批处理文件在启动时失败,但在我单击时会起作用

时间:2015-11-20 13:04:03

标签: windows batch-file cmd startup

我的批处理脚本有一个小问题。这个想法很简单: 我有一个应用程序定期检查更新(检查一个exe文件)。如果它找到一个然后下载它,重命名它并将其放在与旧文件相同的目录中。然后,应用程序创建一个.bat文件,并将其放在同一目录中。 .bat文件的内容是:

@ECHO OFF
ECHO Waiting while old application closes...
ping 127.0.0.1 -n 5
taskkill /IM myApp.exe /f
ECHO Updating application
move /y myApp_TEMP.exe myApp.exe
START myApp.exe
pause 

在我关闭我的应用程序(myApp.exe)之前,我指示它执行.bat文件,ant等待5秒。所以它会正常关闭,这就是ping 127.0.0.1 -n 5所在的原因。理想情况下,这个脚本应该:

Close myApp.exe
Rename myApp_TEMP.exe to myApp.exe
Overwrite old myApp.exe with new myApp.exe
Start myApp.exe

当我双击.bat文件时它会起作用,当我将myApp.exe放入Windows启动列表时会出现问题。
所以应用程序启动,下载更新,生成.bat文件(请记住,所有内容都发生在同一目录中),然后运行它。经过一番挖掘后,我发现行move /y myApp_TEMP.exe myApp.exe没有执行。但是当我手动运行这个脚本时,一切正常。也许某人已经遇到过类似的问题了?

3 个答案:

答案 0 :(得分:1)

您在文件名中使用相对路径。检查它是否使用正确的当前目录运行或切换到绝对路径。

答案 1 :(得分:1)

我建议您在移动前使用CD /D <directory of the .exe file>,这样您就可以确定自己位于正确的目录中。此外,您可以使用timeout 5 /NOBREAK在常规批处理文件中等待5秒

答案 2 :(得分:0)

可能需要为脚本添加一些冗余。如:

@ECHO OFF
ECHO Waiting while old application closes...
taskkill /IM myApp.exe /f
timeout 5 /nobreak >nul
ECHO Updating application
IF EXIST "%cd%\MyApp_TEMP.exe" move /y myApp_TEMP.exe myApp.exe
IF EXIST "%cd%\MyApp.exe" GOTO STARTAPP
ECHO File not found. Unable to update.
pause
exit
:STARTAPP
START myApp.exe
pause 

问题似乎源于目录搜索中的问题。虽然这可以通过相当长的搜索时间来解决,但更容易确保批处理与“MyApp_TEMP.exe”位于同一目录中或使用

cd <path to MyApp_TEMP.exe>
ECHO Updating application
move /y myApp_TEMP.exe myApp.exe
START myApp.exe
pause

如果找不到文件,您也可以使用ELSE,我只是个人更喜欢使用GOTO标签跳转。