如果不存在,使用 robocopy 复制特定文件

Using the robocopy to copy specific files just if NOT exist

我在自动更新软件的批处理文件中使用 robocopy。

这是我目前使用的命令:

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%Source%\SettingsC.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"

您可以将源复制到一个临时目录,将目标移动到临时目录,然后将临时移动到目标。