(五)usebackq
该命令不是很明朗,这里只能指出使用"usebackq"时需要注意的问题,就是集合内使用双引号、单引号和后引号的情况。
1、 当集合中的文件名file-set含有空格时使用双引号。 语法: FOR /F "usebackq" %%I IN (“FileNameSet”) DO Command2 用法: 集合中的文件名或路径含有空格时,如“file”与“Name”之间有空格,此时需要用双引号将两者括起来,保持文件名或路径的完整性,并在参数后打开"usebackq"。
集合中的文件名没有空格: @echo off For /f %%a in (C:\note.txt) do echo %%a pause>nul 显示结果: 能正常读取文档note.txt里的内容。
集合中的文件名含有空格,无法读取文本note.txt里的内容: @echo off for /f %%a in (C:\Documents and Settings\Administrator\桌面\note.txt) do echo %%a pause>nul 显示结果: 系统找不到文件C:\Documents。。
即使加上双引号也只是将其作为字符串显示: @echo off for /f %%a in (“C:\Documents and Settings\Administrator\桌面\note.txt”) do echo %%a pause>nul 显示结果: C:\Documents
使用"usebackq"但不加双引号,会找不到路径: @echo off for /f "usebackq" %%a in (C:\Documents and Settings\Administrator\桌面\note.txt) do echo %%a pause>nul 显示结果: 系统找不到文件 C:\Documents。。
正确的方式:使用"usebackq"并且在集合中用双引号将含有空格的文件名包含住。 @echo off for /f "usebackq" %%a in ("C:\Documents and Settings\Administrator\桌面\note.txt") do echo %%a pause>nul 显示结果:成功显示文档note.txt里的内容。
讲解: 这里所说的是文件名,如“note.txt”,是区别于后面所说的字符串的。 我的理解,字符串是集合里直接用于屏幕显示的语句,如“我爱北京天安门”,它不是用于执行命令的,也不同于文件名。 文件名是用于间接显示字符串和打开文件或命令的,如文件名“note.txt”它本身不直接显示在屏幕上,如果直接显示就是字符串,如果它的目的是打开文本里的信息那它是文件名。 当文件名或路径中间带有空格的时候,如“Documents and Settings”,应该使用usebackq和双引号。
2、当使用usebackq处理文字字符串时使用单引号。 格式: FOR /F "usebackq" %%variable IN ('command') DO command [command-parameters] 注意: 'command'使用的是“单引号”,区别于上面(`set`)的“后引号”
例: @echo off for /f "usebackq delims=" %%a in ('Hello "AnsiPeter" Word!') do echo.%%a pause>nul 显示结果: Hello "AnsiPeter" Word! 讲解: 前面提到,字符串是用于直接屏幕显示的语句,显然“Hello "AnsiPeter" Word”被直接显示到屏幕上了。这里只是强调usebackq也可以显示字符串,而且使用单引号,不同于不用usebackq时使用的双引号。 不使用usebackq也可以显示字符串,例: @echo off for /f "delims=" %%a in ("Hello "AnsiPeter" Word!") do echo.%%a pause>nul 显示结果同上 注意:不使用usebackq显示字符串时,字符串中有空格时必须用英文状态下的双引号。更多请阅读下一节的案例“伟大的中国人民万岁 万岁 万万岁”。 3、当集合内是可执行的命令时使用“后引号”。 语法: FOR /F "usebackq" %%variable IN (`command`) DO command [command-parameters] 注意: 后引号在键盘上ESC键的下面,“~”键。英文状态下轻按一下。
例: @echo off FOR /F "usebackq delims==" %%i IN (`set`) DO @echo %%i pause 显示结果: 枚举当前环境中的环境变量名称。 讲解: `set`由于使用了usebackq和后引号,因此它表示命令执行,即括号内的`set`是FOR以外的一个命令,它在DO后面的echo之前先执行了。 命令区别于文件名和字符串的地方是,命令是批处理中设定可以作用于其他命令、文件名和字符串执行相应任务的字母和标点符号。而文件名和字符串通常是被动地接受命令的安排的。因此,命令是早先设计好的,我们只是自由地组合它们而已。
未使用usebackq和使用usebackq时集合内的符号比较:
练习: 1、请简要谈谈使用usebackq选项时集合内的标点符号该如何表达。 2、如何修改才能打开腾讯游戏?: @echo off FOR /F "usebackq delims==" %%i IN (C:\Program Files\Tencent\QQGame\QQGame.exe) DO @echo %%i pause>nul 3、请说说集合内的“欢迎访问甲兵时代的博客”是字符号、文件名,还是命令? @echo off FOR /F "usebackq delims==" %%i IN (‘欢迎访问甲兵时代的博客’) DO @echo %%i& start iexplore.exe hi.baidu.com\cjiabing pause>nul
注:此文非本人原创,属于转载!!!!
|
|