Board logo

标题: 无法删除文件 (有空格) 解决了 [打印本页]

作者: huzixuan     时间: 2007-1-31 00:10    标题: 无法删除文件 (有空格) 解决了

@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 ]
作者: NaturalJ0     时间: 2007-1-31 00:15
用引号,像这样。
"C:\Documents and Settings\J\桌面\apploc.msi"
作者: electronixtar     时间: 2007-1-31 00:25
如果没记错的话

if not "%1"==""
改成
if not [%1]==[]
作者: NaturalJ0     时间: 2007-1-31 00:29
我在上面回的不对,改成这样。
if not "%~1"==""
作者: huzixuan     时间: 2007-1-31 00:38
@echo off
if not [%1]==[] (
del "%1"
pause
) else (
echo.
echo    请拖入准备删除的文件到这个BAT
echo  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
echo.
echo     注意: 文件名中不能有空格!!
echo  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
echo.
echo.
pause
)

还是不行哦
作者: redtek     时间: 2007-1-31 01:04
兄这条命令 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 ]
作者: redtek     时间: 2007-1-31 01:21
) 分析为什么 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 ]
作者: huzixuan     时间: 2007-1-31 01:27
哦!感谢 redtek 兄 的帮助.
但是看完过后,还是不晓得怎么写..........
作者: mygoldnet     时间: 2007-1-31 01:32
哈哈
直接试试
@echo off
del %1

作者: NaturalJ0     时间: 2007-1-31 02:41
@echo off
if not "%~1"=="" (
del %1
pause
) else (
echo.
echo    请拖入准备删除的文件到这个BAT
echo.
pause
)
作者: huzixuan     时间: 2007-2-8 02:10
今天无事.忽又想起这个问题.
转回又看了一遍,竟觉得是 恍然大悟,实在是感谢兄门的帮助.
尤其是 redtek 兄的详解.
作者: gne3     时间: 2007-2-14 01:30
顶啊,好啊