import os
import time
#Откуда копируем
source = ['"D:\Miscellanea\Резервные копии"']
#Куда копируем
target_dir = '"D:\Miscellanea\Backup Archive"'
#Название папки с сохраненым архивом резервных данных, в формате:
#%Месяц%День%Год
today = target_dir + os.sep + time.strftime('%m.%d.%Y')
#Создание имени zip-архива в формате %Час%Минута
now = time.strftime('%H-%M')
#Если в целевой папке нет каталога, создаем его
if not os.path.exists(today):
os.mkdir(today)
print('Идет процесс создания архива резервных данных, пожалуйста подождите...')
#Присваиваем имя архиву
target = today + os.sep + now + '.zip'
zip_command = "zip -qr {0} {1}".format(target, ' '.join(source))
if os.system(zip_command) == 0:
print('Архив резервных копий успешно создан в', target)
else:
print('Создание архива резервных копий НЕ УДАЛАСЬ')
我看到它在第 20 行发誓,我什至知道如何修复它,将文件夹名称从更改Backup Archive为BackupArchivethat is,删除空格,然后一切都会工作,但我有一个问题,发生这种情况的原因是什么,因为一切都是在代码中按顺序,有空格的路径需要写入"",已经完成,那么为什么会发生错误?你怎么能绕过它?


你是一个非常慷慨的人:)
简单的例子:
一般来说,问题如下:
target_dir。当您将其他内容附加到此路径时,字符串中存在引号会“破坏”路径 - 根据规则,引号应位于路径的开头和结尾并带有空格,并且在您附加了某些内容之后在这样一个字符串的末尾,引号最终出现在路径内而不是边缘,从而导致错误的路径。此外,该命令os.mkdir没有路径内的空格问题——毕竟它接收一个字符串参数,其中只有目录的名称,所以它不需要用带额外引号的空格来框住目录, 因为它接收到的整个字符串就是目录的名字, 有没有空格都没有关系。因此,target_dir根本不需要内部双引号。但是既然你然后使用结果target在命令行上 - 在形成命令行时,zip必须在 value 周围添加引号target。source。此列表中包含的路径被添加到命令行中,在该命令行中zip调用带有参数的命令,并且没有引号将目录路径框起来,实用程序zip将无法以任何方式理解 - 路径从哪里开始并以内部空格结尾,因此在这种情况下,绝对需要引号。尽管它们也可以在形成命令行时添加。"D:\Miscellanea\Backup Archive"\2020.10.26是将引用的路径与另一条路径连接而产生的弯曲路径zip -qr "D:\Miscellanea\Backup Archive\file.zip" "D:\Miscellanea\Резервные копии"- 如何在没有引号的情况下弄清楚它,它从哪里开始,它在哪里结束?一般来说,在你的情况下,我会
target在命令行形成时添加引号zip,或者在它之前。但不是之前。例如,您可以这样做:这里还要提一件事,连接目录路径的正常方法是 through
os.path.join,但你也不需要在那里传递额外的引号,如果有的话,它不会正确地连接它们。