我可以使用 cmd 命令将文档的先前修订版本移动到不同的文件夹吗?

我可以使用 cmd 命令将文档的先前修订版本移动到不同的文件夹吗?

我从事文档控制工作,并在一个文件夹中保存了大量文档,该文件夹还包含一个名为“旧”的文件夹。

我需要做的是筛选主文件夹中的数千个文档,并将旧修订版放入旧文件夹中(剪切,而不是复制!)。是否可以使用 来执行此操作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 位名称后缀,并将结果与​​前一个文件进行比较。如果是新值,则更新前一个值并保留文件。如果该值与前一个值匹配,则移动文件。

相关内容