windows - hvorfor jeg ikke får værdien af ​​variablen

Indlæg af Hanne Mølgaard Plasc

Problem



@ECHO OFF
setlocal EnableDelayedExpansion

call :testitout 
goto:eof

set "SERVER[1]=server1.oll.is.server1.com"
set "SERVER[2]=server2.cyl.is.anydom.com"

:testitout
FOR /L \%\%i IN (1,1,2) DO (

ping  !SERVER[\%\%i]! -n 1 -4 | find /i "TTL=">nul
if errorlevel 1 (
    echo ping \%!SERVER[\%\%i]!\% failure
    echo ping \%\%SERVER[\%\%i]\%\% failure
    echo ping \%!SERVER[\%\%i]!\% failure
    echo ping !SERVER[\%\%i]! failure

) else ( 

for /f "tokens=*" \%\%f in ('Cscript \%WINDIR\%\System32\Printing\_Admin\_Scripts\en-US\Prnmngr.vbs -l -s \%\%SERVER[\%\%i]\%\%') do (
 set str1=\%\%f
if /i not "!str1:Server name=!"=="!str1!" (
  set str1=!str1:Server name =!
  if /i not "!str1:Server name=!"=="!str1!" (
  echo | set /p="   "
  ) else (
  echo | set /p="!str1! "
  )
)

if /i not "!str1:Printer name=!"=="!str1!" (
  set str1=!str1:Printer name =!
  if /i not "!str1:Printer name=!"=="!str1!" (
  echo | set /p="   "
  ) else (
  echo | set /p="!str1! "
  )
)
if /i not "!str1:Share name=!"=="!str1!" (
  set str1=!str1:Share name =!
  if /i not "!str1:Share name=!"=="!str1!" (
  echo | set /p="   "
  ) else (
  echo | set /p="!str1! "
  )
)

if /i not "!str1:Driver name=!"=="!str1!" (
  set str1=!str1:Driver name =!
  if /i not "!str1:Driver name=!"=="!str1!" (
  echo | set /p="   "
  ) else (
  echo | set /p="!str1! "
  )
)

if /i not "!str1:Port name=!"=="!str1!" (
  set str1=!str1:Port name =!
  if /i not "!str1:Port name=!"=="!str1!" (
  echo | set /p="   "
  ) else (
  echo !str1!
  )
)

) 
)
) 


output:


ping  failure
ping \%SERVER[1]\% failure
ping  failure
ping  failure
ping  failure
ping \%SERVER[2]\% failure
ping  failure
ping  failure


Jeg er forsøgt syntaxer med ekko (\% SERVER [[\%\% i]]\%,! SERVER [[\%\% i]]! Etc), men hvorfor kan 't få værdien af ​​array-variablen ekko ..
den skal vise ping servernavn fiasko
Hjælp venligst


EDIT:
det fungerede fint med !SERVER[\%\%i]!, indtil jeg tilføjede funktionen :testitout, så jeg kan fange output i scriptet i en fil som call :testitout > output.txt, men efter at jeg tilføjede funktionen :testitout det stoppede med at arbejde.

Bedste reference


Du har dine set klausuler efter call. Skal være omvendt:


set "SERVER[1]=server1.oll.is.server1.com"
set "SERVER[2]=server2.cyl.is.anydom.com"

call :testitout
goto eof


Fordi set kun kører efter call, får du ikke nogen værdi for dine parametre.