有次解壓縮檔案後,要執行該檔時卻出現找不檔案的問題,不能讀取也不能修改或刪除,無言,明明就活生生存在資料夾中啊!!還硬生生給我占了上GB的空間,看得到卻吃不到實在詭異。拜估狗後,果真找到解決方法,不過這方法的奧妙之處還真令人玩味,待我分曉你知!
簡單說就是將下列二行指令複製進記事本,存檔成123.bat,再將想刪除的檔案拖到上面,就能刪除了。
DEL /F /A /Q \\?\%1
RD /S /Q \\?\%1
▼以拖拉的方式將想刪除的檔案拉到bat檔執行
--- 以下是深入研究,有時間才看 ---
一、為什麼檔案看得到卻吃不到?
windows裡,有些文字是禁止出現在檔名裡的,例如常見的?\/{*,而像著名網頁伺服器檔案「.htaccess」就是空白檔名加上htaccess的副檔名,是系統專門保留給伺服器的特定檔,一般使用者是沒辦法輕易建立這種檔。以今天的此案來看,檔名是「STAR-695□」,後面多了一個空白且無副檔名,無涉禁用字元照理應該是可讀取但卻無法,推測應該是有些禁用的字元沒有顯示出來(螢幕上看不到但實際上存在),導致系統在開啟該檔時自動排除該字元導致路徑錯誤而讀不到檔。所以其實只是「檔案讀取表」的問題,檔案本身並沒有壞。
二、該bat檔指令代表什麼意思?
DEL /F /A /Q \\?\%1
- del:刪除檔案
- /F:強制刪除唯讀檔案
- /A:根據屬性選取要刪除的檔案
- /Q:安靜模式,不再顯示刪除確認框
RD /S /Q \\?\%1
- rd:移除目錄 (remove directory)
- /S:移除目錄裡所有的目錄與檔案,但不移除目錄本身
- /Q:安靜模式,不再顯示刪除確認框
總結就是,強制刪除該目錄下的所有檔案,且不經確認,而且不會進垃圾桶會直接刪除。因為無法復原,所以要用該方法的話要先想清楚。
三、那個「\\?\%1」是什麼意思?
其實全文的重點在這,因為這個指令真的很奧妙,也滿有趣的。這裡面有包含二個指令。
\\?\
- 「\\」是指UNC路徑(Universal Naming Convention),以雙後斜線開頭就是,如「\\192.168.1.X\sharefiles\」或「\\PC10\ShareFiles\job.doc」。所以以雙後斜線開頭指的就是網路位址(通常是區網),相對的以單後斜線開頭指的就是本機電腦路徑,如「D:\video\files\」
- 「?」在cmd指令中是指萬用字元,代表著1個的任意字元(而*是代長n個的任意字元),但在這裡卻是特例(最討厭這種...),這裡的問號是代表著路徑長度可達到系統上限。正常的檔案路徑是260字元以內,但若以\\?\開頭的路徑卻能達到32000個字元。所以如果路徑太長或檔名無法讀取的,在路徑前加上這指令通常都能解決。
%1
- 代表傳入的參數。你將該檔拖拉到bat,傳入的參數就是該檔案的路徑。
看個實作會較清楚,我們實際將該檔拖拉到bat上看會出現什麼指令,可藉由下 pause 指停住畫面方便觀察。
▼我們看到實際下的指令是「DEL /F /A /Q \\?\"d:\video\STAR-695 "」。第二行的RD指令因為檔案在第一行已經刪除所以找不到檔案。由此也可知前述的%1,代入的參數就是拖入的檔案的路徑。
這篇有更詳盡的解說:https://read01.com/J0A44P.html
四、不想刪除,只想重新命名成可讀取的檔案?
經由以上三點的功法,若我想保留珍貴的檔案不想刪除,有辦法救回嗎?答案是肯定的!將下列指令存成bat檔,再將檔案拖拉至內。
RENAME \\?\%1 123.mp4
- 意思是:將拖入的檔案命名成123.mp4
- 用法:rename□檔案路徑\FileName□FileNameNew
結語:
其實關鍵就在「\\?\」這個指令,只要在檔案路徑前加上該指令,就能夠讀取原本無法處理的檔案,知道此點後,就可以無須透過bat,直接在cmd下指令處理即可。
.
沒有留言:
張貼留言
交流溝通或良好建議 ,通通歡迎。