CMD - 如果否则取模

CMD - If else modulo

我正在努力将 If-Else 命令与模运算符一起使用(Windows 7 命令行)

我只想每小时使用一个命令。我的批次每分钟发出一次 ping 信号,并将 "Result" 存储在 "myIP.csv"-File

我的批次看起来像这样。

@echo off
set COUNTER=0

:AGAIN
set TimeVar=%time:~0,8%
for /f "skip=4 tokens=2" %%a in ('nslookup myip.opendns.com. resolver1.opendns.com') do (set IP=%%a)
for /f "tokens=*" %%b in ('ping -n 2 8.8.8.8') do (set ANSWER=%%b)
echo %date%,%TimeVar%,%IP%,%ANSWER:~0,-1%; >> myIP_newOne.txt
SET /A COUNTER+=1
timeout 60
goto AGAIN

它应该看起来像这样

@echo off
SET COUNTER=0
SET HOUR=60

:AGAIN
SET /a DOIT=COUNTER%%HOUR
IF %DOIT% === 0 (
    CODEBLOCK-A... 
    CODEBLOCK-B...
) ELSE (
    CODEBLOCK-A
)
timeout 60
goto AGAIN

我尝试了几种不同的方法,但我无法使它起作用。我想每小时只使用一次 "GetIP"-Command……不是每分钟。 也许我里面只有一些 "bad formatting"。不确定为什么它不起作用。

希望你明白我的意思。

这应该有效:

@ECHO OFF
SET "minute=0"

:loop
IF "%minute%"=="60" (
    COMMAND A
    COMMAND B
    SET "minute=0"
) ELSE (
    COMMAND A
)

PING -n 61 127.0.0.1>nul
SET /A "minute=%minute%+1"
GOTO loop

改用PING,它消耗的处理器时间更少(read more)。

IF %DOIT% === 0 (

应该是

IF %DOIT% == 0 (

(两个 =,不是 3)

非常感谢。 4 只眼睛看到的多于 2 只眼睛:-)

这是我的完整代码(希望现在和永远有效)

编辑: 如果你想使用 Modulo,你 需要 两个 %

这里是带模的代码

@echo off
SET /A minute=0
SET /A hour=60

:LOOP
SET TimeVar=%time:~0,8%
SET /A DOIT=minute%%hour
IF %DOIT% == 0 (
    for /f "skip=4 tokens=2" %%a in ('nslookup myip.opendns.com. resolver1.opendns.com') do (set IP=%%a)
    for /f "tokens=*" %%b in ('ping -n 2 8.8.8.8') do (set ANSWER=%%b)
    echo "MODULO WORKS"
) ELSE (
    for /f "tokens=*" %%b in ('ping -n 2 8.8.8.8') do (set ANSWER=%%b)
)
echo %date%,%TimeVar%,%IP%,%ANSWER:~0,-1%; >> myIP.csv
PING -n 61 127.0.0.1>nul
SET /A minute=%minute%+1
REM echo %minute%
goto LOOP

简单模数示例快速版

@echo off
SET /A minute=0
SET /A hour=60

:LOOP
SET /A DOIT=minute%%hour
IF %DOIT% == 0 (
    echo "CodeBlock-A & CodeBlock-B"
) ELSE (
    echo "CodeBlock-A"
)

PING -n 1 127.0.0.1>nul
SET /A minute=%minute%+1
goto LOOP