代码之家  ›  专栏  ›  技术社区  ›  Hoube78

用于复制/镜像某些文件的批处理脚本

  •  2
  • Hoube78  · 技术社区  · 9 年前

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

    • test_variablename_datemp.PDF。
    • 测试变量名_测试值.PDF。
    • sample_variablename_datemp.PDF。

    我想将任何以测试开头的文件复制到测试文件夹,然后将测试复制到测试目录,将样本复制到样本文件夹。 我计划将其作为脚本,每30分钟运行一次,因此只需要在文件发生更改时进行复制[这将减少所需的复制量]

    我刚开始批量书写,但我今天正在尝试。

    提前感谢 J

    3 回复  |  直到 9 年前
        1
  •  1
  •   SomethingDark    9 年前

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

    @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
  •  1
  •   Magoo    9 年前
    @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
    

    您需要更改的设置 sourcedir destdir 以适应您的环境。

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

    所需的COPY命令仅为 回声 用于测试目的。 验证命令是否正确后 改变 ECHO(COPY COPY 以实际复制文件。追加 >nul 抑制报告消息(例如。 1 file copied )

    该过程以基本形式(/b)从目录列表中读取每个文件名,并抑制所有匹配文件的目录条目(/a-d) *_*.pdf ,在第一个 _ %%a 剩余部分至 %%b .

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

    如果要复制,请删除 if not exist... 子句,但保留该物理行上的右括号。

        3
  •  0
  •   npocmaka    9 年前

    这样可以减少不必要的副本:

    @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