分享

FOR参数/F之usebackq

 人生岂可消亡 2010-07-06

(五)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时集合内的符号比较:

未使用参数usebackq时:

使用参数usebackq时:

双引号””

表示字符串,即"string"

当文件路径或名称中有空格时,用双引号括起来。

单引号’’

表示执行命令,即'command'

表示字符串,即'string'

后引号``

(未研究)

表示命令执行,即`command`

练习:

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
 
注:此文非本人原创,属于转载!!!!
 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多