如何替换父批处理文件?

时间:2019-05-27 14:32:14

标签: batch-file

我有一个名为 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

2 个答案:

答案 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(易于更改和部署)