批处理文件 FOR 循环改进
Posted
技术标签:
【中文标题】批处理文件 FOR 循环改进【英文标题】:Batch file FOR loop improvements 【发布时间】:2022-01-20 20:22:46 【问题描述】:我们在产品中有代码,用于检查文件属性(check.bat file1.bin
的结果返回 0 或 1)并在必要时重新启动用户进程(如果返回 1,则重新启动进程)。代码工作正常,但我只是想问有没有办法用 FOR 循环来改进它,因为我们确实每个循环都做同样的事情,但是 +1 到用户名、任务名称和文件名
@echo off
:cycle1
FOR /F "tokens=* USEBACKQ" %%F IN (`check.bat file1.bin`) DO (SET var=%%F )
if %var% == 1 (taskkill /f /fi "USERNAME eq user1" & SCHTASKS /RUN /TN "task1")
goto cycle2
:cycle2
FOR /F "tokens=* USEBACKQ" %%F IN (`check.bat file2.bin`) DO (SET var=%%F )
if %var% == 1 (taskkill /f /fi "USERNAME eq user2" & SCHTASKS /RUN /TN "task2")
goto cycle3
:cycle3
FOR /F "tokens=* USEBACKQ" %%F IN (`check.bat file3.bin`) DO (SET var=%%F )
if %var% == 1 (taskkill /f /fi "USERNAME eq user3" & SCHTASKS /RUN /TN "task3")
goto eof
:eof
exit /b 0
【问题讨论】:
你想无限地增加数字,还是只循环从数字 1 到 3? 【参考方案1】:您可以使用for /l
循环来增加文件编号。我还做了一些其他的小改动,让代码更简单,不需要那些代码块:
@echo off
for /l %%a in (1,1,3) do for /F "delims=" %%F IN ('check.bat "file%%a.bin"') do (
if %%F equ 1 taskkill /f /fi "USERNAME eq user%%a" & SCHTASKS /RUN /TN "task%%a"
)
但是,我确信您的用户和任务没有被称为 user1,2,3
和 task,1,2,3
,因此您需要定义您的用户和任务变量,并且仍然使用数字增量来根据 bin
文件编号选择每个用途:
@echo off & setlocal enabledelayedexpansion
set "u1=Steven"
set "u2=Maddy"
set "u3=Dan"
set "t1=taskname1"
set "t2=taskname2"
set "t3=taskname3"
for /l %%a in (1,1,3) do for /F "delims=" %%F IN ('check.bat "file%%a.bin"') do (
if %%F equ 1 taskkill /f /fi "USERNAME eq !u%%a!" & SCHTASKS /RUN /TN "!t%%a!"
)
【讨论】:
但我还没有测试过代码,但在我看来这是一个解决方案。谢谢你,@Gerhard!以上是关于批处理文件 FOR 循环改进的主要内容,如果未能解决你的问题,请参考以下文章