Board logo

标题: [求助]寻求参数解释:DEL /F /A /Q \\?\%1和RD /S /Q \\?\%1 [打印本页]

作者: whiteyoo     时间: 2008-11-13 11:03    标题: [求助]寻求参数解释:DEL /F /A /Q \\?\%1和RD /S /Q \\?\%1
前段时间看到这样一段代码:
DEL /F /A /Q \\?\%1 
RD /S /Q \\?\%1
前面的能看懂,只是对后面的\\?\%1不明白,似乎%1是默认为使用此批处理时输入的第一个值,请教大家能给个详细的解释,//?是什么?路径? 谢谢! ───────────────── 版务记录 ───────────────── 执行:HAT 操作:[2008-11-13]在帖子标题中增加搜索关键字;代码加code标签 说明:原标题"[求助]寻求一段代码里参数的解释"不利于论坛搜索 处罚:扣除2点积分 提示:建议阅读以下帖子 {1415}提问的智慧 {7326}论坛新手必读,所有人的基本行为准则 {22703}请不要做浮躁的人 {32667}[愤怒]那些连标题都写不清楚的人们啊,你们醒醒吧 {32825}本版严厉整顿烂帖 ───────────────── 版务记录 ───────────────── [ Last edited by HAT on 2008-11-13 at 13:56 ]

作者: 5872169     时间: 2008-11-13 13:21
?是任意路径,任何文件夹

作者: HAT     时间: 2008-11-13 13:24
Q: 为什么rd /s /q \\.\h:\autorun.inf\这条命令为什么能删除包含畸形文件夹在内的所有文件夹? \\.\理解为\\127.0.0.1\就行了,当然实际上是行不通的。 UNC的一个本地化特例。 ?\可以理解成遍历,?是统配符,表示匹配0个或1个任意字符。 .\代表本地节点,在概念上来有点像磁盘根目录,也可以说成是计算机根目录。 所以dir \\.\C:\是可以被命令行解释器识别的,更可以跨盘符的来使用绝对路径引用,例如: F:\>\\.\C:\windows\system32\cmd.exe Microsoft Windows XP [版本 5.1.2600] (C) 版权所有 1985-2001 Microsoft Corp. F:\> 使用UNC路径不会捡测路径中的保留字设备名称等,因此删除包含畸形文件夹在内的所有文件夹?。 Q: 为什么del /q /f /a \\?\%1可以删除所有文件? A: UNC路径的一个特例。UNC路径就是符合 \\servername\sharename 格式,其中 servername 是服务器名,sharename 是共享资源的名称。?是统配符,表示匹配0个或1个任意字符。使用UNC路径不会捡测路径中的保留字设备名称等,因此可以用这种方法来删除特殊文件或目录。 Q: 为什么说这样的命令非常危险? A: 如果你想删除的文件夹中包含特殊路径,可能导致整个磁盘分区的数据全部被删除。因此,如果你还不能对这个命令了如指掌,不建议使用这样的命令。

作者: purplelichen     时间: 2008-11-17 21:58
Q: 为什么说这样的命令非常危险? A: 如果你想删除的文件夹中包含特殊路径,可能导致整个磁盘分区的数据全部被删除。因此,如果你还不能对这个命令了如指掌,不建议使用这样的命令。 ---------------------------- 我想强调以上这句话,举一例: 假设h:盘是一个u盘分区,下面有一个 删除顽固文件.bat,代码为: rem --------------------------------------------- DEL /F /A /Q \\?\%1 RD /S /Q \\?\%1 rem --------------------------------------------- 同时h:盘下还有一个取名为 &1.txt 的文本文件,此时 你想用 删除顽固文件.bat 删除 &1.txt,当你把 &1.txt 拖到 删除顽固文件.bat 上后,发现h:盘下所有的文件和文件夹全 被删除了。 这是因为传递的参数中含有特殊字符"&"(这样的特殊字符还有"^"), 对这个问题感兴趣或者有解决方案的高手可以去本版的这个主题: 关于批处理可替换参数的问题

作者: radem     时间: 2008-11-19 12:17
真是非常危险,大家要慎重使用这样的命令

作者: ZJHJ     时间: 2008-11-20 22:05
Originally posted by purplelichen at 2008-11-17 21:58: Q: 为什么说这样的命令非常危险? A: 如果你想删除的文件夹中包含特殊路径,可能导致整个磁盘分区的数据全部被删除。因此,如果你还不能对这个 ...
经我实验不是带^字符和带&字符的会带来危险,而是有带^&组合字符的一定有危险. 不过以下代码不会带来危险:
@echo off
if not "%~n1"=="" if not exist "%~f1" goto AAS
if not "%~n1"=="" if exist "%~f1" goto AAS
color 7c
cls
@echo.
@echo                               文件垃圾桶
@echo.
@echo          可删除任意文件或畸形目录,可将目标文件或目录拖放垃圾桶中.
@echo.
@echo       为了用户文件安全,对带有"^&"组合字符文件名的危险删除进行避免.
@echo.
@echo                                                 制作: QQ: 251485609
@echo.
pause>nul 2>nul
echo  
goto eof

:AAS
set rt="%~n1"
if "%rt:~1,1%"=="&" goto BS
if "%rt:~1,2%"=="^&" goto BS
del /f /a /q \\?\%1 >nul 2>nul 
rd /s /q \\?\%1 >nul 2>nul
echo  
goto eof

:BS
@echo.
@echo          为了安全,不支持此类危险删除。
echo  
pause>nul 2>nul
[ Last edited by ZJHJ on 2008-11-20 at 22:10 ]

作者: menghen     时间: 2009-1-27 00:00
恩 谢谢。。。

作者: samliu     时间: 2009-2-5 22:14
学习了 还好没有在U盘中试过 要不可就真的危险了 谢谢 楼主的提醒

作者: everest79     时间: 2009-2-6 17:20
这不是因为这个UNC标识而导致的危险,是批处理自身造成的错误 你在批处理中传递H:\&1.txt 那么执行的就是 rd /s /q \\?\H:\ 1.txt del /f /a /q \\?\H:\ 1.txt &在cmd是一个特珠的连接命令 你执行rd /s /q H:\&1.txt的结果也是一样的

作者: zhengqian529     时间: 2009-2-6 19:24
受教了 为什么一直以来的标准不限制文件名里面可以包含'&'字符,而只是限制 ‘/ \ : * ? " < > |’