CMD命令行高级教程[收集整理] - DOS讨论区 - 启动盘制作技术区 - 无忧启动论坛...

来源:百度文库 编辑:神马文学网 时间:2024/04/24 17:34:03
补充FOR tokens和 delims的应用
delims是指分割符,tokens是指选取分割后得到的字符串片断。
以下面这段代码为例:
FOR /F "eol=; tokens=2,3* delims=," %i in ("a,bc,def,ghij,jklmn") do @echo %i %j %k
其中Delims是“,”,所以"a,bc,def,ghij,klmn")被分隔成了a bc def ghij klmn这5段。
tokens=2,3* 表示取第2个片段、第3个片段以及第3个片段以后的所有片段,亦即:
%i=bc
%j=def
%k=ghij,klmn(此处“*”表示从第4个片段开始就不用再分割了,统统赋给%k)
所以如果你代码中用“tokens=*”的话,就表示不进行任何分割,直接把当前行赋给循环变量。
内容如下
hello world
thank you very
you are very good
这三行内容
for /f "tokens=*" %a in (a.txt) do @echo %a
hello world
thank you very
you are very good
"tokens=*"他可以变相的把每行前面的空格删除掉
for /f "delims=" %a in (a.txt) do @echo %a
hello world
thank you very
you are very good
实例1:
kill.txt文件中保存着需要删除的文件名,每个文件名一行,有些文件名中有空格,用如下格式只能删除文件名中没有空格的文件,怎样才能删除文件名中有空格的文件?或者怎样才能把有空格的整行数据赋予变量i,而不是只把第一列的值赋予变量i
错误:
[Copy to clipboard][ - ]
CODE:
For /f %%i in (kill.txt) DO del  %%i
这样不能删除带有空格文件名的文件.
正确:
[Copy to clipboard][ - ]
CODE:
For /F "delims=*" %%i in (kill.txt) DO del  "%%i"
(续)080808补充FOR "usebackq"的应用
对于带有空格的文件名,您需要用双引号" "将文件名括起来。为了用这种方式来使
用双引号,您还需要使用 usebackq 选项,否则,双引号" "会被理解成是用作定义某个要分析的字符串的。
例:
不能用:   for /f "tokens=*" %i in ("ABC 123.TXT") do echo %i (输出结果:ABC 123.TXT)
但上面结果并非我们意愿结果(即,要显示“ABC 123.TXT”这个文件的每一行内容)。
因为for把括引ABC 123.TXT的引号解释为括引一个字符串之用的引号了,所以for认为 "ABC 123.TXT" 是字符串,而不是文件名。
正确的是: for /f "usebackq tokens=*" %i in ("ABC 123.TXT") do echo %i
当使用 usebackq 参数时,for正确解释了括引这个含有空格文件名的引号,也正常读取出了这个        含有空格文件名的文件内容了
要在用FOR中看到在直接CMD运行的内容用usebackq 命令行要用倒引号`` (左上角数字键1左边)
例:
for /f "usebackq delims==" %%i in (`set`) do @echo %%i
for /f "delims==" %%i in ('set') do @echo %%i
usebackq        -  使用后引号(键盘上数字1左面的那个键`)。
未使用参数usebackq时:file-set表示文件,但不能含有空格
双引号表示字符串,即"string"
单引号表示执行命令,即'command'
使用参数usebackq时:file-set和"file-set"都表示文件
当文件路径或名称中有空格时,就可以用双引号括起来
单引号表示字符串,即'string'
后引号表示命令执行,即`command`
实例1:
用for 来获取带空格的路径
错误:
[Copy to clipboard][ - ]
CODE:
FOR /F %%i IN ('DIR "C:\program files\WinRAR\*.exe" /s/b') do echo %%i
%%i 只能获取 c:\program
正确:
[Copy to clipboard][ - ]
CODE:
FOR /F "usebackq tokens=3* delims=\" %%i IN (`DIR "C:\program files\WinRAR\*.exe" /s/b`) do echo %%j
请注意这里用到usebackq圆括号里面要用后引号括起来,不是单引号括起来的,执行的是命令
for  set 高级应用实例
[Copy to clipboard][ - ]
CODE:
@echo off
color f0
setlocal enabledelayedexpansion
echo.
echo.
set char=一二三四五 上山打老虎 老虎打不到 打到小松鼠 松鼠有几个 让我来数一数 数来数去 五四三二一 一二三四五
for /l %%h in (1,1,3) do (for %%i in (%char%) do (
echo %%i&echo.&ping -n 2 127.1>nul
))
pause>nul
逐字跳出效果实例
[Copy to clipboard][ - ]
CODE:
@echo off
color fc
setlocal enabledelayedexpansion
::应用到变量延迟
set str=一二三四五 上山打老虎 老虎打不到 打到小松鼠 松鼠有几个 五四三二一 一二三四五
echo.&echo.
for %%i in (%str%) do (
set char=%%i
for /l %%j in (0 1 5) do (set/p=!char:~%%j,1!nul
))
pause>nul
显示器不好使,老搞错别字,修正了.
写了个简单的可自动变色的批处理FOR应用实例,供参考
[Copy to clipboard][ - ]
CODE:
@echo off
mode con lines=40 cols=15
title=儿歌
echo.
echo    ^<打老虎^>
echo.
set bei=c b a
set jin=7 8 9
set char=一二三四五 上山打老虎 老虎打不到 回家去睡觉
:start
for %%i in (%char%) do (
echo.
echo   %%i&ping /n 0 127.1>nul
for %%l in (%bei%) do (for %%m in (%jin%) do (
color  %%l%%m&ping /n 2 127.1>nul
))
goto start
pause>nul
DOS版块好冷清,发几个学习的批处理实例.欢迎DOS爱好者参入讨论
CODE:
@echo off
color fc
setlocal enabledelayedexpansion
set str=一二三四五 上山打老虎 老虎打不到 打到小松鼠 松鼠有几个 让我数一数  数来又数去 五四三二一 一二三四五
for %%i in (%str%) do (
echo %%i&echo.&ping -n 2 127.1>nul
)
pause>nul
CODE:@echo off
color fc
setlocal enabledelayedexpansion
set str=一二三四五 上山打老虎 老虎打不到 打到小松鼠 松鼠有几个 让我数一数 数来又数去 五四三二一 一二三四五
echo.&echo.
for %%i in (%str%) do (
set char=%%i
for /l %%j in (0 1 5) do (set/p=!char:~%%j,1!nul
))
pause>nul
再来稍作修改一下,帮助理解FOR的应用  循环十遍
[Copy to clipboard][ - ]
CODE:
@echo off
color fc
setlocal enabledelayedexpansion
echo.
set str=一二三四五 上山打老虎 老虎打不到 打到小松鼠 松鼠有几个 让我来数数 数来又数去 五四三二一 一二三四五
for /l %%j in (1 1 10) do (for /l %%h in (1 1 1) do (for %%i in (%str%) do (
set/p=%%inul
))
echo.&echo.&echo.
)
pause>nul
[Copy to clipboard][ - ]
CODE:
@echo off
color f0
setlocal enabledelayedexpansion
echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo.
set a=-set b=set c=">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"for /l %%i in (0,1,78) do set/p =!a!nul
for /l %%j in (0,1,78) do set/p =!b!for /l %%k in (0,1,79) do set/p =!c:~%%k,1!nul
pause>nul
晚上搞了几次,把-换成= 一直不成功,这样看起来模拟开机进度条效果更加逼真.SET =后面不支持等号字符串,看来得用其它特殊字符替换了.
终于算是比较好的方法解决了.作了如下修改,把-替换成了═ ,═字符串的循环次数减少到38,如果观察仔细的话,和>仅相差一个字符的位置.
[Copy to clipboard][ - ]
CODE:
@echo off
color f0
setlocal enabledelayedexpansion
echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo.
set a=═set b=set c=">"for /l %%i in (0,1,38) do set/p =!a!nul
for /l %%j in (0,1,78) do set/p =!b!for /l %%k in (0,1,78) do set/p =!c1!nul
pause>nul
在这里有于时间原因,先仅对1楼帖子作个简单的注释讲解,希望能对DOS爱好者有所帮助
[Copy to clipboard][ - ]
CODE:
@echo off
color fc
setlocal enabledelayedexpansion
set str=一二三四五 上山打老虎 老虎打不到 打到小松鼠 松鼠有几个 让我数一数  数来又数去
五四三二一 一二三四五
for %%i in (%str%) do (
echo %%i&echo.&ping -n 2 127.1>nul
)
pause>nul
@echo off
:: 注释 这句不用注释了吧,关闭CMD命令回显,@是不显示echo off本句,因为echo off并不能关闭
自身.
color fc
:: 注释 这句是指定控制台输出的颜色属性,第一个F为背景色为亮白色,第二个C为前景色为淡红色
setlocal enabledelayedexpansion
:: 注释 这句是开启变量延迟,在本例中可以省略不用,不影响效果.
set str=一二三四五 上山打老虎 老虎打不到 打到小松鼠 松鼠有几个 让我数一数  数来又数去
五四三二一 一二三四五
:: 注释 这句是把一二三四五 上山打老虎......这几45个字符串赋予str,注意中间有空格
隔开的
最麻烦是下面这句FOR,先要全局看一下,从FOR开始,到DO以后被圆括号括起来的,作为一个动作来处理
,我们可以理解为是一段话,只不过里面有多个语句组成的.为了便于大家理解,在这里把他整句分开几部分来讲.DO前IN后,FOR后, DO后,三个部分
for %%i in (%str%) do (
:: 注释 这句是从DO前IN 后圆括号读取变量%str%的值,前面我们已经赋予STR=一二三四五 上山打
老虎......"45个字符串了,也就是说%str%就是这45个字符串"一二三四五 上山打
虎......",因为中间用空格隔开了,所以就分先后读取,先读取第一个空格前的第一句,也就是"一二
三四五"了,并传递给前面的FOR赋予%%i,到此时%%i变成了"一二三四五"再送给后面DO来执行.
echo %%i&echo.&ping -n 2 127.1>nul
)
:: 注释 这句前面已经讲到FOR已经赋予%%i为"一二三四五"了,那么就是并ECHO出来,也就是并把%%i显示出来,那么ECHO执行
结果就是在CMD窗口信息显示出"一二三四五"了,&echo.这句里&是一个组合命令符,显示前面结果之后,再执行&以后的命令,ECH
O.就换行的意思,&ping -n 2 127.1>nul)这句里-n是PING的参数,请求发出的信息得到响应, 2为PING的次数,127.1就是12
7.0.0.1的缩写法,PING本机,>nul 就是把PING出的结果重定向到一个空设备上,意思就是不要在CMD窗口显示.PING这一整句用到
这里整句意思就是在前面显示%%i结果后,停留两秒钟的时间(一个大致时间),如果PING的次数为3,就是显示%%i,此时为"一
二三四五"了,显示3秒钟的时间,后面还有一个反圆括号,到此时第一个循环结束,再第二次循环开始,读取%str%字符串第
二部分即第一个空格右边部分到第二空格之间"上山打老虎"这五个字,传递给FOR赋予%%i,此时%%i就变为"上山打老虎"了,
不再是"一二三四五"了,再送给DO来执行,ECHO显示出来停留2秒的时间,再开始第三次循环......直到读取最后一句也是"一二
三四五",并不是第一句的"一二三四五",要区分开来,送给DO执行显示出来停留2秒时间到后面一个反括号,至此FOR整个递
归循环过程结束,(反圆括号和前面的正圆括号是配合使用的不能缺少,否则批处理出错不能执行)继续执行最后反圆括号后面的命令
pause>nul
:: 注释 这句最简单,大家都知道pause是暂停的意思,用在句尾这里是让批处理执行完停留下来,让大家能够看得更加清楚,用>NUL就是不让请按任意键退出显示在窗口上,看起来让批处理执行窗口干净整齐一些.
bbs.wuyou.com
haiou327&YY写写
2008年08月13日中午
echo "%~dp0">tempriso.tx
type tempriso.tx | find /I "\SupperCD\PESETUP\" >nul
If not "%Errorlevel%"=="0" (Echo.&&Echo.&&Echo    请先将ISO或U盘内所有文件复制到 SupperCD 文件夹下再进行封装,按任意键退出 。。。 &&del tempriso.tx /q>nul 2>nul&PAUSE>NUL 2>NUL&&Exit)
del tempriso.tx /q>nul 2>nul
Echo.&&Echo.&&Echo       正在重新封装,请稍候 。。。
copy ..\boot\ISOLINUX.BIN ..\iso.bif /y>NUL 2>NUL
%DelATTR% grldr >NUL 2>NUL & %DelATTR% ..\*.* >NUL 2>NUL
If not Exist ..\grldr copy grldr ..\ /y>NUL 2>NUL&&del ..\AUTOEXEC.BAT /q >NUL 2>NUL&&del ..\COMMAND.COM /q >NUL 2>NUL&&del ..\IO.SYS /q >NUL 2>NUL&&del ..\MSDOS.SYS /q >NUL 2>NUL&&del ..\grub.exe /q >NUL 2>NUL
If Exist ..\ntldr del ..\ntldr /q >NUL 2>NUL
If not Exist ..\AUTORUN.INF copy Ins\AUTORUN.INF ..\ /y>NUL 2>NUL
Ins\MKISOFS -R -b iso.bif -no-emul-boot -boot-load-size 4 -V SupperCD -hide iso.bif -hide-joliet iso.bif -hide boot.catalog -hide-joliet boot.catalog -p blank -o ..\..\SupperCD.ISO ..
del ..\iso.bif /q >NUL 2>NUL
PAUSE>NUL 2>NUL
谁帮我解释下这段BAT代码
解释如下:
echo "%~dp0">tempriso.tx
把文件当前路径写入到当前目录中的tempriso.tx中,没有则建立tempriso.tx文件,用 echo %cd%>tempriso.txt也可.
type tempriso.tx | find /I "\SupperCD\PESETUP\" >nul
查找tempriso.tx文件中的\SUPUERCD\PESETUP字符串
If not "%Errorlevel%"=="0" (Echo.&&Echo.&&Echo    请先将ISO或U盘内所有文件复制到 SupperCD 文件夹下再进行封装,按任意键退出 。。。 &&del tempriso.tx /q>nul 2>nul&PAUSE>NUL 2>NUL&&Exit)
::这是个条件语句,结合上一句来分析,如果没有查找到\SupperCD\PESETUP\字符串,即在执行FINDfind /I "\SupperCD\PESETUP\"时的错误返回码非0时,在命令行提示请先将ISO或U盘内所有文件复制到 SupperCD 文件夹下再进行封装,按任意键退出 。。。当成功执行回显后用静默模式删除tempriso.tx(不提示用户是否删除的交互对话),不管是否删除tempriso.tx成功,在此执行暂停,按下任意键退出批处理.程序到结束.
del tempriso.tx /q>nul 2>nul
如果find /I "\SupperCD\PESETUP\"的错误返回码为0时,跳转到此继续执行,即找到\SUPUERCD\PESETUP字符串时,静默模式删除tempriso.tx
Echo.&&Echo.&&Echo       正在重新封装,请稍候 。。。 <<=======提示
copy ..\boot\ISOLINUX.BIN ..\iso.bif /y>NUL 2>NUL
复制当前分区..\boot目录下的ISOLINUX.BIN到..(..隐藏目录应该是在DOS下建立的)目录下并改命为iso.bif,存在iso.bif文件时则覆盖.
%DelATTR% grldr >NUL 2>NUL & %DelATTR% ..\*.* >NUL 2>NUL
本句%DelATTR%是个变量,要看批处理全句,如果把变量%DelATTR%赋于(set delattr=attrib -h -r -s)即%DelATTR% grldr=attrib -h -r -s  grldr为去掉grldr的只读隐藏系统属性,不难理解%DelATTR% ..\*.*就为去掉..目录下所有文件的只读隐藏系统属性.要看实际情况如何定义变量%DelATTR%赋予的参数
If not Exist ..\grldr copy grldr ..\ /y>NUL 2>NUL&&del ..\AUTOEXEC.BAT /q >NUL 2>NUL&&del ..\COMMAND.COM /q >NUL 2>NUL&&del ..\IO.SYS /q >NUL 2>NUL&&del ..\MSDOS.SYS /q >NUL 2>NUL&&del ..\grub.exe /q >NUL 2>NUL
这句一并分析了,如果..目录下不存在grldr文件则复制当前目录下grldr过去,成功复制完毕并删除..目录下autoexec.bat,command.com,io.sys,msdos.sys,grub.exe五个文件
If Exist ..\ntldr del ..\ntldr /q >NUL 2>NUL
如果..目录存在ntldr文件则删除ntldr
If not Exist ..\AUTORUN.INF copy Ins\AUTORUN.INF ..\ /y>NUL 2>NUL
如果..目录下不存在AUTORUN.INF文件,并复制Ins目录AUTORUN.INF文件到当前分区..目录下
Ins\MKISOFS -R -b iso.bif -no-emul-boot -boot-load-size 4 -V SupperCD -hide iso.bif -hide-joliet iso.bif -hide boot.catalog
-hide-joliet boot.catalog -p blank -o ..\..\SupperCD.ISO ..
对MKISOFS命令不熟悉,应该是制作一张可启动的光盘镜像,用iso.bif作为引导文件,文件系统为joliet,卷标为SupperCD.ISO
del ..\iso.bif /q >NUL 2>NUL  <<=======删除..目录下iso.bif文件
PAUSE>NUL 2>NUL
====================over==================
如有曲解请指正!!!
CMD命令行高级教程[收集整理] - DOS讨论区 - 启动盘制作技术区 - 无忧启动论坛... CMD命令行高级教程[收集整理] - DOS讨论区 - 启动盘制作技术区 - 无忧启动论坛... 求批量搜索并复制文件的批处理! - DOS讨论区 - 启动盘制作技术区 - 无忧启动论坛 ... CMD命令行高级教程[收集整理] 最新技术!从VHD文件启动WinPE 3.0(页 1) - PE 讨论区 - 无忧启动论坛... 成功把朗科U208(4G)优盘做成双启动(CD+ZIP),特发此贴 - USB启动区 - 启动盘制作技术区 - 无忧启动论坛 - Powered by Discuz! CMD命令行高级教程精选合编-1 DOS启动盘制作教程:基本信息 新版追梦人电脑维护工具光盘 - 启动盘相关软件区 - 无忧启动论坛 - Powered b... CMD命令行高级教程精选合编(批处理) Virtual PC里怎么从usb移动硬盘启动啊? - USB启动区 - 启动盘制作技术区... DOS命令行高级应用 用老毛桃WINPE制做启动U盘安装XP系统详解 - USB启动区 - 启动盘制作技术区 -... CMD命令行高级教程精选合编(批处理)很好很全,还有些没有看晚 [整理参考] CMD/DOS下符号的作用参考 - DOS批处理 & 脚本技术(批处理室) ... UT163系列芯片量产详细图文教程 - 『DOS及U盘量产启动』 - 『系统维护技术区』 ... DVD压缩盘制作教程 - 软件讨论区 - 娱乐联盟论坛 - E.U - Bbs.Entag... DVD压缩盘制作教程 - 软件讨论区 - 娱乐联盟论坛 - E.U - Bbs.Entag... DVD压缩盘制作教程 - 软件讨论区 - 娱乐联盟论坛 - E.U - Bbs.Entag..11. 用U盘制作DOS启动盘 用U盘制作DOS启动盘bbc 用U盘制作DOS启动盘ljlkjlkj 用U盘制作DOS启动盘* 用U盘制作DOS启动盘1