[英]echo variable misbehaving in windows batch file
我的代碼(稱它為無窮大)在ping狀態改變時開始回顯
@echo off
rem set details=""
set arg1=%1
set history="none"
set current_status="none"
Set COUNTER=0
:loop
set /A COUNTER=COUNTER+1
ping -n 1 %arg1% | find /i "reply" > log.txt
if %errorlevel% equ 0 (
set /p details=<log.txt
set current_status="yes"
echo %current_status%
)
if %errorlevel% equ 1 (
set current_status="no"
echo %current_status%
)
if %history% equ "none" (
echo %COUNTER%
echo %time%
if %current_status% equ "yes" (
echo %details%
)
if %current_status% equ "no" (
echo can't ping %arg1%
)
echo.
)
if %history% equ "yes" if %current_status% equ "no" (
echo %COUNTER%
echo %time%
echo can't ping %arg1%
echo.
)
if %history% equ "no" if %current_status% equ "yes" (
echo %COUNTER%
echo %time%
echo %details%
echo.
)
set "history=%current_status%"
rem echo history=%history%
sleep 1
goto loop
[/code]
我正在使用外部文件sleep.exe 1秒后進行檢查。
這是當我通過一個活動IP和一個非活動IP作為唯一無限地傳遞的唯一參數時的輸出
C:\Users\si>infiniteping 172.16.92.1
"none"
1
17:32:30.84
Reply from 172.16.92.1: bytes=32 time=2ms TTL=64
"yes"
"yes"
"yes"
"yes"
"yes"
^CTerminate batch job (Y/N)? y
C:\Users\si>infiniteping 172.16.92.100
"none"
1
17:33:02.58
can't ping 172.16.92.100
"no"
"no"
我不明白首先回顯“ none”而不是“ yes”或“ no”的原因?
@echo off
rem set details=""
set arg1=%1
set history="none"
set current_status="none"
Set COUNTER=0
:loop
set /A COUNTER=COUNTER+1
ping -n 1 %arg1% | find /i "reply" > log.txt
if %errorlevel% equ 0 (
set /p details=<log.txt
set current_status="yes"
)
if %errorlevel% equ 1 (
set current_status="no"
)
echo %current_status%
...
在塊語句(a parenthesised series of statements)
,將分析整個塊然后執行。 解析該塊時-在執行該塊之前-該塊內的任何%var%
都將由該變量的值替換-同樣的情況也適用於FOR ... DO (block)
。
因此,將在遇到IF
時使用%variables%
的值執行IF (something) else (somethingelse)
。
解決此問題的兩種常用方法是:1)使用setlocal enabledelayedexpansion
和使用!var!
代替%var%
訪問的改變值var
或2),以調用一個子程序使用改變的值來執行進一步的處理。
因此請注意,使用的CALL ECHO %%var%%
,其顯示的改變值var
。 顯示CALL ECHO %%errorlevel%%
,但遺憾的是隨后出現了RESETS錯誤級別。
在您的情況下, current_status
設置在括號內,因此將顯示先前的值。 進行更改后,該值將顯示在括號后,因此將顯示新值。
請參閱SO上有關delayedexpansion
任何文章
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.