बैच फ़ाइल और फ़ंक्शन से मान लौट रहा है


-1

मेरे पास एक बैच फ़ाइल है जिसमें कई रूटीन हैं। उदाहरण

:checkFileExists
if not exist %1\%2 (
echo %2 does not exist under %1
set returnValue=FAIL
exit /b 1 
) 
exit /b 0 
:checkPortNumber 
if %1 LSS 1024 (
port number should be greater than 1024 and less than 65535
set returnValue=FAIL
exit /b 1 
)
... other checks for port number
exit /b 0 
... main code.. 
set returnValue=OK
call :checkFileExists c:\tmp
echo %returnValue% 
call :checkFileExists c:\tmp2
echo %returnValue% 
call :checkPortNumber 89
echo %returnValue% 

c: \ tmp केवल एक उदाहरण है और यह मौजूद है। मेरी वापसी का मूल्य सही रूप में प्रदर्शित होता है ठीक है। c: \ tmp2 मौजूद नहीं है और मेरे रिटर्नवैल्यू सही रूप में विफल रहता है।

मुझे उम्मीद है कि परीक्षण में असफल होने के लिए चेकपार्टनंबर की वापसी होगी लेकिन रिटर्नवैल्यू हमेशा ठीक है। मैं setlocal enableDelayedExpansion के साथ भी कोशिश की है और नहीं। क्या मैं कुछ छोड़ रहा हूं?

जवाबों:


1

यह पुन: व्यवस्थित / पुन: व्यवस्थित / सुधारित कोड अपेक्षित रूप से व्यवहार करता है।

आपके कोड के साथ मुख्य समस्या यह है कि आप केवल set returnValue=OK शुरुआत में एक बार, अगर एक सबरूटीन set returnValue=Fail यह तब भी कायम रहता है जब दूसरा उप करता है exit /B 0

:: Q:\Test\2018\12\15\SU_1383774.cmd
@echo off
:: ... main code.. 

call :checkFileExists c:\tmp || Echo returned errorlevel %errorlevel%
echo %returnValue% 

call :checkFileExists c:\tmp2 || Echo returned errorlevel %errorlevel%
echo %returnValue% 

call :checkPortNumber 89 || Echo returned errorlevel %errorlevel%
echo %returnValue% 

Goto :Eof

:checkFileExists
if not exist "%~1\%~2" (
    echo %2 does not exist under %1
    set returnValue=FAIL
    exit /b 1 
) 
set returnValue=OK
exit /b 0 

:checkPortNumber 
if %1 LSS 1024 (
    echo port number should be greater than 1024 and less than 65535
    set returnValue=FAIL
    exit /b 1 
)
:: ... other checks for port number
set returnValue=OK
exit /b 0 

1
यह एक बेहतर जवाब होगा यदि आपने बताया कि मूल कोड नहीं होने पर यह काम क्यों करता है।
DavidPostill
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.