我嘗試通過 Windows 10 命令列通過 Python 或 VBA 代碼使用 Winrar 自動歸檔目錄中的檔案夾。考慮到可能有空格,我將所有路徑都用引號括起來。
但是我在 Python 或 VBA 中遇到了同樣的錯誤;
" 'C:/Program' 不是內部或外部命令,也不是可運行的程式或批處理檔案。"
這是一個未完成的 Python 代碼嘗試示例;
def folders_2_Winrar(source_path:str, archive_path:str, password:str='', winrar_path:str='"C:/Program Files/WinRAR/winrar.exe"')->None:
import os
folder_list = path_entries(source_path)['folders'] ## separate function that returns a list of folders in a directory
for f in folder_list:
rar = '"' archive_path os.path.basename(f) '.rar' '"'
f = r'"' f '\*.*"'
cmd = winrar_path ' a -hp' password ' -ep1 ' rar ' ' f
os.system(cmd)
# test the function
folders_2_Winrar("E:/Test/Source", "E:/Test\\Archive/","123")
我無法理解的問題是什么??!!
uj5u.com熱心網友回復:
簡短回答:使用完整路徑的簡寫版本: "C:/Progra~1/WinRAR/winrar.exe"
更長的答案:命令提示不喜歡路徑之間的空間。通常在提示本身中,您需要使用引號來表示包含空格的完整路徑,或者使用 ~1(波浪符號)的速記約定。
這是我挖掘的網路存檔 Microsoft 知識庫,我將其作為副本包含在此處,以防萬一:
Windows 通過以下方式從長檔案名生成短檔案名:
Windows 會從檔案名中洗掉任何無效字符和空格。無效字符包括:
. " / \ [ ] : ; = ,由于短檔案名只能包含一個句點 (
.),因此如果檔案名中的最后一個句點后面是有效的非空格字符,則 Windows 會從檔案名中洗掉額外的句點。例如,Windows
Thisis~1.txt從長檔案名生成短檔案名This is a really long filename.123.456.789.txt否則,Windows 將忽略最后一個期間并使用最后一個期間的下一個期間。例如,Windows
Thisis~1.789從長檔案名生成短檔案名This is a really long filename.123.456.789.如有必要,Windows 會將檔案名截斷為六個字符并附加一個波浪號 (
~) 和一個數字。例如,創建的每個唯一檔案名都以“~1.”結尾。重復的檔案名以“~2、”、“~3、”等結尾。Windows 將檔案擴展名截斷為三個字符或更少。
Windows 將檔案名和擴展名中的所有字符轉換為大寫。
請注意,如果檔案夾或檔案名包含空格但少于八個字符,Windows 仍會創建一個短檔案名。如果您嘗試通過網路訪問此類檔案或檔案夾,則此行為可能會導致問題。要解決這種情況,
_請將空格替換為有效字符,例如下劃線 ( )。如果這樣做,Windows 不會創建不同的短檔案名例如,“
Afile~1.doc”是從“A file.doc”生成的,因為長檔案名包含一個空格。不會從 "
A_file.doc"生成短檔案名,因為檔案名包含少于八個字符且不包含空格。短檔案名“
Alongf~1.txt”是由長檔案名“A long filename.txt”生成的,因為長檔案名包含8個以上的字符。
替代答案:您可以嘗試在cmd您打算運行的檔案中添加引號:
# using f-strings for Python 3.6
cmd = f'"{winrar_path}" a -hp {password} -ep1 {rar} {f}'
# or using good ol' format:
cmd = '"{path}" a -hp {pw} -ep1 {file} {fl}'.format(path=winrar_path, pw=password, file=rar, fl=f)
uj5u.com熱心網友回復:
沒有完整的答案。但是我可以通過洗掉 for 回圈中的引號來運行它。似乎字串路徑在有空格時必須用引號封裝。而不是當它沒有。
def folders_2_Winrar(source_path:str, archive_path:str, password:str='', winrar_path:str='"C:\Program Files\WinRAR\winrar.exe"')->None:
import os
folder_list = path_entries(source_path)['folders'] ## separate function that returns a list of folders in a directory
for f in folder_list:
rar = archive_path os.path.basename(f) '.rar'
f = f '\*.*'
cmd = winrar_path ' a -hp' password ' -ep1 ' rar ' ' f
os.system(cmd)
# test the function
folders_2_Winrar("E:/Test/Source", "E:/Test\\Archive/","123")
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/392493.html
上一篇:根據選擇指定的單元格顯示形狀
下一篇:如何在VBA中附加帶有日期的檔案
