CMD - 如果不是模

时间:2018-02-07 14:06:21

标签: batch-file if-statement cmd windows-7 modulo

我正在使用If-Else命令和Modulo-Operator(Windows 7 CommandLine)

我想每小时只使用一个命令。我的批处理每分钟拨出一次,并将“结果”存储在“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 ...而不是每分钟。 Perhabs我只是有一些“糟糕的格式”。不知道为什么它不起作用。

我希望你理解我的意思。

3 个答案:

答案 0 :(得分:0)

IF %DOIT% === 0 (

应该是

IF %DOIT% == 0 (

(两个=,而不是3)

答案 1 :(得分:0)

非常感谢。 4只眼睛超过2只: - )

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

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

HERE是代码模块

@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

Simple Modulo-Example 快速版

@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

答案 2 :(得分:-1)

这应该有效:

@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)。