【问题标题】:Batch Script to Copy / Mirror certain files用于复制/镜像某些文件的批处理脚本
【发布时间】:2015-02-21 13:22:59
【问题描述】:

首先我是新手,如果这是一个简单的任务,我很抱歉。 我有一个仅包含 PDF 文件的文件夹,我只需要复制包含某些文本的文件 [此文本各不相同,但开头始终相同] 例如

  • test_variablename_datesamp.PDF.
  • testing_variablename_datesamp.PDF.
  • sample_variablename_datesamp.PDF.

我想将任何以 test 开头的文件复制到 test 文件夹,然后将 testing 复制到 testing 文件夹,将 sample 复制到 sample 文件夹。 我打算把它作为一个脚本,每 30 分钟运行一次,所以它只需要在文件更改时复制[这应该减少它必须做的复制量]

我是批处理脚本编写的新手,但我今天正在尝试。

提前致谢 J

【问题讨论】:

    标签: batch-file xcopy robocopy


    【解决方案1】:

    您可以使用* 作为通配符来移动您需要的文件。

    @echo off
    pushd "C:\pdf_files"
    copy test_*.pdf "C:\test_files"
    copy testing_*.pdf "C:\testing_files"
    copy sample_*.pdf "C:\sample_files"
    popd
    

    显然,将路径替换为您正在使用的路径。

    【讨论】:

      【解决方案2】:
      @ECHO OFF
      SETLOCAL
      SETLOCAL ENABLEDELAYEDEXPANSION
      SET "sourcedir=U:\sourcedir\t w o"
      SET "destdir=U:\destdir"
      FOR /f "tokens=1*delims=_" %%a IN (
       'dir /b /a-d "%sourcedir%\*_*.pdf" '
       ) DO IF NOT EXIST "%destdir%\%%a\%%a_%%b" (
        ECHO(MD "%destdir%\%%a"
        ECHO(COPY "%sourcedir%\%%a_%%b" "%destdir%\%%a\%%a_%%b"
      )
      GOTO :EOF
      

      您需要更改sourcedirdestdir 的设置以适应您的情况。

      所需的 MD 命令仅用于测试目的ECHOed。 验证命令正确后,将ECHO(MD 更改为MD 以实际创建目录。附加 2>nul 以抑制错误消息(例如,当目录已存在时)

      所需的 COPY 命令仅用于测试目的ECHOed。 验证命令正确后,将ECHO(COPY 更改为COPY 以实际复制文件。附加>nul 以禁止报告消息(例如1 file copied

      该进程从基本形式 (/b) 的目录列表中读取每个文件名,抑制与 *_*.pdf 匹配的所有文件的目录条目 (/a-d),将第一个 _ 之前的令牌分配给 %%a 和其余部分到%%b

      如果目标文件名不存在,则在目标目录下创建子目录%%a,然后复制文件。

      如果您想无论如何都复制,请删除 if not exist... 子句,但保留该物理行上的右括号。

      【讨论】:

        【解决方案3】:

        这应该会减少不必要的副本:

        @echo off
        
        rem -- set folder paths WITHOUT ending slash
        set pdf_folder=c:\pdfs
        set test_folder=c:\tests
        set testing_folder=c:\tests
        set sample_folder=c:\sample
        
        
        pushd %pdf_folder%
        
         rem -- COPY the non-existing in target folder files
         echo n|copy /-y test_*.pdf %test_folder%\
         echo n|copy /-y test_*.pdf %testing_folder%\<n
         echo n|copy /-y sample_*.pdf %sample_folder%\<n
        
        
         rem -- UPDATE only modified files
         replace test_*.pdf %test_folder% /u
         replace testing_*.pdf %testing_folder% /u
         replace sample_*.pdf %sample_folder% /u
        
        popd
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-06-01
          • 1970-01-01
          • 2016-02-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-06-01
          • 1970-01-01
          相关资源
          最近更新 更多