[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文件操作] 批处理中没有空格的路径加引号会不会造成错误?

在各种操作中,有时搞不清倒底会不会有空格,所以想统一加引号,不知 没有空格的路径加引号有没有可能造成错误

还有有时见有人在变量外加双引号
'%QQ%'
有的人用单引号
'%QQ%'
有什么不同?


已解决!感谢各位

[ 本帖最后由 wxfly 于 2009-12-10 23:09 编辑 ]

回复 24楼 的帖子

可是可以,但这里高手太多,怕写得太菜,怡笑大方啊!万一被大家批斗,那就太不堪了!
不过也很想让大家批评指证,以完善之!本来想多考量、测试后再发布,但快考试了,得加紧写完,容不得过多测试、斟酌了,应该快了,说不定晚上就能贴出来。

TOP

回复 23楼 的帖子

完成之后能否把代码贴出来分享一下?
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 22楼 的帖子

版主息怒,淡定,我早看网上那些漏洞百出的批处理不惯了,用的win2008r2.没有什么好的清理软件,一气之下决定自己写个安全点的批处理

已经快写好,和已往的批处理完全不一样,去除了不少不安全的项目,删除缓存时不碰目录,保证目录属性不变,完全针对我的系统写,讨厌死网上那些把xp下的一键清理改个名当win7一键清理的行为,很多对不上号的地方。
还是自己写的好,出了错也不怨别人!反正我已经在安全方面比以前的强了百倍,改进的地方有大几十个

TOP

早就说过,蓝色部分是错的,不只是没加引号这么简单,而是这个“没加引号”错误可能造成灾难性后果。
del命令支持多个参数,即可以同时删除多个文件。文件名之间用分隔符(如空格、分号等)分开,这里文件名也可以是文件夹名,相当于删除文件夹下的所有文件(folder\*.*)
一般%userprofile%是C:\Documents and Settings\用户名
del /f /q %userprofile%\recent\*.* 就是
del /f /q C:\Documents and Settings\用户名\recent\*.*
即不提示用户就删除这3处:
C:\Documents文件夹下的所有文件,当前目录下and文件夹中的所有文件,及当前目录下Settings\用户名\recent\*.*
如果真的存在C:\Documents文件夹(documents这个名字很常用哦,所以可能性不少),其下又保存了很重要的文档,一旦运行那个del命令可就追悔莫及。
命令行参考:hh.exe ntcmds.chm::/ntcmds.htm
求助者请拿出诚心,别人才愿意奉献热心!
把查看手册形成条件反射!

TOP

回复 20楼 的帖子

看了下, 认识多了些, 看来许多临时目录和文件远比许多人想象的要重要得多, 不要随便拿它们开刀, 不然让你不爽!

TOP

回复 19楼 的帖子

除了蓝色部分是错的,还有其他根本不合理的地方:
http://www.bathome.net/viewthread.php?tid=684#pid7625
命令行参考:hh.exe ntcmds.chm::/ntcmds.htm
求助者请拿出诚心,别人才愿意奉献热心!
把查看手册形成条件反射!

TOP

回复 16楼 的帖子

这个所谓的 "一键清理垃圾" 要真是垃圾, 第一行就应该是 del %0, 哈哈, 我从不用它, 至少感觉那个效率真是太低了, 系统自身就会自动处理那些个临时文件啊什么的, 象 360 之类的软件清理比它高效多了

TOP

回复 12楼 的帖子

引号有转义作用,显然应该加在空格前面,否则空格还是作为命令与参数的分隔符。
windows下的引号不能转义回车,到行末时不管有没有配对的引号,都认为语句结束。如果在Linux下就不行。
命令行参考:hh.exe ntcmds.chm::/ntcmds.htm
求助者请拿出诚心,别人才愿意奉献热心!
把查看手册形成条件反射!

TOP

回复 15楼 的帖子

确实如此, 微软命令行肯定有好多奇怪的地方, (像我这样的菜鸟不了解, 不精通只能说是怪了, 哈哈)

但又难找到非常详细, 精确, 全面, 系统的说明资料,

只能尽量不要用那些 "旁门左道", 写最 "规矩" 的代码了, 尽管有时会显得 不"精", 不"简"

TOP

说了无数遍了,这个“古老的一键清理垃圾”本身就是个垃圾。
蓝色部分本来就是错的!
命令行参考:hh.exe ntcmds.chm::/ntcmds.htm
求助者请拿出诚心,别人才愿意奉献热心!
把查看手册形成条件反射!

TOP

原帖由 neorobin 于 2009-12-10 22:57 发表
而且很难置信的, 微软命令行对引号的位置都不是定得很死的
在命令行下, 这样是打不开的C:\Program Files\Windows NT\Accessories\wordpad.exe但这两种都可以打开C:\Pr"ogram Files\Windows NT\Accessories\wordpad. ...


刚刚才看过用一半边双引号的教程

又看到你的经验,感谢!

不过我有能配对就配对的习惯

TOP

原帖由 neorobin 于 2009-12-10 22:42 发表
下面会出错: 找不到文件, 因为有引号, 所以创建, 删除 都成功了, 最后当然找不到echo 引号与空格>"%programfiles%\~"&del "%programfiles%\~"&write "%programfiles%\~"而这个可成功打开文件, 只是删除没用引号造成失 ...

咋一看我还以为你的看法与版主不同,仔细一读原来进一步证明应该加引号

TOP

原帖由 zqz0012005 于 2009-12-10 22:49 发表
楼主“见过的不少批处理都是区别对待的”,能否举出几例?
我想很大可能是那些批处理作者水平不到位(没任何轻视的意思,只是猜测)
比如对%1的推荐用法是"%~1",这样就不用区分参数%1是否含有引号。


最常见的就是古老的一键清理
@echo off
echo 正在清理系统垃圾文件,请稍等......
del /f /s /q %systemdrive%\*.tmp
del /f /s /q %systemdrive%\*._mp
del /f /s /q %systemdrive%\*.log
del /f /s /q %systemdrive%\*.gid
del /f /s /q %systemdrive%\*.chk
del /f /s /q %systemdrive%\*.old
del /f /s /q %systemdrive%\recycled\*.*
del /f /s /q %windir%\*.bak
del /f /s /q %windir%\prefetch\*.*
rd /s /q %windir%\temp & md %windir%\temp
del /f /q %userprofile%\cookies\*.*
del /f /q %userprofile%\recent\*.*

del /f /s /q "%userprofile%\Local Settings\Temporary Internet Files\*.*"
del /f /s /q "%userprofile%\Local Settings\Temp\*.*"
del /f /s /q "%userprofile%\recent\*.*"
echo 清理系统垃圾完成!
echo. & pause

还有网上流传的番茄花园一键清理同样是这样的!

你看蓝色部分,用户目录,要是用户名是有空格的不就出错了吗?(难道系统是不是允许建立有空格的用户名的吗?)
所以我才产生了这样的疑问

TOP

而且很难置信的, 微软命令行对引号的位置都不是定得很死的
在命令行下, 这样是打不开的
  1. C:\Program Files\Windows NT\Accessories\wordpad.exe
复制代码
但这两种都可以打开
  1. C:\Pr"ogram Files\Windows NT\Accessories\wordpad.exe
复制代码
  1. C:\Program" Files\Windows NT\Accessories\wordpad.exe
复制代码
而这样就不行了
  1. C:\Program "Files\Windows NT\Accessories\wordpad.exe
复制代码
关键是引号要在第一个空格的前面, 而且一些情况下, 是不必要成对的

TOP

返回列表