이 중첩 된 IF 문이 올바르게 작동하지 않는 이유를 잘 모릅니다. 나는 그것으로 어떤 문제를 찾을 수 없습니다. 마지막 코드 블록은 실제로 제대로 작동하지만 첫 번째 코드 블록이 그렇지 않은 이유는 확실하지 않습니다.
첫 번째 스크립트는 첫 번째 tracert를 실행하지만 주 IF 문의 ELSE 명령도 인쇄합니다. 스크립트에서 동일한 코드의 두 번째 인스턴스 (sCSCLIENTNAME 대신 sCSHOSTNAME을 제외하고 동일 함)는 주 IF 문의 else 명령을 인쇄합니다.
sCSCLIENTNAME is a remote server address
sCSHOSTNAME is a remote server address
dBASEHOME is the root folder where the cvping file exists
DIAGFolder is a destination folder where all of the outputs are being dumpe
tracert 라인 (변수 묶음을 가진 라인)은 잘 작동하며,이 라인을 너무 길게 만들지 않도록합니다.
IF EXIST sCSCLIENTNAME (
ECHO Checking network connectivity to %sCSCLIENTNAME%...
::cvping
IF EXIST "%dBASEHOME%\cvping.exe" (
"%dBASEHOME%\cvping" %sCSCLIENTNAME%> "%DIAGFolder%\cvping.txt"
) ELSE (
@ECHO CVPing test skipped due to cvping not being found>> "%DIAGFolder%\cvping.txt"
)
::ping
ping %sCSCLIENTNAME%>> "%DIAGFolder%\PingResults.txt"
:: Traceroute
(9>"%lockFile%" tracert %sCSCLIENTNAME%>> "%DIAGFolder%\traceroute.txt") | <nul >nul 2>&1 (cmd /v /q /c "%loop% ( %wait% & %rotateSpin% & (( %check% )&&( %atEnd% )||( %progress% )))")
) ELSE (
ECHO sCSCLIENTNAME not defined in registry, skipping tests to that value...>> "%DIAGFolder%\PingResults.txt"
ECHO sCSCLIENTNAME not defined in registry, skipping tests to that value...>> "%DIAGFolder%\traceroute.txt"
)
이상하게도 다음이 실제로 작동합니다.
IF DEFINED dBASEHOME (
ECHO\
ECHO Checking network connectivity to %sCSHOSTNAME%...
::CVPING
IF EXIST "%dBASEHOME%\cvping.exe" "%dBASEHOME%\cvping" %sCSHOSTNAME%> "%DIAGFolder%\cvping.txt"
::ping
ping %sCSHOSTNAME%>> "%DIAGFolder%\PingResults.txt"
:: Traceroute
(9>"%lockFile%" tracert %sCSHOSTNAME%>> "%DIAGFolder%\traceroute.txt") | <nul >nul 2>&1 (cmd /v /q /c "%loop% ( %wait% & %rotateSpin% & (( %check% )&&( %atEnd% )||( %progress% )))")
ECHO\
ECHO Checking network connectivity to %sCSCLIENTNAME%...
IF EXIST "%dBASEHOME%\cvping.exe" "%dBASEHOME%\cvping" %sCSCLIENTNAME%> "%DIAGFolder%\cvping.txt"
ping %sCSCLIENTNAME%>> "%DIAGFolder%\PingResults.txt"
(9>"%lockFile%" tracert %sCSCLIENTNAME%>> "%DIAGFolder%\traceroute.txt") | <nul >nul 2>&1 (cmd /v /q /c "%loop% ( %wait% & %rotateSpin% & (( %check% )&&( %atEnd% )||( %progress% )))")
ECHO\
) ELSE (
ECHO No defined servers found, skipping network connectivity tests.
ECHO Traceroutes not run due to Application not appearing to be installed> "%DIAGFolder%\No_Tracert.txt"
)
아래 코드로 시작한 다음 2 개의 IF 문으로 분할하고 sCSCLIENTNAME 및 sCSHOSTNAME을 개별적으로 검사합니다 (위의 IF 문 중 하나만 넣고 다른 하나는 정확히 동일하지만 다른 변수 임). 또한 IF 문을 넣습니다. in이 cvping 라인에 있는지 확인하여 그 파일이 먼저 존재하는지 확인하십시오.
자체 포함 된 코드 샘플 ...
@ECHO OFF
cls
SET sCSCLIENTNAME=localhost
SET sCSHOSTNAME=www.google.com
SET dBASEHOME=%SystemRoot%\system32
SET DIAGFolder=%temp%\%computername%
rmdir "%DIAGFolder%" /s /q >nul 2>&1
mkdir "%DIAGFolder%" >nul 2>&1
IF EXIST sCSHOSTNAME (
ECHO\
ECHO Checking network connectivity to %sCSHOSTNAME%...
::CVPING
IF EXIST "%dBASEHOME%\cvping.exe" (
"%dBASEHOME%\cvping" %sCSHOSTNAME%> "%DIAGFolder%\cvping.txt"
) ELSE (
@ECHO CVPing test to %sCSHOSTNAME% skipped due to cvping not being found> "%DIAGFolder%\cvping.txt"
)
::ping
ping %sCSHOSTNAME%>> "%DIAGFolder%\PingResults.txt"
:: Traceroute
tracert %sCSHOSTNAME%>> "%DIAGFolder%\traceroute.txt"
) ELSE (
ECHO sCSHOSTNAME not defined in registry, skipping tests to that value...>> "%DIAGFolder%\PingResults.txt"
ECHO sCSHOSTNAME not defined in registry, skipping tests to that value...>> "%DIAGFolder%\traceroute.txt"
)
IF EXIST sCSCLIENTNAME (
ECHO Checking network connectivity to %sCSCLIENTNAME%...
::CVPING
IF EXIST "%dBASEHOME%\cvping.exe" (
"%dBASEHOME%\cvping" %sCSCLIENTNAME%> "%DIAGFolder%\cvping.txt"
) ELSE (
@ECHO CVPing test skipped due to cvping not being found>> "%DIAGFolder%\cvping.txt"
)
::ping
ping %sCSCLIENTNAME%>> "%DIAGFolder%\PingResults.txt"
:: Traceroute
tracert %sCSCLIENTNAME%>> "%DIAGFolder%\traceroute.txt"
) ELSE (
ECHO sCSCLIENTNAME not defined in registry, skipping tests to that value...>> "%DIAGFolder%\PingResults.txt"
ECHO sCSCLIENTNAME not defined in registry, skipping tests to that value...>> "%DIAGFolder%\traceroute.txt"
)
pause
"EXIST"대신 "DEFINED"를 사용하면 오류가 발생합니다.
—
BondUniverse
( was unexpected at this time.
원래 게시물에 자체 포함 된 코드 샘플을 추가하여 문제를 쉽게 볼 수있게했습니다.
—
BondUniverse
IF DEFINED sCSCLIENTNAME (
?