if 循环内的条件与批处理文件

if condition inside for loop with batch file

我有一个批处理文件,它将: 1.Count 没有。 csv 文件中的行数并将计数传递给 for 循环

@echo It will count no.of lines in file and pass the count 2for loop

P:
cd Exa-WM-Automation\Google-Adword-Task\extra-columns-deleted-so-only-keywords-csv-file
set file=P:\Exa-WM-Automation\Google-Adword-Task\adwords-filename.csv
set /a cnt=0
for /f %%a in ('type "%file%"^|find "" /v /c') do set /a cnt=%%a
echo %file% has %cnt% lines

2.Then for 循环被调用,每次执行都会调用一个宏脚本loop-google-ad-word.iim

timeout /t 5

    @echo Loop starts now

    for /L %%A in (1,1,%cnt%) do (
        @echo imacro loop is called
        c:
        start /B "" "C:\Users\webmagnet\AppData\Local\Mozilla Firefox\firefox.exe" imacros://run/?m="loop-google-ad-word.iim"
    )

现在我需要的是:

然后说 cnt = 570,

1.After 每 30 次执行它应该 运行 一个宏脚本 logout.iim & login.iim。 2.And 然后继续 for 循环。

所以基本上是 for 循环中的一个 if 条件,它将检查计数是否是 30 的倍数,然后执行 logout.iim & login.iim 否则什么都不做。

为此您需要延迟扩展,即 put

setlocal enabledelayedexpansion

在批处理文件的开头。

然后您可以在循环中创建一个新变量:

set /a mod=%%A %% 30

并检查它是否为 0:

if !mod!==0 (
  rem do something
)
rem Clear previous logout points
for /f "delims==" %%A in ('set logout[') do set "%%A="

rem Calculate new logout points
set "logoutEach=30"
for /l %%A in (%logoutEach%,%logoutEach%,%cnt%) do set "logout[%%A]=1"

for /L %%A in (1,1,%cnt%) do (
    if defined logout[%%A] (
        rem Execute logout code
    )
    ....
)

这将为必须完成注销的每个点定义一个变量。在迭代过程中,测试是否存在与当前循环关联的变量:如果变量存在,则该注销了。