中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-08-08 14:13
47,811 主题排行 / 349,895 发帖 / 今日 0 篇 / 48,253 会员排行
DOS批处理 & 脚本技术(批处理室) » [推荐新手]谈谈批处理中引号的用法
可打印版本  1,194 / 10
第1楼 lxmxn 发表于 2008-05-10 23:45
版主 发帖 4,938 积分 11,386
[推荐新手]谈谈批处理中引号的用法
在批处理中用引号有点好处,就是可以增强代码的健壮性。大体可以用在下面这几个方面:

1、在含有空格的路径中使用引号。

文件和目录中含有空格的情况,注册表项的路径中含有空格的情况下都需要使用双引号。

比如我们要列出“C:\Program Files”目录中的文件和目录,直接用下面的命令是会提示找不到文件的:


可以用引号来包含含有空格的部分,这样就可以列出目录中的内容,一下几种情况应该都可以正常的输出内容:

或者省略最后面的引号:

注意,如果此时最后面省略引号的话,必须保证后面没有空格,否则也会报错。

还可以这样:

甚至:


只要用成对的双引号将含有空格的部分引用起来就可以了。

第3种省略最后引号的情况有点特殊,这种情况下,在命令行末尾隐含有一个引号。比如:
并非显示的是“"www.cn-dos.net"”,而是显示的

2、在if条件判断的时候使用引号。

很多同学喜欢用这样的语句来判断一个变量和一个指定的字符串是否相等:

在这里,我强烈建议大家用双引号将比较的两个对象都引起来,如果不用双引号,此时如果用户输入的是一个含有空格的字符串(比如“cn dos”),此时就会报错了,而如果此处用的是双引号将“==”两边的对象引用起来,那么就算用户输入了含有空格的字符串也不会报错了。

3、使用find命令的时候使用引号。

使用find命令的时候必须使用双引号引用搜索字符,findstr可以不用引号,但是还是建议都用引号。

find 查找文件中的字符时,搜索字符和待搜索的文件参数位置可以颠倒,比如
的效果是一样的,都是在“a.bat” 文件中查找含有字符串“echo” 的行。

4、要显示一个含有特殊字符(& ||)的字符串时使用引号。

比如要在一个字符串中查找是否含有“&” 字符时用引号:


5、在一些命令的参数中,也需要使用引号。

比如 tasklist 命令中的 /FI 的参数必须用引号括起。

搜索ProcessID小于等于1024的进程。

wmic 的 where 从句,三方工具 sed、grep、awk 的参数中,etc……


[ Last edited by lxmxn on 2008-5-11 at 01:30 AM ]
第2楼 nipo 发表于 2008-05-11 00:00
中级用户 发帖 106 积分 228
恩,归纳得很系统,谢谢!
第3楼 HAT 发表于 2008-05-11 04:36
版主 发帖 5,017 积分 9,023
很久不见版主发帖了,请教个问题:

在使用change.exe替换文本中的字符串时,如果要替换的字符串里面含有双引号该怎么办呢?比如我想把ab"c"de替换成ab'c'de
第4楼 lxmxn 发表于 2008-05-11 06:23
版主 发帖 4,938 积分 11,386
Originally posted by HAT at 2008-5-11 04:36:
很久不见版主发帖了,请教个问题:

在使用change.exe替换文本中的字符串时,如果要替换的字符串里面含有双引号该怎么办呢?比如我想把ab"c"de替换成ab'c'de

可以试试用十六进制的形式来表示所要替换的字符。
第5楼 HAT 发表于 2008-05-11 07:22
版主 发帖 5,017 积分 9,023
十六进制的方法我在帮助里面也看到了,问题是十六进制和字符一起写好像会出错:



CHANGE pgm by Bruce Guthrie, (c)2001 U.S. Dept of Commerce Revised 03/10/2001
Input file: A.TXT /-S /ATTR=-H-S-R
Flag file: None created
Temp file: C:\TEST\{CHANGE}.TMP
Output file: Overwriting input file


Change from >ab"c"?, to >ab'c'?
Other settings: /I /BINARY /-TRIM /-ZAPNULL /-VERIFY
07:06:07: Reading C:\TEST\A.TXT --> C:\TEST\{CHANGE}.TMP
Bytes read: 7 Left: 0 Changes made: 0
No changes so keeping original file as it was: 7 bytes
07:06:07: Done


是我的方法不对吗?
第6楼 bat-zw 发表于 2008-05-11 08:39
金牌会员 发帖 1,276 积分 3,105
没道理不顶:
引号真是大有学问啊,谢谢版主的归纳,确实对新手是一大帮助,我项!!!
第7楼 lxmxn 发表于 2008-05-11 09:02
版主 发帖 4,938 积分 11,386
Originally posted by HAT at 2008-5-11 07:22:
十六进制的方法我在帮助里面也看到了,问题是十六进制和字符一起写好像会出错:

change a.txt /from "ab&H22c&H22de" /to "ab&H27c&a ...

我这里直接用下面这个就成了:
第8楼 regvip2008 发表于 2008-05-11 09:14
初级用户 发帖 87 积分 187
归纳得很好!!顶一个!
if #%str% == #cn-dos (echo %%str%% = cn-dos) else (echo error)
想请教下版主,上面这句中,#起到什么作用?谢谢!
第9楼 HAT 发表于 2008-05-11 09:54
版主 发帖 5,017 积分 9,023
Originally posted by lxmxn at 2008-5-11 09:02 AM:

我这里直接用下面这个就成了:

既有空格又有双引号该怎么办呢?
这样是不行的:

change A.TXT /from "a b"c"de" /to "a b'c'de"
第10楼 lxmxn 发表于 2008-05-12 20:08
版主 发帖 4,938 积分 11,386
Re regvip2008:
这里是为了防止 %str% 的值为空的时候 if 命令报错,也可以把“#”改为别的字符。

Re HAT:
那就直接用十进制的形式吧:
第11楼 HAT 发表于 2008-05-12 20:21
版主 发帖 5,017 积分 9,023
测试成功,多谢版主指点。
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023