用于复制/镜像某些文件的批处理脚本
Batch Script to Copy / Mirror certain files
首先,如果这是一项简单的任务,我很抱歉是新手。
我有一个只包含 PDF 文件的文件夹,我只需要复制包含特定文本的文件 [此文本各不相同,但开头始终相同]
例如
- test_variablename_datestamp.PDF.
- testing_variablename_datestamp.PDF.
- sample_variablename_datestamp.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
您需要更改 sourcedir
和 destdir
的设置以适合您的情况。
所需的 MD 命令仅 ECHO
ed 用于测试目的。 验证命令正确后,将ECHO(MD
更改为MD
以实际创建目录。附加 2>nul
以抑制错误消息(例如,当目录已经存在时)
所需的 COPY 命令仅 ECHO
ed 用于测试目的。 确认命令正确后,将ECHO(COPY
更改为COPY
以实际复制文件。附加 >nul
以禁止报告消息(例如 1 file copied
)
进程从目录列表中以基本形式 (/b) 读取每个文件名,抑制所有匹配 *_*.pdf
的文件的目录条目 (/a-d),将第一个 _
之前的标记分配给%%a
余数为 %%b
.
如果目标文件名不存在,则在目标目录下创建子目录%%a
,然后复制文件。
如果您无论如何都想复制,请删除 if not exist...
子句,但保留该物理行上的右括号。
首先,如果这是一项简单的任务,我很抱歉是新手。 我有一个只包含 PDF 文件的文件夹,我只需要复制包含特定文本的文件 [此文本各不相同,但开头始终相同] 例如
- test_variablename_datestamp.PDF.
- testing_variablename_datestamp.PDF.
- sample_variablename_datestamp.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
您需要更改 sourcedir
和 destdir
的设置以适合您的情况。
所需的 MD 命令仅 ECHO
ed 用于测试目的。 验证命令正确后,将ECHO(MD
更改为MD
以实际创建目录。附加 2>nul
以抑制错误消息(例如,当目录已经存在时)
所需的 COPY 命令仅 ECHO
ed 用于测试目的。 确认命令正确后,将ECHO(COPY
更改为COPY
以实际复制文件。附加 >nul
以禁止报告消息(例如 1 file copied
)
进程从目录列表中以基本形式 (/b) 读取每个文件名,抑制所有匹配 *_*.pdf
的文件的目录条目 (/a-d),将第一个 _
之前的标记分配给%%a
余数为 %%b
.
如果目标文件名不存在,则在目标目录下创建子目录%%a
,然后复制文件。
如果您无论如何都想复制,请删除 if not exist...
子句,但保留该物理行上的右括号。