tagspaces tag files and windows batch-file for-loop while-loop

windows - tag - Mientras bucle en lote



tag folders (5)

Fue muy útil para mí lo he usado de la siguiente manera para agregar usuarios en el directorio activo:

:: 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

Esto es lo que quiero, dentro de BACKUPDIR , quiero ejecutar cscript /nologo c:/deletefile.vbs %BACKUPDIR% hasta que el número de archivos dentro de la carpeta sea mayor que 21 (los countfiles lo tienen). Aquí está mi código:

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


Se puede hacer con un do while ... enddo loop.


Un ciclo while se puede simular en cmd.exe con:

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

Por ejemplo, el siguiente script:

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

productos:

0 1 2 3 4 5

Para su caso particular, comenzaría con lo siguiente. Tu descripción inicial fue un poco confusa. Supongo que desea eliminar archivos en ese directorio hasta que haya 20 o menos:

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


@echo off set countfiles=10 :loop set /a countfiles -= 1 echo hi if %countfiles% GTR 0 goto loop pause

en el primer "conjunto de archivos de conteo", el 10 que ve es la cantidad en la que se repetirá el eco, el hola es lo que desea repetir

... tengo 5 años de retraso


set /a countfiles-=%countfiles%

Esto establecerá los archivos de conteo en 0. Creo que quieres disminuirlo en 1, así que utiliza esto en su lugar:

set /a countfiles-=1

No estoy seguro de si el bucle for funcionará, mejor intente algo como esto:

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