2009-11-24 23 views
31

ここではBACKUPDIRの中に、cscript /nologo c:\deletefile.vbs %BACKUPDIR%を実行して、フォルダ内のファイル数が21を超えるまで(countfiles)、実行したいと考えています。例えばwhileループのバッチ

:while1 
if %countfiles% leq 21 (
    :: change countfile here 
    goto :while1 
) 

、次のスクリプト:whileループはとcmd.exeでシミュレートすることができ

@echo off 
SET BACKUPDIR=C:\test 
for /f %%x in ('dir %BACKUPDIR% /b ^| find /v /c "::"') do set countfiles=%%x 

for %countfiles% GTR 21 (
cscript /nologo c:\deletefile.vbs %BACKUPDIR% 
set /a countfiles-=%countfiles% 
) 
+1

あなたの質問は何ですか?このバッチは機能していますか、それが壊れているという問題ですか? – schnaader

答えて

41
set /a countfiles-=%countfiles% 

をこれは、私はあなたが1で、それを減らすためにしたいと思います0にcountfilesを設定し、その代わりにこれを使用します:

set /a countfiles-=1 

私はループのために、このような何かをしようと、より良い、動作するかどうか分からない:

:loop 
cscript /nologo c:\deletefile.vbs %BACKUPDIR% 
set /a countfiles-=1 
if %countfiles% GTR 21 goto loop 
37

@echo off 
setlocal enableextensions enabledelayedexpansion 
set /a "x = 0" 
:while1 
    if %x% leq 5 (
     echo %x% 
     set /a "x = x + 1" 
     goto :while1 
    ) 
endlocal 

出力:

0 
1 
2 
3 
4 
5 
ここに私のコードです

具体的なケースについては、次のように説明します。あなたの最初の説明はちょっと混乱していました。 20以下がありますまで、私はあなたがそのディレクトリ内のファイルを削除すると仮定しています:

@echo off 
set backupdir=c:\test 

:loop1 
for /f %%x in ('dir %backupdir% /b ^| find /v /c "::"') do set countfiles=%%x 
if %countfiles% gtr 20 (
    cscript /nologo c:\deletefile.vbs %backupdir% 
    goto :loop1 
) 
+0

あなたが言っていることは、無限ループに入るという問題ですが、ループ内でcountfiles = countfiles-1などのループ内で減らす必要がありますが、うまくいかないようです私。 – Hellnar

+0

@Hellnar、countfilesは、それを計算するforステートメントがループ内*であるという事実によって、再び実数値に設定されます。あなたのVBScriptファイルがいくつのファイルを削除していたのかがはっきりしていないので、私はそうしました。 – paxdiablo

+0

無限ループの場合は、 "@echo off"を ":: @ echo off"に置き換えてスクリプトを再実行してください。コマンドが実行されるとコマンドが出力され、countfilesがどのように設定されているのかがわかります。 – paxdiablo

2

それは非常に有用でした私のために私は、Active Directoryでユーザーを追加するには、以下のように使用している:あなたが見る10は、それがループ エコーする量がHiである「countfilesを設定し、」最初に

:: This file is used to automatically add list of user to activedirectory 
:: First ask for username,pwd,dc details and run in loop 
:: dsadd user cn=jai,cn=users,dc=mandrac,dc=com -pwd `1q`1q`1q`1q 

@echo off 
setlocal enableextensions enabledelayedexpansion 
set /a "x = 1" 
set /p lent="Enter how many Users you want to create : " 
set /p Uname="Enter the user name which will be rotated with number ex:ram then ram1 ..etc : " 
set /p DcName="Enter the DC name ex:mandrac : " 
set /p Paswd="Enter the password you want to give to all the users : " 

cls 

:while1 

if %x% leq %lent% (

    dsadd user cn=%Uname%%x%,cn=users,dc=%DcName%,dc=com -pwd %Paswd% 
    echo User %Uname%%x% with DC %DcName% is created 
    set /a "x = x + 1" 
    goto :while1 
) 

endlocal 
1
@echo off 

set countfiles=10 

:loop 

set /a countfiles -= 1 

echo hi 

if %countfiles% GTR 0 goto loop 

pause 

をあなたがループ

にしたい事は...私はそれがdo while ... enddoループで行うことができ、5年後半

-4

です。

+0

Googleはこの構文がFORTRAN/FoxProのような言語で見つかったと示唆していますか? – mwfearnley