2010-09-08 99 views
1

我正在開發一個批處理文件來收集websphere產品信息,它似乎除了某些情況下都能正常工作。意外退出windows批處理部分

出於某種原因,在某些情況下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 
+0

你在versionInfo.bat中有沒有退出調用?如果你沒有使用exit/b,這可能會觸發整個腳本的退出。 – Rod 2010-09-08 21:22:49

+0

我無法控制versionInfo.bat的內容/退出,所以是的,它可能會退出。我不確定我明白爲什麼被調用的批處理的退出代碼會中斷當前部分。 – 2010-09-08 21:28:45

+0

您的問題指出我的方向正確,我需要「調用」versionInfo.bat以防止它退出當前部分。 – 2010-09-08 21:30:41

回答

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特殊語法直接退出該批處理文件,我通常只有當我需要一些使用了這樣的跳轉標籤首先要做清理工作,但爲了避免混淆,我用了不同的名稱:-))

+0

哦,你已經認識到了這一點。啊,我應該閱讀評論... – Joey 2010-09-09 19:28:08