我制作了一個簡單的備份批處理檔案來壓縮整個驅動器,不包括一些檔案夾,包括一個以希伯來語命名的檔案夾。但是,Rar.exe即使我使用簡短的 8.3 檔案夾名稱作為輸出,dir /x在這種情況下使用的命令列也會壓縮帶有希伯來語名稱的檔案夾CA05~1。
該命令列不適用于排除具有希伯來語名稱的檔案夾:
"C:\Program Files (x86)\WinRAR\Rar.exe" a -hp123 -r -x*\"12" -x*\"13" -x*\"backup" -x*\"CA05~1" -y -- "G:\backup\bu.rar" "G:\"
在單個命令列中是否有任何修復建議?
這只是命令列中使用希伯來語的許多示例問題之一,因此重命名檔案夾會有所幫助,但僅適用于“短回合”。
此外,提供的代碼沒有像 in 那樣顯示所有引數"-x*\"。
uj5u.com熱心網友回復:
cmd.exe處理批處理檔案的 Windows 命令處理器不是為使用 Unicode 而設計的。默認情況下,它根據為所用帳戶配置的區域(國家/地區)使用OEM代碼頁使用每個字符只有一個位元組的字符編碼。根據處理批處理檔案時使用的代碼頁,批處理檔案應包含所有字符。 cmd.exe
希伯來語的 OEM 代碼頁將是代碼頁 856。希伯來文檔案夾名稱,如???使用UTF-16 Little Endian編碼的 Unicode 和十六進制位元組流D0 05 D1 05 D2 05將使用代碼頁 856 和十六進制位元組流進行編碼80 81 82。
我希望這是正確的,因為希伯來語是從右到左而不是從左到右顯示和閱讀的。所以第一個希伯來字母 alef顯示為希伯來詞的第三個字符,而第三個希伯來字母 gimel從西歐的角度從左到右顯示為希伯來詞的第一個字符。我在 Windows 計算機上沒有使用希伯來語的經驗。
有一個批處理檔案可以作業:
@echo off
%SystemRoot%\System32\chcp.com 856
"%ProgramFiles(x86)%\WinRAR\Rar.exe" a -dh -ep1 -hp123 -idcdp -r "-x*\12\" "-x*\13\" "-x*\backup\" "-x*\???\" -y -- "G:\backup\bu.rar" "G:\"
三個希伯來字符???必須與80 81 82第一個?、第二個?和第三個十六進制位元組流一起存盤在批處理檔案中,?并一起顯示為???.
在運行 Windows 7 且根本不支持希伯來語代碼頁 856 的計算機上執行第一行時會輸出以下錯誤訊息:
無效的代碼頁
因此,代碼頁不會從850(西歐 OEM 代碼頁)切換到856(希伯來語 OEM 代碼頁),正如我chcp在批處理檔案處理完成并Rar.exe包含名稱為 的檔案夾后運行命令時所看到的那樣???。
另一種解決方案可能是在命令列中使用沒有位元組順序標記(BOM)的UTF-8編碼批處理檔案:
@echo off
%SystemRoot%\System32\chcp.com 65001
"%ProgramFiles(x86)%\WinRAR\Rar.exe" a -dh -ep1 -hp123 -idcdp -r "-x*\12\" "-x*\13\" "-x*\backup\" "-x*\???\" -y -- "G:\backup\bu.rar" "G:\"
顯示的三個希伯來字符???必須與十六進制位元組流一起存盤在批處理檔案中D7 90 D7 91 D7 92。這適用于裝有 Windows 7 的計算機。
我最喜歡的解決方案是使用帶有以下命令列的 ASCII 編碼批處理檔案:
@"%ProgramFiles(x86)%\WinRAR\Rar.exe" a -dh -ep1 -hp123 -idcdp -r -scul "-x@%~dp0ExcludeList.txt" -y -- "G:\backup\bu.rar" "G:\"
它的優點是易于撰寫并且始終適用于包括 Windows XP 在內的任何 Windows。
此解決方案要求批處理檔案的目錄中有文本檔案ExcludeList.txt。此文本檔案必須是 Unicode 編碼的 UTF-16 和帶 BOM 的 Little Endian,因此Rar.exe還支持不帶 BOM 的 UTF-16 LE 或帶 BOM 的 UTF-16 BE。Windows記事本可以節省選擇與UTF-16 LE BOM編碼的文本檔案Unicode的選項編碼在另存為點擊按鈕前對話視窗保存。
Unicode 編碼的文本檔案ExcludeList.txt應包含以下幾行:
*\12\
*\13\
*\backup\
*\???\
該開關"-x@%~dp0ExcludeList.txt"通知Rar.exe從ExcludeList.txt批處理檔案目錄中的檔案中讀取要排除的引數。開關-scul告訴Rar.exe這個串列檔案是Unicode編碼(UTF-16)。 Rar.exe是一個完整的 Unicode 感知 Windows 控制臺應用程式。
Rar.exe并沒有對使用短8.3檔案/檔案夾名稱的排除串列中的專案比較檔案/檔案夾名稱。它始終使用長檔案/檔案夾名稱,因為這些名稱必須存盤在 RAR 存檔檔案中,而不是 8.3 格式的短檔案/檔案夾名稱。也不能保證檔案系統創建簡短的 8.3 檔案/檔案夾名稱,因為這是創建檔案系統(格式化磁區)的一個選項。
手冊Rar.exe是文本檔案Rar.txt。它存盤在WinRAR的程式檔案夾中,例如WinRAR.exe,Rar.exe和UnRAR.exe. 它可以通過雙擊打開,應該從上到下閱讀一次以了解使用的開關。
該Rar手冊還介紹,如果有喜歡的特定名稱的檔案夾12,13,backup或???其中這樣的檔案夾中的檔案夾層次使用通配符發現應排除獨立上*一開始有,必須在Windows上指定的檔案夾名稱尾隨\并/在 Linux/Max 上將尾隨解釋為檔案夾名稱。的引數的用法"-x*\12" "-x*\13" "-x*\backup" "-x*\???"分別與線條*\12,*\13,*\backup并*\???在排除串列中的檔案ExcludeList.txt會導致不包括檔案在檔案夾層次結構中的任何位置都可以找到這樣的名稱。排除項末尾的目錄分隔符包含通配符,如*或?是WinRAR將通配符模式應用于檔案夾名稱而不是檔案名稱的指示。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/369566.html
