❶ bat批处理中怎样用while循环
bat
常用命令
echo、@、call、pause、rem(小技巧:用::代替rem)是批处理文件最常用的几个命令,我们就从他们开始学起。
==== 注 ===========
首先, @ 不是一个命令, 而是DOS 批处理的一个特殊标记符, 仅用于屏蔽命令行回显. 下面是DOS命令行或批处理中可能会见到的一些特殊标记符:
CR(0D) 命令行结束符
Escape(1B) ANSI转义字符引导符
Space(20) 常用的参数界定符
Tab(09) ; = 不常用的参数界定符
+ COPY命令文件连接符
* ? 文件通配符
““ 字符串界定符
| 命令管道符
< > >> 文件重定向符
@ 命令行回显屏蔽符
/ 参数开关引导符
: 批处理标签引导符
% 批处理变量引导符
其次, :: 确实可以起到rem 的注释作用, 而且更简洁有效; 但有两点需要注意:
第一, 除了 :: 之外, 任何以 :开头的字符行, 在批处理中都被视作标号, 而直接忽略其后的所有内容, 只是为了与正常的标号相区别, 建议使用 goto 所无法识别的标号, 即在 :后紧跟一个非字母数字的一个特殊符号.
第二, 与rem 不同的是, ::后的字符行在执行时不会回显, 无论是否用echo on打开命令行回显状态, 因为命令解释器不认为他是一个有效的命令行, 就此点来看, rem 在某些场合下将比 :: 更为适用; 另外, rem 可以用于 config.sys 文件中.
=====================
echo 表示显示此命令后的字符
echo off 表示在此语句后所有运行的命令都不显示命令行本身
@与echo off相象,但它是加在每个命令行的最前面,表示运行时不显示这一行的命令行(只能影响当前行)。
call 调用另一个批处理文件(如果不用call而直接调用别的批处理文件,那么执行完那个批处理文件后将无法返回当前文件并执行当前文件的后续命令)。
pause 运行此句会暂停批处理的执行并在屏幕上
❷ bat循环文件如何写
编程bat文件的for循环写法:
@echo off
for /l %%a in (1,1,9) do (
for /l %%b in (1,1,9) do (
for /l %%c in (1,1,9) do (
echo %%a%%b%%c>>1.txt
)
)
)
pause
%%1是变量名,变量名只能是一个字.可为任意数字或字母;
/l是for里的一个递增参数(初始值,递增值,最终值)。
❸ .BAT文件循环运行问题!
@echooff&title创建定时计划任务By依梦琴瑶
color0a&cd/d"%~dp0"
%1echo正在请求管理员权限。。。&&mshtavbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe","/c%~s0::","","runas",1)(window.close)&&exit
::设置“358_170401”目录路径
setDirPath_1=E:APR358_170401
::设置“358_170402”目录路径
setDirPath_2=E:APR358_170402
::设置“01数据音频”目录路径
setSavePath=%USERPROFILE%Desktop识别 1数据音频
::设置“Bat播放脚本”路径
setBatPlayer=%USERPROFILE%DesktopBatPlayer.bat
::设置“Bat播放脚本”的标题
setBatPlayerTitle=Bat脚本播放音频
::设置“Bat播放脚本”中调用的播放程序进程名(如有的话)
setPlayerName=
if/inot"%~dp0"=="%AppData%YiMengQinYao"(
ifnotexist"%AppData%YiMengQinYao"md"%AppData%YiMengQinYao"
/y"%~0""%AppData%YiMengQinYaoScheleTaskCreate.bat">nul2>nul
)
ifnotexist"%AppData%YiMengQinYaoRunFile.vbs"(
ifnotexist"%AppData%YiMengQinYao"md"%AppData%YiMengQinYao"
(echo'运行文件By依梦琴瑶
echo'用法RunFile.vbs"程序""隐藏"
echo'隐藏参数0=是1=否
echo,
echoCreateObject^("WScript.Shell"^).RunWScript.Arguments^(0^),WScript.Arguments^(1^),FALSE)>"%AppData%YiMengQinYaoRunFile.vbs"
)
::创建12:00开始的计划任务
setTaskName=1200_执行拷贝文件
setDesc=每天从12:00开始至21:00结束,每隔20分钟,拷贝358_170401目录文件。
setPTMin=20
setSBMin=00
setETL=PT10H
setCommand=%AppData%YiMengQinYaoCopyFile_1.bat
(echo@echooff^&title拷贝以及删除文件By依梦琴瑶
echord/s/q"%SavePath%"
echomd"%SavePath%"
echox/s/e/y"%DirPath_1%""%SavePath%"
echoexit)>"%Command%"
call:CreateScheleTask
::创建12:01开始的计划任务
setTaskName=1201_执行播放程序
setDesc=每天从12:01开始至21:00结束,每隔10分钟,执行播放程序。
setPTMin=10
setSBMin=01
setETL=PT8M
setCommand=%BatPlayer%
call:CreateScheleTask
::创建12:08开始的计划任务
setTaskName=1208_执行结束播放
setDesc=每天从12:08开始至21:00结束,每隔10分钟,结束播放程序。
setPTMin=10
setSBMin=08
setETL=PT10H
setCommand=%AppData%YiMengQinYaoKillPlayer.bat
(echo@echooff^&title结束播放程序By依梦琴瑶
ifdefinedBatPlayerTitle(
echotaskkill.exe/f/fi"WINDOWTITLEeq%BatPlayerTitle%"
)
ifdefinedPlayerName(
echotaskkill.exe/f/im%PlayerName%
)
echoexit)>"%Command%"
call:CreateScheleTask::创建12:10开始的计划任务
setTaskName=1210_执行拷贝文件
setDesc=每天从12:10开始至21:00结束,每隔20分钟,拷贝358_170401目录文件。
setPTMin=20
setSBMin=10
setETL=PT10H
setCommand=%AppData%YiMengQinYaoCopyFile_2.bat
(echo@echooff^&title拷贝以及删除文件By依梦琴瑶
echord/s/q"%SavePath%"
echomd"%SavePath%"
echox/s/e/y"%DirPath_2%""%SavePath%"
echoexit)>"%Command%"
call:CreateScheleTask
::创建计划任务创建任务
setTaskName=创建每天计划任务
setDesc=每天定时创建用于当天12:00开始的计划任务。
setCommand=%AppData%YiMengQinYaoScheleTaskCreate.batremrem
%2call:CreateScheleTaskToTask
del/f/qScheleTask.xml>nul2>nul
%2echo请按任意键退出。&pause>nul
exit
:CreateScheleTask
echo正在创建计划任务:"%TaskName%"(会强制覆盖同名任务)...&echo,
setNowDate=%date:~,10%
setNowDate=%NowDate:/=-%
setNowTime=%time:~,8%
setNowTime=%NowTime:=0%
(echo^<?xmlversion="1.0"encoding="UTF-16"?^>
echo^<Taskversion="1.2"xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task"^>
echo^<RegistrationInfo^>
echo^<Date^>%NowDate%T%NowTime%^</Date^>
echo^<Author^>%USERNAME%^</Author^>
echo^<Description^>%Desc%^</Description^>
echo^</RegistrationInfo^>
echo^<Triggers^>
echo^<CalendarTrigger^>
echo^<Repetition^>
echo^<Interval^>PT%PTMin%M^</Interval^>
echo^<StopAtDurationEnd^>false^</StopAtDurationEnd^>
echo^</Repetition^>
echo^<StartBoundary^>%NowDate%T12:%SBMin%:00^</StartBoundary^>
echo^<EndBoundary^>%NowDate%T21:00:00^</EndBoundary^>
echo^<Enabled^>true^</Enabled^>
echo^<ScheleByDay^>
echo^<DaysInterval^>1^</DaysInterval^>
echo^</ScheleByDay^>
echo^</CalendarTrigger^>
echo^</Triggers^>
echo^<Principals^>
echo^<Principalid="Author"^>
echo^<UserId^>%COMPUTERNAME%\%USERNAME%^</UserId^>
echo^<LogonType^>InteractiveToken^</LogonType^>
echo^<RunLevel^>HighestAvailable^</RunLevel^>
echo^</Principal^>
echo^</Principals^>
echo^<Settings^>
echo^<MultipleInstancesPolicy^>IgnoreNew^</MultipleInstancesPolicy^>
echo^<DisallowStartIfOnBatteries^>false^</DisallowStartIfOnBatteries^>
echo^<StopIfGoingOnBatteries^>true^</StopIfGoingOnBatteries^>
echo^<AllowHardTerminate^>true^</AllowHardTerminate^>
echo^<StartWhenAvailable^>false^</StartWhenAvailable^>
echo^<RunOnlyIfNetworkAvailable^>false^</RunOnlyIfNetworkAvailable^>
echo^<IdleSettings^>
echo^<StopOnIdleEnd^>true^</StopOnIdleEnd^>
echo^<RestartOnIdle^>false^</RestartOnIdle^>
echo^</IdleSettings^>
echo^<AllowStartOnDemand^>true^</AllowStartOnDemand^>
echo^<Enabled^>true^</Enabled^>
echo^<Hidden^>false^</Hidden^>
echo^<RunOnlyIfIdle^>false^</RunOnlyIfIdle^>
echo^<WakeToRun^>false^</WakeToRun^>
echo^<ExecutionTimeLimit^>%ETL%^</ExecutionTimeLimit^>
echo^<DeleteExpiredTaskAfter^>PT0S^</DeleteExpiredTaskAfter^>
echo^<Priority^>7^</Priority^>
echo^</Settings^>
echo^<ActionsContext="Author"^>
echo^<Exec^>
echo^<Command^>"%AppData%YiMengQinYaoRunFile.vbs"^</Command^>
echo^<Arguments^>"%Command%"0^</Arguments^>
echo^</Exec^>
echo^</Actions^>
echo^</Task^>)>ScheleTask.xml
schtasks/Create/TN"%TaskName%"/XMLScheleTask.xml/F&echo,
goto:eof
:CreateScheleTaskToTask
echo正在创建计划任务:"%TaskName%"(会强制覆盖同名任务)...&echo,
setNowDate=%date:~,10%
setNowDate=%NowDate:/=-%
setNowTime=%time:~,8%
setNowTime=%NowTime:=0%
(echo^<?xmlversion="1.0"encoding="UTF-16"?^>
echo^<Taskversion="1.2"xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task"^>
echo^<RegistrationInfo^>
echo^<Date^>%NowDate%T%NowTime%^</Date^>
echo^<Author^>%USERNAME%^</Author^>
echo^<Description^>%Desc%^</Description^>
echo^</RegistrationInfo^>
echo^<Triggers^>
echo^<CalendarTrigger^>
echo^<StartBoundary^>%NowDate%T11:50:00^</StartBoundary^>
echo^<Enabled^>true^</Enabled^>
echo^<ScheleByDay^>
echo^<DaysInterval^>1^</DaysInterval^>
echo^</ScheleByDay^>
echo^</CalendarTrigger^>
echo^</Triggers^>
echo^<Principals^>
echo^<Principalid="Author"^>
echo^<UserId^>%COMPUTERNAME%\%USERNAME%^</UserId^>
echo^<LogonType^>InteractiveToken^</LogonType^>
echo^<RunLevel^>HighestAvailable^</RunLevel^>
echo^</Principal^>
echo^</Principals^>
echo^<Settings^>
echo^<MultipleInstancesPolicy^>IgnoreNew^</MultipleInstancesPolicy^>
echo^<DisallowStartIfOnBatteries^>false^</DisallowStartIfOnBatteries^>
echo^<StopIfGoingOnBatteries^>true^</StopIfGoingOnBatteries^>
echo^<AllowHardTerminate^>true^</AllowHardTerminate^>
echo^<StartWhenAvailable^>true^</StartWhenAvailable^>
echo^<RunOnlyIfNetworkAvailable^>false^</RunOnlyIfNetworkAvailable^>
echo^<IdleSettings^>
echo^<StopOnIdleEnd^>true^</StopOnIdleEnd^>
echo^<RestartOnIdle^>false^</RestartOnIdle^>
echo^</IdleSettings^>
echo^<AllowStartOnDemand^>true^</AllowStartOnDemand^>
echo^<Enabled^>true^</Enabled^>
echo^<Hidden^>false^</Hidden^>
echo^<RunOnlyIfIdle^>false^</RunOnlyIfIdle^>
echo^<WakeToRun^>false^</WakeToRun^>
echo^<ExecutionTimeLimit^>PT12H^</ExecutionTimeLimit^>
echo^<Priority^>7^</Priority^>
echo^</Settings^>
echo^<ActionsContext="Author"^>
echo^<Exec^>
echo^<Command^>"%AppData%YiMengQinYaoRunFile.vbs"^</Command^>
echo^<Arguments^>"%Command%"0^</Arguments^>
echo^</Exec^>
echo^</Actions^>
echo^</Task^>)>ScheleTask.xml
schtasks/Create/TN"%TaskName%"/XMLScheleTask.xml/F&echo,
goto:eof
此脚本并非用来执行您那些要求的,而是把您的要求以计划任务的形式,创建到计划任务程序中去,然后计划任务就会按照这些设定的计划进行执行。所以这个脚本只需执行一次,之后脚本每天都会自动按照预定的计划执行。
关于“Bat播放脚本(set BatPlayer=)”,这个请自行更改成您现有的bat脚本程序路径。
关于“Bat播放脚本标题(set BatPlayerTitle=)”,就是您“Bat播放脚本”中title命令显示的标题名,这个主要用于终止播放时判断相关进程。
关于“Bat播放脚本调用进程名(set PlayerName=)”,就是您“Bat播放脚本”中用来播放音频文件的程序名,比如TTPlayer.exe,这个主要用于终止播放时判断相关进程。不过这个属于选填,如果没有可以留空。
❹ bat如何循环执行一条命令
:start
@echoC:UsersadminDesktop
@gotostart
此为死循环,你可以把@echo C:UsersadminDesktop换成你想要的命令
❺ 批处理BAT怎么用循环输出字符串
你好!
下面代码可以实现你要的功能:
@echooff
for/l%%iin(100001,1,100099)do(
setx=%%i
echo!x:~-5!>>a.txt
)
pause
>a.txt是覆盖内容
>>a.txt是追加内容
希望对你有帮助!
❻ 如何让bat脚本循环执行
让bat脚本循环执行有以下两种方法:
第一、可以直接加个%0,即执行本身,实现循环。
第二、用goto命令,去到你要重复的开头,如果要限制次数,可以先set 一个值,循环一次减1,条件命令到0退出,实现循环。
❼ bat 如何循环一段命令 goto或for都行
让bat脚本循环执行有以下两种方法:
第一、可以直接加个%0,即执行本身,实现循环。
第二、用goto命令,去到要重复的开头,如果要限制次数,可以先set 一个值,循环一次减1,条件命令到0退出,实现循环。
(7)bat命令循环扩展阅读:
goto语句一般格式如下:
goto 语句标号; 其中语句标号是按标识符规定书写的符号, 放在某一语句行的前面,标号后加冒号(:)。语句标号起标识语句的作用,与goto 语句配合使用。
如: label: i++;
loop: while(x<7);
goto loop;
goto语句的语义是改变程序流向, 转去执行语句标号所标识的语句。goto语句通常与条件语句配合使用。可用来实现条件转移, 构成循环,跳出循环体等功能。
❽ BAT批处理文件for循环的基本格式方法
你还在为不知道BAT批处理文件for循环的基本格式方法而烦恼么?接下来是我为大家收集的BAT批处理文件for循环的基本格式方法教程,希望能帮到大家。
BAT批处理文件for循环的基本格式方法
一,基本格式
对一组文件中的每一个文件执行某个特定命令。
FOR %variable IN (set) DO command [command-parameters]
%variable 指定一个单一字母可替换的参数。
(set) 指定一个或一组文件。可以使用通配符。
command 指定对每个文件执行的命令。
command-parameters
为特定命令指定参数或命令行开关。
在批处理程序中使用 FOR 命令时,指定变量请使用 %%variable
而不要用 %variable。变量名称是区分大小写的,所以 %i 不同于 %I.
参数:for有4个参数 /d /l /r /f 他们的作用在下面的例子中讲解
二,参数/d
FOR /D %variable IN (set) DO command [command-parameters]
如果集中包含通配符,则指定与目录名匹配,而不与文件名匹配。
例如:
@echo off
for /d %%i in (c:*) do echo %%i
pause
运行后, 会把c盘根目录下的全部目录打印出来, 不会打印文件
例子:
@echo off
for /d %%i in (???) do echo %%i
pause
会把当前目录下有目录名字只有1-3个字母的,就会显示出来,没有就不显示了
* 号表示任意N个字符,而?只表示任意一个字符
三,参数/r
FOR /R [[drive:]path] %variable IN (set) DO command [command-parameters]
检查以 [drive:]path 为根的目录树,指向每个目录中的 FOR 语句。
如果在 /R 后没有指定目录规范,则使用当前目录。如果集仅为一个单点(.)字符,
则枚举该目录树。
/r 可以把当前或者你指定路径下的文件名全部读取,注意是文件名字,
注意2点:
1.set中的文件名如果含有通配符(?或*),则列举/r参数指定的目录及其下面的所有子目录中和set相符合的所有文件,无相符文件的目录则不列举
2.相反,如果set中为具体文件名,不含通配符,则列举该目录树,而不管set中的指定文件是否存在
例子:
@echo off
for /r d: %%i in (*.exe) do echo %%i
pause
将把d盘里以exe结尾的文件全部列出来
@echo off
for /r d: %%i in (boot.ini) do echo %%i
pause
列举d盘中存在boot.ini文件的目录
四。
FOR /L %variable IN (start,step,end) DO command [command-parameters]
该集表示以增量形式从开始到结束的一个数字序列。因此,(1,1,5)将产生序列
1 2 3 4 5,(5,-1,1)将产生序列(5 4 3 2 1)
start 为起始值,stup为增量,end结束值,
例子:
@echo off
for /l %%i in (1,1,5) do echo %%i
pause
将会列出12345 这几个值
@echo off
for /l %%i in (1,1,5) do start cmd
pause
会打开5个cmd的窗口
五,参数/F
迭代及文件解析
使用文件解析来处理命令输出,字符串及文件内容,使用迭代变量定义要检查的内容或字符串,并使用各种option选项来进一步
修改解析方式,使用options令牌选项指定那些令牌应该作为迭代变量传递
注意:在没有使用令牌选项时,/f将只检查第一个令牌
文件解析过程包括读取输出,字符串或文件内容,将其分成独立的文本行以及在将每行解析成零个或更多个令牌
让后通过设置为令牌的迭代变量值,调用for循环,默认情况下,/f传递每个文件每一行的第一个空白分隔符,跳过空行
命令格式:
FOR /F ["options"] %variable IN (file-set) DO command [command-parameters]
FOR /F ["options"] %variable IN ("string") DO command [command-parameters]
FOR /F ["options"] %variable IN ('command') DO command [command-parameters]
带引号的字符串“options”包括一个或多个
指定不同解析选项的关键字,这些关键字为:
eol=c 指定一个注释字符的结尾(就一个)
skip=n 指在文件开始时忽略的行数
delims=xxx 指定分隔符集,这个替换了空格和跳格键的默认分隔符集
tokens=x,y,m-n 指每行的哪一个符合被传递到每个迭代的for本身,这回倒是额外名称的分配,m-n格式为一个范围
通过nth符号指定mth,如果符号字符串中的最好一个字符星号,那么额外的变量将在最好一个符号解析之后分配并接受行的保留文本,
经过测试,该参数最多只能区分31个字段
usebackq 指定新语法已在下类情况中使用:
在作为命令执行一个后引号的字符串并且一个单
引号字符为文字字符串命令并允许在 file-set
中使用双引号扩起文件名称。
例子:
@echo off
rem 首先建立临时文件,用完删除>test.txt
echo ;注释行,这个是临时文件,用完删除>text.txt
echo 11 12 13 14 15 16 >> test.txt
echo 21,22,23,24,25,26 >> test.txt
echo 31-32-33-34-35-36 >> test.txt
for /F "eol=; tokens=1,3* delims=,- " %%i in (test.txt) do echo %%i %%j %%k
pause
del text.txt
运行......
解释:
eol=; 分号开头的行尾注释行
tokens=1,3- 将每行第1段,第3段和剩余地段分别赋予变量%%i,%%j,%%k
delims=,- (减号后有一空格)以逗号减号和空格为分隔符,空格必须放在最后
例子:
@echo off
for /f "skip=4 delims=" %%i in ('net user') do echo %%i
pause
这样你本机全部账号名字就出来了把括号内的内容用两个单引号起来就表示那个当命令执行,for会返回命令的没行结果,加那个"delims=" 是为了让空格的行能正行显示出来,不加就默认只显示空格左边一列,应为默认的分隔符为空格或叫跳格键。
看了“BAT批处理文件for循环的基本格式方法”还想看:
1. 批处理文件
2. bat命令怎么批处理
3. bat批处理命令
4. 常用的文件格式集锦
5. bat批处理文件显示乱码怎么办
❾ bat 如何循环一段命令 goto或for都行
循环一段命令可以用循环语句。
用Do循环重复执行一个语句块,且重复次数不定。Do…Loop是以计算数值为条件以决定是否继续执行。条件必须是一个数值或者值为True或False的表达式。
在下面的Do…Loop循环中,只要条件为真就执行循环。
Do
While
循环条件
循环语句块
Loop
当Visual
Basic执行到这个Do循环时首先测试条件,条件为假时,跳过所有语句。如果条件为真,Visual
Basic就会执行语句,退回到Do
While语句测试条件。只要条件为真,循环可以随意执行几次。如果条件一开始便为假,则不会执行语句。
还有一种Do…Loop语句,是先执行语句,每次执行之后测试条件,循环中的语句至少执行一次。
Do
循环语句块
Loop
while
循环条件。
❿ bat命令执行循环判断功能
@echooff
setDir=C:Releaseftpup
setFiles=1.jpg,2.jpg,3.jpg
cd/d"%Dir%"
:Loop
set"Num=0"&set"AllNum="&set"Old="
for/f"delims="%%ain('dir/ad/o-d/b')doset"Old=%%~a"
ifdefinedOld(
for%%ain(%Files%)do(
set/aAllNum+=1
ifexist"%Old%\%%~a"set/aNum+=1
)
)
ifnotdefinedAllNumgotoLoop
ifnot%Num%equ%AllNum%gotoLoop
(echo%Old%)>..a.txt
pause