使用robocopy复制特定文件即使不存在

问题描述

我在批处理文件中使用了robocopy,这些文件自动更新我们的软件。

这是我当前使用的命令:

from multiprocessing import Process
import time

def f(x):
   print("a",x)
   time.sleep(1)
   print("b",x)

if __name__ == '__main__':
   for i in range(5):
       p =  Process(target=f,args=(i,))
       p.start()

该命令排除了配置文件和日志文件效果很好。

问题在于,如果配置文件不存在,我必须从源目录(在这种情况下为ROBOcopY "%source%" "%Destination%" /MIR /PURGE /E /NP /R:5 /LOG+:"%Destination%\Update.log" /TS /FP /TEE /XF "%Destination%\SettingsA.config" "%Destination%\SettingsB.config" "%Destination%\SettingsC.config" "%Destination%\Trace.log" "%Destination%\Error.log" "%Destination%\update.log" /XD "%Destination%\Logs" %source%\SettingsA.config%source%\SettingsB.config中复制文件 >

当前,如果该配置文件将存在于源目录中,则它们将被覆盖在目标目录中。

由于源目录来自映射的网络驱动器,因此使用单个robocopy命令执行该目录会更好。

有可能吗?

解决方法

要演示我的意思,请测试每个配置文件是否存在,然后创建一个参数并排除它是否确实存在。

if exist "%Destination%\SettingsA.config" set "confa="%Source%\SettingsA.config""
if exist "%Destination%\SettingsB.config" set "confb="%Source%\SettingsB.config""
if exist "%Destination%\SettingsC.config" set "confc="%Source%\SettingsC.config""
ROBOCOPY "%Source%" "%Destination%" /MIR /PURGE /E /NP /R:5 /LOG+:"%Destination%\Update.log" /TS /FP /TEE /XF %confa% %confb% %confc% "%Destination%\SettingsA.config" "%Destination%\SettingsB.config" "%Destination%\SettingsC.config" "%Destination%\Trace.log" "%Destination%\Error.log" "%Destination%\update.log" /XD "%Destination%\Logs"
,

您可以仅将源复制到临时目录,将目标移至临时,然后将临时移至目标。