[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
原帖由 zqz0012005 于 2009-12-10 22:36 发表
除了命令允许不加引号,比如cd、notepad等;或者引号在命令中有特殊含义,比如start的第一对引号视为标题,for /f将引号中的内容视为字符串而不是文件名。一般情况下都应该加引号才不会造成错误,不管有没有空格。
...


版主给我吃了颗定心丸!而且我要加引号的地方都不是特殊的场合,我可以放心加了!
十分感谢!

TOP

回复 7楼 的帖子

楼主“见过的不少批处理都是区别对待的”,能否举出几例?
我想很大可能是那些批处理作者水平不到位(没任何轻视的意思,只是猜测)
比如对%1的推荐用法是"%~1",这样就不用区分参数%1是否含有引号。
命令行参考:hh.exe ntcmds.chm::/ntcmds.htm
求助者请拿出诚心,别人才愿意奉献热心!
把查看手册形成条件反射!

TOP

试验了一下

下面会出错: 找不到文件, 因为有引号, 所以创建, 删除 都成功了, 最后当然找不到
  1. echo 引号与空格>"%programfiles%\~"&del "%programfiles%\~"&write "%programfiles%\~"
复制代码
而这个可成功打开文件, 只是删除没用引号造成失败, 所以成功打开文件
  1. echo 引号与空格>"%programfiles%\~"&(del %programfiles%\~||write "%programfiles%\~")
复制代码

TOP

除了命令允许不加引号,比如cd、notepad等;或者引号在命令中有特殊含义,比如start的第一对引号视为标题,for /f将引号中的内容视为字符串而不是文件名。一般情况下都应该加引号才不会造成错误,不管有没有空格。

Windows上一般都使用双引号,因为单引号在Windows上只是普通字符,没有特殊含义,只在少数命令支持时才有特殊性。
命令行参考:hh.exe ntcmds.chm::/ntcmds.htm
求助者请拿出诚心,别人才愿意奉献热心!
把查看手册形成条件反射!

TOP

原帖由 neorobin 于 2009-12-10 22:29 发表
我看应该是的, 我以前在 winRAR 的的自动安装注解中用过, 也是其中的空格总造成错误, 加了双引号括起来就好了
我用的变量是 programfiles,  通常它的值就是 C:\Program Files  有空格的


也就是说像我那个用户目录的环境变量就应该统一加引号咯,以免有 中间有空格的账号 ,
如果不管有没有空格都可以统一加空格的话,那么不知为什么见过不少批处理都是区别对待的!

TOP

回复 5楼 的帖子

我看应该是的, 我以前在 winRAR 的的自动安装注解中用过, 也是其中的空格总造成错误, 加了双引号括起来就好了
我用的变量是 programfiles,  通常它的值就是 C:\Program Files  有空格的

TOP

原帖由 bluewing009 于 2009-12-10 22:15 发表
干吗不用 那个搜索项呢??

http://bbs.bathome.net/viewthread.php?tid=408&extra=page%3D1


可是我问的是没有空格加引号会不会有问题

另外,像del /f /s /q %userprofile%\AppData\Local\Temp\
这条语句是不含空格的,假设%userprofile%中的用户名是含空格的,那么是不是应该改成
del /f /s /q "%userprofile%\AppData\Local\Temp\"

TOP

那么,像del /f /s /q %userprofile%\AppData\Local\Temp\
这条语句是不含空格的,假设%userprofile%中的用户名是含空格的,那么是不是应该改成
del /f /s /q "%userprofile%\AppData\Local\Temp\"

TOP

干吗不用 那个搜索项呢??

http://bbs.bathome.net/viewthread.php?tid=408&extra=page%3D1

TOP

也讨论一下

没空格的路径, 一般加引号不会有错,

ms-its:C:\WINDOWS\Help\ntcmds.chm::/for.htm
for /F ["usebackqParsingKeywords"] {%% | %}variable in ("filenameset") do command [CommandLineOptions]

for /F ["usebackqParsingKeywords"] {%% | %}variable in ('LiteralString') do command [CommandLineOptions]
usebackq 指定可以使用引号引用 filenameset 中的文件名称,将后面带有引号的字符串作为一个命令执行,而带有单引号的字符串是文字字符串命令。
...
通过将 Filenameset 包括在圆括号内,并且外面再带上单引号(即,'filenameset'),可以使用 for /F 对直接字符串解析逻辑。将 Filenameset 视为从某个文件输入的单行,然后接受解析。
...
如果您提供的文件名包含空格,请使用引号将文本引起来(例如,"File Name")。要使用引号,必须使用 usebackq。否则,就将引号解释为定义要解析的文字字符串。

[ 本帖最后由 neorobin 于 2009-12-10 22:17 编辑 ]

TOP

返回列表