我每天晚上都会创建一个包含文件的新文件夹。有谁知道如何创建一个脚本,将最新/最新文件夹的内容复制到网络共享并覆盖网络共享中的任何文件和文件夹?一直在挠我的脑袋。
提前致谢。
答案 0 :(得分:9)
这样的事情可能符合你的目的:
SET "src_root=D:\root\for\source\directories"
SET "tgt_path=\\NETWORK\SHARE\target\path"
DIR "%src_root%" /B /AD /O-D /TC > "%TEMP%\dirlist.tmp"
< "%TEMP%\dirlist.tmp" SET /P last_dir=
FOR /D %%I IN ("%tgt_path%\*") DO RD "%%I" /S /Q
DEL "%tgt_path%\*" /Q
XCOPY "%src_root%\%last_dir%\*" "%tgt_path%" /S /E
src_root
变量应包含创建每日文件夹的文件夹的路径,tgt_path
是要复制的最新文件夹内容的目标路径。
设置DIR
命令以按以下方式返回根文件夹的内容:
输出中没有额外信息,只有名称(/B
);
没有文件,只有文件夹(/AD
);
按文件夹日期(/O…
)的降序(…-…
)顺序排序(…D
);
日期是文件夹创建的日期(/TC
)。
将输出重定向到临时文件,然后将其第一行读入变量(SET /P
命令)。这条信息以及根路径和目标路径最终首先用于删除,然后用于复制文件。
删除分两步完成:首先是文件夹(RD
循环中的FOR /D
命令),然后是文件(DEL
)。我想在这一点上注意到,这个剧本不会在你身边的任何阶段进行干预,我理解这是你的意图。因此,它不期望确认删除目标路径上的文件和文件夹,因此,当您运行脚本时,旧内容将被静默删除(这是{的效果{1}}切换用于/Q
和RD
)。
使用DEL
完成复制,因为它允许我们保留源文件夹(XCOPY
开关)的结构,包括空子目录(/S
),如果有的话。
通过在命令提示符下使用/E
开关调用其中任何一个命令,您可以获得有关此处提到的每个命令的更多信息。