Enquanto loop no lote

Aqui está o que eu quero, dentro do BACKUPDIR , eu quero executar cscript /nologo c:\deletefile.vbs %BACKUPDIR% até que o número de arquivos dentro da pasta seja maior que 21 ( countfiles mantém). Aqui está o meu 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% ) 

 set /a countfiles-=%countfiles% 

Isso irá definir countfiles para 0. Eu acho que você quer diminuir por 1, então use isso:

 set /a countfiles-=1 

Não tenho certeza se o loop for funcionará, é melhor tentar algo assim:

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

Um loop while pode ser simulado em cmd.exe com:

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

Por exemplo, o seguinte script:

  @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 

saídas:

 0 1 2 3 4 5 

Para o seu caso particular, eu começaria com o seguinte. Sua descrição inicial foi um pouco confusa. Estou supondo que você deseja excluir arquivos nesse diretório até que haja 20 ou menos:

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

Foi muito útil para mim eu usei da seguinte maneira para adicionar usuário no diretório ativo:

 :: 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 
 @echo off set countfiles=10 :loop set /a countfiles -= 1 echo hi if %countfiles% GTR 0 goto loop pause 

no primeiro “set countfiles” o 10 que você vê é a quantidade que ele vai fazer o loop do eco oi é a coisa que você quer fazer loop

… estou 5 anos atrasado

Isso pode ser feito com um laço do while ... enddo .