2017-12-08 5 views
0

if exist行を1回ループして、未使用の連続番号が見つかるまで行を継続するようにしたい(同じ行をループさせて、 ifステートメント)。これを達成するより良い方法はありますか?同じ行に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% 
+0

を使用したいですGOTOコマンドで使用するラベル。 – Squashman

+0

どのようにループを終了しますか?同じ行にループを持たない方がいいですか?if文はnumのときだけ実行されます。var –

+0

どのようにループを終了しますか? if文をループから外して、if文がループしていない場合はループを終了します。 –

答えて

1

は次のとおりです。

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

なものはありません。バッチファイルでプログラムするのに使用できるコマンドは非常に限られています。あなたが2行にそれを得るために何ができるかHere is all the commands you can use.

この

@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) 
+0

ありがとうございました。私が探していたことをありがとうございました。実際にあなたが書いた条件付き実行では、フォルダ名が変更された場合、複数のnum_バリエーションの作成が可能になります。たとえば、2つの110_(別の名前) –

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% 

技術的には競合状態ですが、他の人/プロセスが同時にフォルダ内で作業している場合にのみ問題になります。あなたがしようとしているように聞こえるは何

+0

ベンがありがとう、それを意図している状況で、私は1行に入ることを望んでいましたが、もう一度その行をループする方法はありませんか? –

0

あなたはそれはあなたが少なくともある別の行が必要になります存在しないファイルが見つかるまで実行を継続するために `IF`コマンドが必要な場合は、私が

@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 
関連する問題