【问题标题】:How do I copy (DOS) files from location A to B in DOS that don't already exist in C?如何将 (DOS) 文件从位置 A 复制到 DOS 中 C 中尚不存在的 B?
【发布时间】:2015-05-14 10:15:12
【问题描述】:

我有很多文件由提取工具生成并转储到服务器上的文件夹中。由于提取过程定期运行,此文件夹通常会添加文件。

一旦生成文件,它们就会被复制到另一台处理它们的服务器上。处理后,它们会在文件名后附加“.loaded”或“.error”(取决于处理是否成功),然后移动到另一个文件夹。所以像:

ServerA:
\source

ServerB:
\unprocessed 
\processed 

所以 \source 是提取过程转储文件的地方; \unprocessed 是文件被处理和读取以进行处理的地方,而 \processed 是文件被处理后移动到的地方。

我需要做的是创建一个批处理文件,该文件将从\ServerA\source 复制到\ServerB\unprocessed 中\Server B\processed 中尚不存在的所有文件。轻微的额外复杂性是 \processed 中的文件名将在其文件名后附加“.loaded”或“.error”。 (因此如果处理成功,则 fileA.abc 变为 fileA.abc.loaded,否则变为 fileA.abc.error)。

因此,当进程运行时,它需要对 \ServerA\source 中的每个文件检查该文件是否存在于 \ServerB\processed 中(扩展名为“.loaded”或“.error”);如果没有,则将其复制到 \ServerB\unprocessed,否则忽略它。

是否可以在 DOS 中执行此操作?或者其他方法会更好吗? VBScript 可能吗?

【问题讨论】:

  • 真的是DOS(command.com)还是windows(cmd.exe)?
  • 我猜应该是 cmd.exe。抱歉......我倾向于将它们归类为同一事物,尽管我很欣赏它们是不同的

标签: batch-file copy


【解决方案1】:
for %%f in ("\\serverA\source\*") do (
  echo processing %%f
  if not exist "\\serverB\processed\%%~nxf.* (
    echo ... copying %%~nxf...
    copy "%%f" "\\serverB\unprocessed\%%~nxf"
  )
)

对“源”中的每个文件执行:

如果“已处理”中没有同名文件加上任何扩展名,

将文件复制到“未处理”。

%%~nxf 为您提供文件的 (n)ame 和 e(x)tension (%%f)

【讨论】:

    【解决方案2】:

    您可以使用批处理文件:

    for /f "delims=|" %%f in ('dir /b ServerA\source\') do copy %%f ServerB\processed\%%f if not exist ServerB\processed\%%f if not exist ServerB\processed\%%f.loaded if not exist ServerB\processed\%%f.error 
    

    “for”循环遍历原始目录中的文件。对于每个文件,它会检查目标中是否存在另一个同名文件,如果不存在则复制它。

    希望对你有帮助。

    【讨论】:

    • 不是“if .... command”而不是“command if ...”吗? (顺便说一句:DOS 不支持for /f;cmd 支持)
    猜你喜欢
    • 1970-01-01
    • 2011-10-09
    • 2017-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多