意外退出Windows批处理部分

时间:2010-09-08 21:11:31

标签: windows batch-file

我正在开发一个批处理文件来收集websphere产品信息,除了某些情况外它似乎工作正常。

出于某些原因,在某些情况下调用了versionInfo.bat -maintenancePackages但是下面的代码(检查manageprofiles.bat),看起来它在调用versionInfo之后从:check部分返回。

我的Windows批量写作技巧非常生疏,欢迎其他改进。

@echo off
SetLocal EnableDelayedExpansion

set tmpfile=%TEMP%\tmpdone.txt

echo. > %tmpfile%
For /F "eol= delims=| tokens=13" %%a in (%windir%\vpd.properties) Do (
set check=%%a
call :check
)
goto eof

:check
Set skip=No
For /F "eol= delims=|" %%a in (%tmpfile%) Do (
if "%%a" == "%check%" set skip=YES
)

if %skip% == YES goto eof
echo %check%>>%tmpfile%
if exist "%check%\bin\versionInfo.bat" "%check%\bin\versionInfo.bat" -maintenancePackages
echo %check%\bin\manageprofiles.bat
if exist "%check%\bin\manageprofiles.bat" "%check%\bin\manageprofiles.bat" -listProfiles
goto eof

:del
echo Done
del %tmpfile%

:eof

1 个答案:

答案 0 :(得分:2)

您需要使用call从其他批处理文件运行批处理文件。否则cmd将不会从被叫方返回。所以你的代码应该是:

if exist "%check%\bin\versionInfo.bat" call "%check%\bin\versionInfo.bat" -maintenancePackages
echo %check%\bin\manageprofiles.bat
if exist "%check%\bin\manageprofiles.bat" call "%check%\bin\manageprofiles.bat" -listProfiles
goto :eof

(也不需要:eof跳转标签,您可以使用goto :eof特殊语法直接退出批处理文件。如果我需要清理一下,我通常只使用这样的跳转标签先做,但我的名字不同,以避免混淆: - ))