日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

[other] 强力删除命令

發布時間:2024/3/26 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [other] 强力删除命令 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
DEL /F /A /Q \\?\%1 RD /S /Q \\?\%1

1、以下是原始的force_delete.bat內容:

force_detele.bat

@ECHO OFF ;這個命令可以省略,用來隱藏屏幕輸出
@DEL /F /A /Q \?\%1
@RD /S /Q \?\%1

然后會什么都不顯示就把文件或者文件夾樹刪掉。。。

2、為什么呢?

DEL 刪除文件命令 /F 是強制刪除只讀屬性文件 /A 不帶屬性參數(/A:xx)時可以無視除了只讀屬性外的其他屬性(如系統屬性) /Q 是自動跳過確認
RD 刪除文件夾及文件夾樹命令 /S 是說明刪除文件夾樹(如果文件夾有文件或子文件夾沒加這個參數會提示文件夾非空而不能刪除。。) /Q 也是自動跳過確認

3、重點來了,后邊的”\?\%1”是什么意思呢?
當我們把文件(eg. test.txt 全路徑:”d:\test.txt”)拖到bat文件圖標上松手時發生了什么呢?

其實這時候等效于執行了(假設bat文件路徑為d:\gd.bat):

“d:\gd.bat “d:\test.txt”“

此時”d:\test.txt”作為gd.bat 的第一個執行命令行參數,而%1就是代表這一串字符的變量

所以實際執行的情況是:

@echo off [!enter!]

@DEL /F /A /Q \?\”d:\test.txt” [!enter!]

@RD /S /Q \?\”d:\test.txt” [!enter!]

系統找不到指定的文件

當然,這時候del已經干掉了文件,rd當然找不到,兩個命令都用就是為了適應各種情況。

4、不過為什么不直接用全路徑而是用”\?\”+全路徑呢?

這是一個特別協議的應用,這個特別協議就是UNC – Universal Naming Convention) ,中文是“通用命名規則”,具體可以查百度百科。。。

簡單說就是\hostname\resouce_or_path這樣的路徑,在winnt及之后基于其技術的系統中可以理解為資源的完整名稱。另外,完整的UNC格式要把”file:”前綴加上,不過在不同環境下有時候可以省掉有時候又必須省掉。。

5、本例中的”\?\”+完整磁盤路徑名是UNC的特殊本地化實例,其實因為在UNC中?是代表1個或0個字符的通配符,所以其實際執行的命令并不是?而是.(太小了。。英文的句號)

這個又是什么呢?簡單說就是一個對本地的引用,本地計算機根(又點根目錄的感覺)。。。但是是不是localhost或者回送地址127.0.0.1呢?
答案:不是! 簡單的說,它們是網絡根(請允許我如此粗淺的自造詞。。。),所以把?替換成localhost或者127.0.0.1會發現命令無效。

繼續上邊的,本地計算機根。。這個相當于在“我的電腦”一層,然后后邊跟著的是包括盤符的路徑。

6、好吧,UNC絕對路徑,然后又怎么樣?

這里提一個UNC絕對路徑的特別屬性,貌似從WINNT時代延續至今。。

即:采取UNC絕對路徑定位文件或者文件夾得時候,系統會無視其中的系統保留字或者設備名、帶有特殊字符保護的文件系統控制文件名稱。
所以,用這樣的技巧可以刪除一些原先無法刪除的文件或者文件夾(除開正在運行、引用的、沒有相應的刪除/更改權限的[這個尚不明原因,NTFS太厲害了?]、專門技術保護的)

7、最后。。。恩,做個WARNING或者CAUTION吧,呵呵。。。
就是。。謹慎使用
(這里要感謝purplelichen和版主HAT @ www.cn-dos.net forum 提供的例子)

在文件名包含某些特殊字符時有誤刪除的潛在危險!
設h:是一個u盤,下面有一個fdel.bat:

DEL /F /A /Q \?\%1
RD /S /Q \?\%1

同時h:下還有一個名為 &1.txt 的文本文件,此時
你想用 fdel.bat 刪除 &1.txt,當你把 &1.txt 拖到
fdel.bat 上后,h:下的所有的文件和文件夾將全部不復存在。。。

這正是特殊字符”&”(另:”^&”也有類似效果)的作用了(執行的時候變成了rd /s /q \?\”h:\&1.txt”,&的前后會并列,于是h:\被清空,然后才是定位1.txt以便刪除。。。

8、于是綜上:該bat很強大很簡潔,但是一定不要用于刪除文件名中(尤其是文件名首字符為&或^&)的文件或文件夾,否則可能造成誤刪除。

9、附:
相對安全的代碼,具體就不詳解了,主要是加入了文件名的判定:(ZJHJ @ www.cn-dos.net forum 提供,有修改,感謝~~)

以下沒有驗證過,使用也請謹慎。。。。

@echo off
if not “%~n1”==”” if not exist “%~f1” goto CHK
if not “%~n1”==”” if exist “%~f1” goto CHK
color 7c
cls
@echo
@echo 頑固文件垃圾桶
@echo
@echo 可刪除任意頑固文件或目錄,將目標文件或目錄拖放到本bat圖標上即可.
@echo
@echo 為了用戶文件安全,已對帶有”&”、”^&”組合字符文件名的危險刪除進行阻止
@echo
@echo 原作者Q#: 251485609
@pause>nul 2>nul
echo on
goto eof

:CHK
set rt=”%~n1”
if “%rt:~1,1%”==”&” goto FINE
if “%rt:~1,2%”==”^&” goto FINE
del /f /a /q \?\%1 >nul 2>nul
rd /s /q \?\%1 >nul 2>nul
echo on
goto eof

:FINE
@echo
@echo 為了安全,不支持此類危險刪除!
echo on
pause>nul 2>nul

總結

以上是生活随笔為你收集整理的[other] 强力删除命令的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。