这是我想要的,在BACKUPDIR
内,我想执行cscript /nologo c:\deletefile.vbs %BACKUPDIR%
,直到文件夹中的文件数大于21(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%
)
答案 0 :(得分:52)
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
答案 1 :(得分:45)
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
)
答案 2 :(得分:5)
@echo off
set countfiles=10
:loop
set /a countfiles -= 1
echo hi
if %countfiles% GTR 0 goto loop
pause
在第一个“设置计数文件”中,您看到的是它将循环的数量 echo hi是你要循环的东西
......我迟到了5年
答案 3 :(得分:2)
对我来说非常有用,我用以下方式在活动目录中添加用户:
:: 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
答案 4 :(得分:2)
我有一个技巧,我想出了在CLI上执行While循环的方法,在该循环中无法使用上面提供的方法。
我将其称为“直到中断”循环:
FOR /L %L (0,0,1) DO @(ECHO. Your Code Here&( ECHO.Some more code here & echo. And here) )
这是一个无限循环,对于监视非常有用,您可以按CTRL + C断开它。
但是,我们也可以通过遇到某些类型的错误(例如,像写入不存在或只读的句柄那样)来过早地使FOR循环中断
将其转换为While循环
我们添加了一个针对预期结果的测试,并在满足条件时触发以下代码:
ECHO.>&3 >NUL
> NUL是可选的,我只是不想让它输出错误。
我希望在可能的情况下匹配inLine,如您在此经过清理的命令示例中所看到的那样,该命令用于监视VNX上的LUN迁移。
for /l %L IN (0,0,1) DO @(ECHO.& ECHO.===========================================&([Command to Check VNX LUN Migration] | FINDSTR /R /C:"Source LU Name" /C:"State:" /C:"Time " || echo >&3 )&Ping -n 10 1.1.1.1 -w 1000>NUL )