題 如何復制包含|的文件在名字裡?


在Windows 7中,我無法複製該文件 | 在名字裡。給我一個錯誤 Can not find the file。我有大約30GB的文件,都包含該字符。知道如何將它們複製到另一個NTFS分區?


4
2018-02-09 13:40


起源


你是如何創建這些文件的? - Dennis
從洪流中下載。 - Pablo
你還有洪流嗎?如果這樣做,請使用torrent客戶端並移動存儲,因為它顯然可以處理這些不正確的文件名。 - Dennis
Nop,不幸的是我沒有註冊這樣的torrent,我也沒有Linux移動那些文件(我記得我把它們從Ubuntu移到了Windows 7分區)。 - Pablo
使用linux liveCD / USB安裝驅動器將是一個快速而乾淨的解決方案,但我想知道是否有辦法從Windows中做到這一點?我剛嘗試用|創建一個文件在我的Windows機器上的linux機器上,它對我大吼大叫。從我上網本上正在運行的https服務器下載也不起作用,它改變了|到 - 。也許嘗試使用命令提示符和短名稱來移動它們? dir /x 將列出您可以使用的短名稱。 - Rob


答案:


命令行是你的朋友。

打開一個 CMD 和 CD 到文件的位置。

輸入 dir /X 這將顯示舊的DOS 8.3名稱 ~1~2 和長文件名一起使用。

然後,您可以使用8.3名稱進行複制/重命名

重命名時可以混合使用8.3和長文件名:

ren THISIS~1.TXT "this is renamed.txt" 將工作

enter image description here


11
2018-02-09 15:00



喜歡這個想法,只要文件名超過8個字符。這是我想到的第一個Windows解決方案。 - Rob
@Rob即使文件名少於8個字符我相信它會給出一個替代方案,在這種情況下使用非法字符,這有點難以測試! - Shevek
我想知道你是否可以用引用的文件名做同樣的事情。即ren“file | name”文件名 - Matt H
@MattH我沒有 認為 因此它仍然是Windows文件名的非法字符。再次,很難測試,因為很難在文件名中創建具有該字符的文件! - Shevek


\\?\ 前綴告訴Windows您的路徑非常好,並且您不希望對其執行任何操作。這確實意味著它不那麼原諒。例如。 dir "\\?\C:" 不起作用。正確的道路是 dir "\\?\C:\"

這應該可以幫助您繞過使用限制 | 在NTFS文件名中。但是,您仍應引用文件名,以便CMD.EXE不解釋 |


4
2018-02-09 14:55





文件名中的無效字符會比以後更快地導致問題。我建議您重命名所有文件以避免進一步的問題。

這應該工作(但它未經測試):

  1. 下載 Ubuntu的 並刻錄Live CD。

  2. 從Live CD啟動。

  3. 打開終端,轉到包含奇數文件和exexcute的文件夾

    find . | grep "|" | awk '{ OLD=$0; gsub(/\|/, "_"); print "mv \"" OLD "\" \"" $0 "\"" }' | sh
    

這應該取代所有 |s with _秒。


1
2018-02-09 13:58



我知道有一種比使用awk更簡單的方法,但這應該有效。讓我進入我的linux機器,看看它是否還在我的bash歷史中。 - Rob
for f in *;做mv“$ f”“$(echo $ f | tr'|''_')”; DONE - Rob
@Rob:那個 是 更輕鬆。我已經改變了一點,所以它適用於子目錄,並且當源和目標相同時不會打印錯誤消息。 - Dennis
改為 for f in "$(find . | grep '|')"; 或者它會搞亂帶有空格的文件。 - Rob
喜歡你必須下載另一個操作系統來修復Windows的想法。 - Matt H


我打算和丹尼斯一樣建議。有很多應用程序 可用於Windows 同樣,但我不知道他們用“無效”字符重命名文件有多好。


0
2018-02-09 14:11