我每天运行这个批处理文件,将文件的多个副本复制到一个位置,然后将原始文件移动到存档。完整的原始文件名每天都会有所不同,中间有非连续数字,因此掩码与 (*) 通配符一起使用。然后将原始文件存档在存档位置。
copy "\\source-location\source_file*.txt "\\new-location\source_file1.txt" >> c:\logs\log.txt 2>&1
copy "\\source-location\source_file*.txt "\\new-location\source_file2.txt" >> c:\logs\log.txt 2>&1
copy "\\source-location\source_file*.txt "\\new-location\source_file3.txt" >> c:\logs\log.txt 2>&1
move "c:\source location\source_file*.txt "\\new-location\archive\" >> c:\logs\log.txt 2>&1
我遇到的问题是我无法控制源位置。前一天的文件应由该位置的管理员从源位置删除,但有时不会这样做。由于我使用 (*) 通配符,这意味着有时在执行复制命令时两个文件会合并在一起,从而导致附加前一天的重复数据。
我需要脚本首先检查源位置中的任何文件是否已存在于新位置 rchive 目录中。如果是这样,请忽略它们并仅复制任何剩余的文件。
非常感谢任何帮助
所有源文件模式在
"
之后都会错过 .txt
。因此,经过此更正的发布代码将是:
copy "\\source-location\source_file*.txt" "\\new-location\source_file1.txt" >> c:\logs\log.txt 2>&1
copy "\\source-location\source_file*.txt" "\\new-location\source_file2.txt" >> c:\logs\log.txt 2>&1
copy "\\source-location\source_file*.txt" "\\new-location\source_file3.txt" >> c:\logs\log.txt 2>&1
move "\\source location\source_file*.txt" "\\new-location\archive\" >> c:\logs\log.txt 2>&1
但一种解决方案是使用带有 IF 条件的 FOR 循环:
(for %%I in ("\\source-location\source_file*.txt") do if not exist "\\new-location\archive\%%~nxI" (
copy "%%I" "\\new-location\source_file1.txt"
copy "%%I" "\\new-location\source_file2.txt"
copy "%%I" "\\new-location\source_file3.txt"
move "%%I" "\\new-location\archive\"
)) >>c:\logs\log.txt 2>&1
要了解所使用的命令及其工作原理,请打开命令提示符窗口,执行以下命令,并完整、仔细地阅读每个命令显示的帮助页面。
copy /?
for /?
if /?
move /?