将一个文件移动到多个文件中,但前提是该文件尚不存在于某个文件夹位置

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

我每天运行这个批处理文件,将文件的多个副本复制到一个位置,然后将原始文件移动到存档。完整的原始文件名每天都会有所不同,中间有非连续数字,因此掩码与 (*) 通配符一起使用。然后将原始文件存档在存档位置。

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 目录中。如果是这样,请忽略它们并仅复制任何剩余的文件。

非常感谢任何帮助

batch-file
1个回答
0
投票

所有源文件模式在

"
之后都会错过
.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 /?
© www.soinside.com 2019 - 2024. All rights reserved.