如何在python脚本中调用robocopy来批量复制多个文件夹?

问题描述 投票:1回答:5

我试图在网络驱动器之间移动多个大文件夹(> 10 Gb,> 100个子文件夹,> 2000个文件)。我已经尝试在python中使用shutil.copytree命令工作正常,但由于不同的原因它无法复制一小部分(<1%的文件)。

我相信robocopy对我来说是最好的选择,因为我可以创建一个记录传输过程的日志文件。但是,因为我需要复制> 1000个文件夹手动工作是不可能的。

所以我的问题基本上是如何在python脚本中调用robocopy(即命令行),确保日志文件是在外部文件中写入的。

我正在开发一个Windows 7环境,由于组织限制,Linux / Unix是不可能的。如果有人有任何其他建议批量复制这么多文件夹具有很大的灵活性,欢迎他们。

python windows-7 command-line copy robocopy
5个回答
6
投票

Subproccess允许您进行系统调用。这将允许您像在命令行中那样调用robocopy。

from subprocess import call
call(["robocopy", "basefolder newfolder /S /LOG:mylogfile"])

1
投票

使用os.exec系列函数之一启动任何外部程序:

可能你想要os.execlp(file, arg0, arg1, ...)


1
投票

就像halfs13说使用子进程但你可能需要像这样格式化它

from subprocess import call call(["robocopy",'fromdir', 'todir',"/S"]) 否则它可能会将源视为一切


0
投票

这让我走上正确的道路,但我不得不用逗号分隔选项,例如

from subprocess import call
call(["robocopy", "./", "newfolder/test02", "/S", "/LOG:mylogfile"])

这是一种享受。 “/ S”复制了所有子文件夹。


0
投票
cmd = 'robocopy.exe {0} {1} /S'.format(srcDir, destPath)
output = subprocess.run(cmd.split(), capture_output=True, text=True)
print(output.stdout)

上面的代码片段就是这么做的。

注意:如果srcDirdestPath中有任何空格,那么cmd.split()将无效。相反,您需要执行以下操作:

output = subprocess.run(['robocopy.exe',
                         r'<full src path>',
                         r'<full dest path>',
                         '/S'],
                        capture_output=True,
                        text=True)
print(output.stdout)

你可以在这里阅读有关子进程的所有内容:https://docs.python.org/3.7/library/subprocess.html

© www.soinside.com 2019 - 2024. All rights reserved.