57

これが私が望むものです。フォルダー内のファイルの数が21を超えるまでBACKUPDIR実行したいです(それを保持します)。これが私のコードです:cscript /nologo c:\deletefile.vbs %BACKUPDIR%countfiles

@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%
)
4

5 に答える 5

64
set /a countfiles-=%countfiles%

これにより、countfiles が 0 に設定されます。1 減らしたいと思うので、代わりにこれを使用します。

set /a countfiles-=1

for ループが機能するかどうかはわかりません。次のようなことを試してみてください。

:loop
cscript /nologo c:\deletefile.vbs %BACKUPDIR%
set /a countfiles-=1
if %countfiles% GTR 21 goto loop
于 2009-11-24T07:48:00.913 に答える
60

ループは次のwhileようにシミュレートできますcmd.exe

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

たとえば、次のスクリプトです。

    @echo off
    setlocal enableextensions enabledelayedexpansion
    set /a "x = 0"

:more_to_process
    if %x% leq 5 (
        echo %x%
        set /a "x = x + 1"
        goto :more_to_process
    )

    endlocal

出力:

0
1
2
3
4
5

あなたの特定のケースでは、次から始めます。最初の説明は少しわかりにくかったです。20 個以下になるまで、そのディレクトリ内のファイルを削除することを想定しています。

    @echo off
    set backupdir=c:\test

:more_files_to_process
    for /f %%x in ('dir %backupdir% /b ^| find /v /c "::"') do set num=%%x
    if %num% gtr 20 (
        cscript /nologo c:\deletefile.vbs %backupdir%
        goto :more_files_to_process
    )
于 2009-11-24T07:43:50.953 に答える
2

Active Directoryにユーザーを追加するために次の方法で使用したことは、私にとって非常に役に立ちました。

:: 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
于 2011-08-19T12:37:47.217 に答える