中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-08-03 09:53
48,038 主题排行 / 350,123 发帖 / 今日 0 篇 / 48,251 会员排行
DOS批处理 & 脚本技术(批处理室) » 无法删除文件 (有空格) 解决了
可打印版本  1,399 / 11
第1楼 huzixuan 发表于 2007-01-31 00:10
高级用户 发帖 219 积分 537 来自 芜湖
无法删除文件 (有空格) 解决了
@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 ]
第2楼 NaturalJ0 发表于 2007-01-31 00:15
银牌会员 发帖 533 积分 1,181
用引号,像这样。
"C:\Documents and Settings\J\桌面\apploc.msi"
第3楼 electronixtar 发表于 2007-01-31 00:25
铂金会员 发帖 2,672 积分 7,493
如果没记错的话

if not "%1"==""
改成
if not [%1]==[]
第4楼 NaturalJ0 发表于 2007-01-31 00:29
银牌会员 发帖 533 积分 1,181
我在上面回的不对,改成这样。
if not "%~1"==""
第5楼 huzixuan 发表于 2007-01-31 00:38
高级用户 发帖 219 积分 537 来自 芜湖
@echo off
if not [%1]==[] (
del "%1"
pause
) else (
echo.
echo 请拖入准备删除的文件到这个BAT
echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
echo.
echo 注意: 文件名中不能有空格!!
echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
echo.
echo.
pause
)

还是不行哦
第6楼 redtek 发表于 2007-01-31 01:04
金牌会员 发帖 1,147 积分 2,902
兄这条命令 del "%1" 本意中是正确的~:)

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

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



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

) 如果发现这样的问题?

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

(在桌面上运行)



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

[ Last edited by redtek on 2007-1-30 at 12:08 PM ]
第7楼 redtek 发表于 2007-01-31 01:21
金牌会员 发帖 1,147 积分 2,902
) 分析为什么 DEL ""含有空格路径的文件名或是含有空格的文件名""  会发生 “找不到文件” 的错误?

看下面例子:


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>



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


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


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 ]
第8楼 huzixuan 发表于 2007-01-31 01:27
高级用户 发帖 219 积分 537 来自 芜湖
哦!感谢 redtek 兄 的帮助.
但是看完过后,还是不晓得怎么写..........
第9楼 mygoldnet 发表于 2007-01-31 01:32
初级用户 发帖 32 积分 90
哈哈
直接试试
第10楼 NaturalJ0 发表于 2007-01-31 02:41
银牌会员 发帖 533 积分 1,181
@echo off
if not "%~1"=="" (
del %1
pause
) else (
echo.
echo 请拖入准备删除的文件到这个BAT
echo.
pause
)
第11楼 huzixuan 发表于 2007-02-08 02:10
高级用户 发帖 219 积分 537 来自 芜湖
今天无事.忽又想起这个问题.
转回又看了一遍,竟觉得是 恍然大悟,实在是感谢兄门的帮助.
尤其是 redtek 兄的详解.
第12楼 gne3 发表于 2007-02-14 01:30
高级用户 发帖 252 积分 526
顶啊,好啊
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023