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