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

Batch Script to Copy / Mirror certain files

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

我想将任何以 test 开头的文件复制到 test 文件夹,然后将 testing 复制到 testing 文件夹,将 sample 复制到 sample 文件夹。 我计划每 30 分钟将其作为 运行 的脚本,因此它只需要在文件已更改时复制 [这应该减少它必须执行的复制量]

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

提前致谢 J

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

@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

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

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

@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
@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... 子句,但保留该物理行上的右括号。