㈠ 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
这个范例列举当前环境中的环境变量名。
㈡ WINDOWS如何用命令方式查看文件内容
打开命令提示符进行操作。
㈢ window bat读取系统事件信息,写入到一个文件中去
往往我们的电脑在使用一段时间之后,由于频繁地安装新程序,系统的启动速度越来越慢,这是由于系统在启动中加载的程序过多造成的,要想加快系统的启动速度,我们可以为电脑清理一下启动组中的程序。 1.删除config.sys和autoexec.bat中不必要的加载命令 一般情况下这两个文件中的所有命令都可以删除。删除该文件中内容后执行“开始→运行→msconfig”。在弹出的“系统配置实用程序”窗口中在“config.sys”和“autoexec.bat”两项中去掉所有选项前面的“√”即可。 2.删除“启动组”中的快捷方式 一些软件在安装过程中会自动向启动组中添加一些启动程序(如Winzip、Winamp等),如果启动组中加载的程序过多会导致系统启动的速度变慢,要想加快电脑的启动速度,我们应去掉启动组中的一些不必要的程序。右键单击开始菜单,在弹出的对话框中选择“打开”命令,随后弹出一个“C?\Documents and Settings\xxxx\「开始」菜单”窗口,依次进入“程序→启动”文件夹,删除其中所有的快捷方式图标即可。 3.卸载系统常驻程序 有些程序每次都随着系统启动,但是这些程序的快捷方式并没有出现在“开始→程序→启动”中。删除这些程序的方法是:在“系统配置实用程序”中点选“启动”选项,去掉某一项前的“√”即可。 提示:在以上操作中我们可以通过“Msconfig”程序快速对启动组进行优化,而在Windows 2000中却抛弃了这个程序,如果要想优化启动组,我们只能通过注册表来完成,非常麻烦。其实我们可以将Windows XP系统中Msconfig程序复制到Windows 2000系统的system文件夹中,随后直接运行即可。 4.关闭“自动发送错误报告”功能 大家在Window XP 中肯定有这样的经历,一旦一个程序异常终止,系统就会自动跳出一个对话框问你是否将错误发送给微软,这就是XP中的“自动发送错误”功能,它可以将错误信息发送到微软的网站。虽然微软一再信誓旦旦地表示,可以提供强大的安全保障,不会泄露个人隐私,但是发送给微软的信息中有可能包含你正在浏览或编辑的文档信息,也许这正包含了个人隐私或是公司机密,因此如果你想保障自己应有的权利,我们应该义无反顾的把这项功能关掉。方法是:单击“开始/控制面板/系统/高级”,单击“错误报告”按钮,然后选中“禁用错误报告”,下面的“但在发生严重错误时通知我”可以选中。 5.合理设置虚拟内存 对于虚拟内存文件,Windows XP为了安全默认值总是设的很大,浪费了不少的硬盘空间,其实我们完全可以将它的值设小一点。方法是:进入“控制面板/系统/高级/性能/设置/高级/虚拟内存/更改”,来到虚拟内存设置窗口,首先确定你的页面文件在哪个驱动器盘符,然后将别的盘符驱动器的页面文件全部禁用。建议你把它是设置到其他分区上,而不是默认的系统所在的分区,这样可以提高页面文件的读写速度,有利于系统的快速运行。根据微软的建议,页面文件应设为内存容量的1.5倍,但如果你的内存比较大,那它占用的空间也是很可观的,所以,建议如果内存容量在256MB以下,就设置为1.5倍,最大值和最小值一样,如果在512MB以上,设置为内存容量的一半完全可行。 6.清理垃圾文件 Windows XP在正常的使用过程中会产生扩展名为TMP、BAK、OLD之类的垃圾文件,你可以用Windows的搜索功能,查出这些文件,然后把它们删除。另外Windows XP默认会在系统失败时记录错误事件,并写入调试信息,这些文件信息我们完全可以弃之不用。方法是单击“开始/控制面板/系统/高级/启动和故障恢复”,清空“将事件写入日志文件”,在“写入调试信息”下拉框里选“无”即可。 7.更改IE临时文件夹 上网时产生的大量临时文件都存放在IE临时文件夹中,默认情况下,临时文件夹是在系统分区上,大量的临时文件会影响硬盘读写系统文件的性能。你可以更改临时文件的位置来避免出现这种情况。方法是单击“开始/控制面板/Internet选项”,在“常规”选项卡中单击“设置”按钮,在打开的窗口中单击“移动文件夹”按钮,指定一个非系统分区上的文件夹,单击“确定”后,临时文件就会移到指定的文件夹上。 8.加快菜单显示速度 选择“开始/运行”,输入regedit,弹出注册表编辑,寻找[HKEY_CURRENT_USERControlPanelDesktop],在右边的窗口中选择MenuShowDelay,按鼠标右键,选择“修改”,将其数值资料改为100或更小(默认值为:400),建议不要使用0,因为如此一来只要鼠标一不小心触碰到“所有程序”,整条菜单就会跑出来,那这乱了套。 9.加快关机速度 Windows XP的开机速度的确比以前版本的操作系统快了很多,但关机速度却慢了不少。如果你在意关机速度的快慢,可以修改几个注册表键值,就可以大大减少Windows关闭所用的时间。首先打开注册表编辑器,找到HKEY_CURRENT_USERControl PanelDesktop,里面有个名为HungAppTimeout的键,它的默认值是5000(如果不是,把它改为5000)。接下来,还有个WaitToKillAppTimeout键,把它的值改为4000(默认值是2000)。最后,找到注册表如下位置:HKEY_LOCAL_。同样地,把其中的WaitToKillServiceTimeout键值改为4000。另外,把“控制面板/管理工具/服务”中的NVidia Driver Help服务设为手动,也可以加快Windows关闭时间。 10.关闭计算机时自动结束任务 在关机的时候,有时会弹出讨厌的对话框,提醒某个程序仍在运行,是否结束任务。其实完全可以通过一点点修改让Windows自动结束这些仍在运行的程序。在注册表中打开HKEY_CURRENT_USERControl PanelDesktop 目录,把里面的AugoEndTasks键值改为1。 注意:可能会找不到AutoEndTasks键值,如果是这样的话,自己建一个串值并把它改为这个名字,值设为1就可以了。 11.关闭华生医生Dr.Watson 单击“开始/运行”,输入“drwtsn32”命令,或者“开始/所有程序/附件/系统工具/系统信息/工具/Dr Watson”,调出系统里的华生医生Dr.Watson ,只保留“转储全部线程上下文”选项,否则一旦程序出错,硬盘会读很久,并占用大量空间。如以前有此情况,请查找user.dmp文件,删除后可节省几十MB空间。 12.减少磁盘扫描等待时间 WindowsXP虽然号称稳定,但是并不是永不死机,偶尔也会给你个蓝脸,非法操作后系统会自动扫描,出现大段大段的E文,告诉你刚才系统非正常结束,现在需要检查一下是否出错,可是还要等待一段时间才开始,所以我们可以在dos下,键入“chkntfs/t:0”,表示等待时间为0秒。
㈣ windows bat批处理复制文件操作(提取同类型文件到另一个文件夹)
同学让我帮忙处理数据,但是有365天的数据也就是365个文件夹,整体文件好几十个G,但是每个文件夹中有用的文件只有几个且很小,于是就准备写一个脚本文件对其进行批处理,反正也没迅念举学过,就搜集资料搞吧,搞好了详细写给大家看嘛。
同学的文件分布是这样的:
其中有用的文件是这样的,且每个文高局件夹中都类似:
明确了需求,直接把最后源码先看,再具体一行行讲:
下面是讲解,对应每行
(1)@为不输出当前行,echo off是取消显示命令
(2)mkdir是创建文件夹
(3)for循环中,脚本语言使用%%variable做变量,要加两个百分号,变量名大小写区分,/f的话就是遍历整体里面的内容,若不加则无法遍历file,后面的dir是当前路径,加参数(只列出当前用到的),也就是只按顺序输出文件夹名:
(4)输出一下文件夹名
(亩碧5)将文件夹中符合met_ . 格式的文件复制到result文件夹中,*是通配符,可以代表任何字符。后面的参数意义为: