批量循环在同一行上的if语句

时间:2017-12-08 21:53:25

标签: windows batch-file cmd

我想循环if exists行一次,以便该行连续运行,直到找到一个未使用的序列号(它必须在同一行上循环,因此它成为if语句的一部分)。有没有更好的方法来实现这一目标?

if exist "*%num%*" (set /a num+=jump) 

更新

@echo off
set /p usrname=enter folder name 
set /a num=100
set /a jump=10

if exist "*%num%*" (set /a num+=jump) 

MD %num%_%usrname%

3 个答案:

答案 0 :(得分:1)

你试图做的事情是:

WHILE IF NOT EXIST "*%num%*" SET /A num+=jump

没有这样的事情。在批处理文件中,您可以使用非常有限的可用命令进行编程。 Here is all the commands you can use.

你能做些什么才能把它变成2行呢?

@echo off
set /p usrname=enter folder name 
set /a num=100
set /a jump=10

:loop
if exist "*%num%*" (set /a num+=jump & GOTO loop)

MD %num%_%usrname%

如果你真的想缩短它,你可以使用条件执行。当目录已存在时,递增数字并转到循环。

@echo off
set /p usrname=enter folder name 
set /a num=100
set /a jump=10

:loop
MD "%num%_%usrname%" 2>nul || (set /a num+=jump & GOTO loop)

答案 1 :(得分:0)

这个怎么样?

@echo off
set /p usrname=enter folder name 
set /a num=100
set /a jump=10
:test_exist
if not exist "*%num%*" goto found_one
set /a num+=jump
goto test_exist
:found_one
MD %num%_%usrname%

技术上存在竞争条件,但只有当其他人/进程同时在文件夹中工作时才会有效。

答案 2 :(得分:0)

就个人而言,我使用

@echo off
set /p usrname=enter folder name 
set /a num=100
set /a jump=10

for /L %%a in (%num%,%jump%,2000000000) do if not exist "*%%a*" set /a num=%%a & MD %%a_%usrname%&goto done
:done