中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 无法删除文件 (有空格) 解决了
作者:
标题: 无法删除文件 (有空格) 解决了 上一主题 | 下一主题
huzixuan
高级用户




积分 537
发帖 219
注册 2006-10-31
来自 芜湖
状态 离线
『楼 主』:  无法删除文件 (有空格) 解决了

@echo off
if not "%1"=="" (
del "%1"
pause
) else (
echo.
echo    请拖入准备删除的文件到这个BAT
echo  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
echo.
echo     注意: 文件名中不能有空格!!
echo  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
echo.
echo.
pause
)



帮忙~~转换一下BAT的效果~~
我写了一个BAT,把需要删除的文件拖到这个BAT文件上,就会自动删除,如果双击这个BAT文件,会有帮助。但是我想要成这样的效果:
打开这个BAT文件,有帮助显示,然后再拖待删除的文件到这个BAT窗口上,然后再删除。。。不知道怎么修改代码。。

经测试,以上代码在删除 有 空格的路径或文件名 时,会出错。
并且不知道如何才能删除 有 空格的路径或文件名 ......


@echo off
if not "%~1"=="" (
del %1
pause
) else (
echo.
echo    请拖入准备删除的文件到这个BAT
echo.
pause
)

感谢大家的帮助

[ Last edited by huzixuan on 2007-1-31 at 03:55 AM ]



江湖远
碧空长
路茫茫

    一个人漫无目的的奔跑,风,刺骨的冷....
2007-1-31 00:10
查看资料  发短消息 网志   编辑帖子  回复  引用回复
NaturalJ0
银牌会员




积分 1181
发帖 533
注册 2006-8-14
状态 离线
『第 2 楼』:  

用引号,像这样。
"C:\Documents and Settings\J\桌面\apploc.msi"

2007-1-31 00:15
查看资料  发短消息 网志   编辑帖子  回复  引用回复
electronixtar
铂金会员





积分 7493
发帖 2672
注册 2005-9-2
状态 离线
『第 3 楼』:  

如果没记错的话

if not "%1"==""
改成
if not [%1]==[]

   此帖被 +2 点积分    点击查看详情   
评分人:【 huzixuan 分数: +2  时间:2007-1-31 03:54





C:\>BLOG http://initiative.yo2.cn/
C:\>hh.exe ntcmds.chm::/ntcmds.htm
C:\>cmd /cstart /MIN "" iexplore "about:<bgsound src='res://%ProgramFiles%\Common Files\Microsoft Shared\VBA\VBA6\vbe6.dll/10/5432'>"
2007-1-31 00:25
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
NaturalJ0
银牌会员




积分 1181
发帖 533
注册 2006-8-14
状态 离线
『第 4 楼』:  

我在上面回的不对,改成这样。
if not "%~1"==""

2007-1-31 00:29
查看资料  发短消息 网志   编辑帖子  回复  引用回复
huzixuan
高级用户




积分 537
发帖 219
注册 2006-10-31
来自 芜湖
状态 离线
『第 5 楼』:  

@echo off
if not [%1]==[] (
del "%1"
pause
) else (
echo.
echo    请拖入准备删除的文件到这个BAT
echo  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
echo.
echo     注意: 文件名中不能有空格!!
echo  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
echo.
echo.
pause
)

还是不行哦



江湖远
碧空长
路茫茫

    一个人漫无目的的奔跑,风,刺骨的冷....
2007-1-31 00:38
查看资料  发短消息 网志   编辑帖子  回复  引用回复
redtek
金牌会员





积分 2902
发帖 1147
注册 2006-9-21
状态 离线
『第 6 楼』:  

兄这条命令 del "%1" 本意中是正确的~:)

但是,将一个文件托入你的批处理时,这个批处理所获得的 %1 参数(就是被你托进来的文件名)是被系统加上引号的。

所以,当你的 del "%1" 再遇上好心的 Windows 系统默认还要获得的 %1 再加一层引号,就形成了  del ""要被删除的文件名"",自然就出错了:)



关于含有空格的路径与短文件名路径以及与兄提及的相关内容,详见 For  /? 。

) 如果发现这样的问题?

  不需要经验,只需要以下面原理测试一下,就可以一应百的解决类似问题或是发现此类问题(解决问题的方法和过程):

(在桌面上运行)
@echo off

echo %1
echo "%1"
echo %~s1

pause
运行时对比一下就了解它们的特性了~:)

[ Last edited by redtek on 2007-1-30 at 12:08 PM ]

   此帖被 +2 点积分    点击查看详情   
评分人:【 huzixuan 分数: +2  时间:2007-2-8 02:06




    Redtek,一个永远在网上流浪的人……

_.,-*~'`^`'~*-,.__.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._
2007-1-31 01:04
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
redtek
金牌会员





积分 2902
发帖 1147
注册 2006-9-21
状态 离线
『第 7 楼』:  

) 分析为什么 DEL  ""含有空格路径的文件名或是含有空格的文件名""  会发生 “找不到文件” 的错误?

看下面例子:

  Quote:
C:\TEMP>DIR "ABC 123
驱动器 C 中的卷是 DISK-C
卷的序列号是 4089-CA39

C:\TEMP\ABC 123 的目录

2007-01-30  12:14    <DIR>          .
2007-01-30  12:14    <DIR>          ..
2007-01-30  12:13                 3 DEMO 123.TXT
               1 个文件              3 字节
               2 个目录  3,170,394,112 可用字节

C:\TEMP>DEL ""\TEMP\ABC 123\DEMO 123.TXT""
系统找不到指定的文件。

C:\TEMP>CD "ABC 123


(看下面:我要删的是 DEMO 123.TXT 这个文件,但由于用了双层引号括起了它们,所以出错了)


C:\TEMP\ABC 123>DEL ""DEMO 123.TXT""
找不到 C:\TEMP\ABC 123\DEMO


(上面显示找不到文件……)
(在我们理解中,被双层引号引起的文件名好象是正确的。--其实是错误的)
(在我们看来,这就象是理解中的:   < < 含有空格的文件名 > > )
(但在Windows看来, ""  左边这两个引号就是一对(不管中间有没有字符),所以右边那些含有空格的文件名或路径当然相当于没括引号了)

(即,相当于   "这个引号中没有任何字符"ABC   123"这个引号中没有任何字符" 这样的格式了)

(所以,就相当于给 Del 提供的含有空格路径或是含有空格的文件名有一部分是没有被引号括起来的这样的原理)


C:\TEMP\ABC 123>

所以,错误是这样发生的:)


根据上面出错的原理,所以下面操作是正确的:

  Quote:
C:\TEMP\ABC 123 的目录

2007-01-30  12:14    <DIR>          .
2007-01-30  12:14    <DIR>          ..
2007-01-30  12:13                 3 DEMO 123.TXT
               1 个文件              3 字节
               2 个目录  3,170,394,112 可用字节

C:\TEMP\ABC 123>del ""DEM"O 12""3".TXT

C:\TEMP\ABC 123>DIR
驱动器 C 中的卷是 DISK-C
卷的序列号是 4089-CA39

C:\TEMP\ABC 123 的目录

2007-01-30  12:23    <DIR>          .
2007-01-30  12:23    <DIR>          ..
               0 个文件              0 字节
               2 个目录  3,170,394,112 可用字节

 
 
 
 
 
 
【 正文检索主题词: 含有空格    含有空格的路径    空格路径    引号    %~sI    短名  】

[ Last edited by redtek on 2007-1-30 at 12:29 PM ]

   此帖被 +2 点积分    点击查看详情   
评分人:【 huzixuan 分数: +2  时间:2007-1-31 03:53




    Redtek,一个永远在网上流浪的人……

_.,-*~'`^`'~*-,.__.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._
2007-1-31 01:21
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
huzixuan
高级用户




积分 537
发帖 219
注册 2006-10-31
来自 芜湖
状态 离线
『第 8 楼』:  

哦!感谢 redtek 兄 的帮助.
但是看完过后,还是不晓得怎么写..........



江湖远
碧空长
路茫茫

    一个人漫无目的的奔跑,风,刺骨的冷....
2007-1-31 01:27
查看资料  发短消息 网志   编辑帖子  回复  引用回复
mygoldnet
初级用户





积分 90
发帖 32
注册 2007-1-14
状态 离线
『第 9 楼』:  

哈哈
直接试试
@echo off
del %1


2007-1-31 01:32
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
NaturalJ0
银牌会员




积分 1181
发帖 533
注册 2006-8-14
状态 离线
『第 10 楼』:  

@echo off
if not "%~1"=="" (
del %1
pause
) else (
echo.
echo    请拖入准备删除的文件到这个BAT
echo.
pause
)

   此帖被 +2 点积分    点击查看详情   
评分人:【 huzixuan 分数: +2  时间:2007-1-31 03:52


2007-1-31 02:41
查看资料  发短消息 网志   编辑帖子  回复  引用回复
huzixuan
高级用户




积分 537
发帖 219
注册 2006-10-31
来自 芜湖
状态 离线
『第 11 楼』:  

今天无事.忽又想起这个问题.
转回又看了一遍,竟觉得是 恍然大悟,实在是感谢兄门的帮助.
尤其是 redtek 兄的详解.



江湖远
碧空长
路茫茫

    一个人漫无目的的奔跑,风,刺骨的冷....
2007-2-8 02:10
查看资料  发短消息 网志   编辑帖子  回复  引用回复
gne3
高级用户

DOS学徒


积分 526
发帖 252
注册 2007-2-12
状态 离线
『第 12 楼』:  

顶啊,好啊

2007-2-14 01:30
查看资料  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: