我有一个名为 update.bat 的 applicationStart.bat 文件,我需要用update.bat替换新的applicationStart.bat。
applicationStart.bat 的代码如下:
@echo off
call update.bat
java -Xms128m -Xmx256m com.foo.bar
update.bat 的代码如下:
@echo off
..\JRE\bin\jar.exe -xvf .\updateFile.jar
我已经尝试过将applicationStart.bat放在de updateFile.jar中,并且在某些计算机上可以无错误地替换它,但是在其他计算机上,它将生成错误并中止提取。
applicationStart.bat仅在一天中的剩余时间内被使用,在某些情况下,用户可以从应用程序中关闭计算机,这使事情变得更加困难,因为我无法创建另一个等待应用程序结束并随后替换applicationStart.bat的过程。
如何替换此 applicationStart.bat ?
答案 0 :(得分:0)
Applicationstart.bat:
@echo off
if "%~1"=="::" goto mainline
update.bat
:mainline
java -Xms128m -Xmx256m com.foo.bar
update.bat
@echo off
..\JRE\bin\jar.exe -xvf .\updateFile.jar
applicationstart.bat ::
::
是用于更改批处理文件行为的长期使用的参数值。
Applicationstart.bat的另一种方法:
@echo off
%1 update.bat
java -Xms128m -Xmx256m com.foo.bar
在此版本中,applicationstart.bat将用什么代替%1
,因此执行update
,但是在替换并重新调用时将具有::
(或{ {1}}代替了rem
,因此没有运行%1
答案 1 :(得分:0)
我只是设法做到了,而无需编辑applicationStart.bat!
为此,我创建了一个名为 batkill.bat 的第三个批处理:
@echo off
if exist temp\applicationStart.bat (
title batkill
taskkill /IM cmd.exe /FI "WINDOWTITLE ne batkill" /F
taskkill /IM ping.exe /F
move /Y temp\applicationStart.bat .
start applicationStart.bat
exit
)
我刚刚将 update.bat 调整为:
@echo off
rem Still need to do this to keep the other updates the application needs,
rem without the applicationStart.bat inside
..\JRE\bin\jar.exe -xvf .\updateFile.jar
if exist temp\applicationStart.bat (
start batkill.bat
rem Waiting 10 seconds while the batkill comes to kills me
ping 127.0.0.1 -n 10 -w 1000 >nul
)
通过这种方式,applicationStart.bat在执行时保持不变,我只需要更改update.bat(易于更改和部署)