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

时间:2015-02-21 13:23:00

标签: batch-file xcopy robocopy

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

  • test_variablename_datestamp.PDF。
  • testing_variablename_datestamp.PDF。
  • sample_variablename_datestamp.PDF。

我想将以test开头的任何文件复制到测试文件夹,然后测试测试文件夹和样本到示例文件夹。 我计划将此作为每30分钟运行一次的脚本,因此只需要复制文件已经更改[这应该减少它必须复制的数量]

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

提前致谢 J

3 个答案:

答案 0 :(得分: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

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

答案 1 :(得分:1)

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

@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

答案 2 :(得分:1)

@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命令仅用于ECHO用于测试目的。 在您确认命令正确之后,将ECHO(MD更改为MD以实际创建目录。附加2>nul以禁止错误消息(例如,当目录已存在时)

为了测试目的,所需的COPY命令仅为ECHO在您确认命令正确后,将ECHO(COPY更改为COPY以实际复制文件。附加>nul以取消报告消息(例如1 file copied

该进程从基本格式的目录列表中读取每个文件名(/ b),禁止匹配*_*.pdf的所有文件的目录条目(/ ad),并在第一个_之前将令牌分配给{{ 1}}和余下的%%a

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

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