标题: [求助]寻求参数解释: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
受教了
为什么一直以来的标准不限制文件名里面可以包含'&'字符,而只是限制 ‘/ \ : * ? " < > |’