【问题标题】: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
您需要更改sourcedir 和destdir 的设置以适应您的情况。
所需的 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