我从事文档控制工作,并在一个文件夹中保存了大量文档,该文件夹还包含一个名为“旧”的文件夹。
我需要做的是筛选主文件夹中的数千个文档,并将旧修订版放入旧文件夹中(剪切,而不是复制!)。是否可以使用 来执行此操作CMD Command
?
我的所有文档都具有相同的名称结构:
xxx_01.pdf
修订版本 01
xxx_02.pdf
对于修订版 02 等(格式不仅仅是 pdf)。
答案1
以下批处理脚本可满足您的要求。将代码复制到一个文件中,并将其命名为 moveOld.bat,然后将其放在您的文件夹中。
@echo off
setlocal enableDelayedExpansion
pushd "%~dp0"
set "prev="
for /f "eol=: delims=" %%F in (
'dir /b /a-d /oe-n *^|findstr /r "_[0-9][0-9]\.[^.]*$"'
) do (
set "next=%%~nF"
set "next=!next:~0,-2!%%~xF"
if !next! neq !prev! (
set "prev=!next!"
) else (
move /y "%%F" old >nul
)
)
popd
您可以从命令提示符运行该脚本,或者也可以直接在 Windows 资源管理器中双击该脚本。
只要所有名称都不包含该!
字符,脚本就可以正常工作 - 可以使用额外的代码消除此限制。
如果脚本在您的文件夹中发现旧文件夹中已存在的过时文件,那么它将会直接覆盖旧文件夹中的现有文件。
工作原理说明
该脚本列出目录中的所有文件,按扩展名排序,然后按名称降序排列。然后通过 FINDSTR 过滤列表,以仅保留以“_nn”结尾的基本名称,其中 nn 是 2 位数字。
FOR /F 一次处理生成的文件列表。对于每个文件,删除 2 位名称后缀,并将结果与前一个文件进行比较。如果是新值,则更新前一个值并保留文件。如果该值与前一个值匹配,则移动文件。