如果条件里面的循环与批处理文件

时间:2015-02-04 07:46:12

标签: batch-file

我有一个批处理文件,它将: 1.Count no。 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.然后调用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.每执行30次后,它应该运行一个宏脚本logout.iim& login.iim。 2.然后继续for循环。

因此,基本上for循环中的if条件将检查count是否是30的倍数然后执行logout.iim&amp; <{1}}没什么。

2 个答案:

答案 0 :(得分:2)

你需要延迟扩展,即放

setlocal enabledelayedexpansion

在批处理文件的开头。

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

set /a mod=%%A %% 30

并检查它是否为0:

if !mod!==0 (
  rem do something
)

答案 1 :(得分:2)

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
    )
    ....
)

这将为必须完成注销的每个点定义一个变量。在迭代期间,测试是否存在与当前循环相关的变量:如果变量存在,则是时候注销。