使用正则表达式根据文件名移动文件,并删除文件名中子字符串中数字较小的文件

影乌鸦

我的文件具有以下语法:

LWD_???_??????_???_??_??_LP?_??_?_*.PDF

例子:

LWD_ARC_G10000_102_UE_XX_LP5_08_E_Uebersicht_Bodenplatten

我想从文件名中提取子字符串,然后将文件放入具有基于该文件名的路径的文件夹中,如下所示:

C:\Lp5\ARC\G10\

第一个文件夹是文件名的第七部分,第二部分是第二个文件夹,第三部分的前三个字符是最后一个文件夹。

然后除此以外,我还需要进行其他删除:将文件复制到特定文件夹时,文件名中有一个连续编号的部分。我需要删除“较旧”文件,以便此文件夹中仅“最后”文件。数字/索引始终是第30个和第31个字符。

LWD_FEU_L20000_005_IZ_00_LP8_XX_F.pdf      Index 00
LWD_FEU_L20000_005_IZ_00_LP8_01_F.pdf      Index 01 

目前,我只具有带有静态文件夹的批处理:

FOR /R "E:\Downloads" %%i in (LWD_ELT_A10?00_???_??_??_LP5*) do move "%%i" "C:\Lp5\ELT\A10"
FOR /R "E:\Downloads" %%i in (LWD_???_A10000_???_??_??_LP5*) do del "%%i"
...

有没有人知道如何在没有VBS的情况下做到这一点?这样-只有Windows Batch或PowerShell?

德本纳姆

我的批处理策略如下:

1)使用DIR / B获取PDF文件列表

2)将每个文件名解析为一个字符串(由竖线分隔)

  • 匹配名称与??通配符的位置30,31的文件掩码
  • 目标路径
  • 完整档案名称

3)对降序排列的字符串进行排序,从而在每个文件名分组的顶部显示最新版本。

4)使用FOR / F处理输出,解析出文件掩码,目标路径和全名

5)对于每次迭代,如果目标文件夹尚不存在,请创建它,然后如果尚不存在与文件掩码匹配的文件,则有条件地将文件复制到目标文件夹。

上面的策略是非破坏性的,因为原始文件都保留在原位。您可以将步骤5修改为具有破坏性的-移动最新文件而不是复制文件,然后删除其余文件。

您可以使用纯批处理相当容易地实现上述策略。但是我将使用REPL.BAT实用程序-混合JScript /批处理脚本,可以有效地执行复杂的正则表达式替换。JREPL.BAT是纯脚本,可​​以从XP开始在任何Windows计算机上本地运行。

以下未经测试

无损版本

@echo off
for /f "tokens=1,2,3 delims=|" %%A in (
  'dir /b /a-d LWD_*.PDF ^| jrepl "^(LWD_(...)_(...)..._..._.._.._(LP.)_)..(_._.*\.PDF)$" "$1??$5|c:\$4\$2\$3|$&" /i /a ^| sort /r'
) do (
  md "%%B" >nul 2>nul
  if not exist "%%B\%%A" copy "%%C" "%%B" >nul
)

破坏性版本

@echo off
for /f "tokens=1,2,3 delims=|" %%A in (
  'dir /b /a-d LWD_*.PDF ^| jrepl "^(LWD_(...)_(...)..._..._.._.._(LP.)_)..(_._.*\.PDF)$" "$1??$5|c:\$4\$2\$3|$&" /i /a ^| sort /r'
) do (
  md "%%B" >nul 2>nul
  if not exist "%%B\%%A" (move "%%C" "%%B" >nul) else del "%%C"
)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用正则表达式从字符串中刮取文件名

来自分类Dev

匹配文件名而不是python正则表达式中的子字符串

来自分类常见问题

正则表达式的文件名包含在任何Java字符串

来自分类Dev

从文件名返回字符串的正则表达式

来自分类Dev

将字符串/正则表达式转换为保存文件名的功能

来自分类Dev

正则表达式问题从文件名获取特定的字符串词

来自分类Dev

匹配文件名随机字符串的正则表达式

来自分类Dev

从给定字符串中提取文件名所需的正则表达式

来自分类Dev

构建在字符串中分隔文件名的正则表达式

来自分类Dev

正则表达式从Windows的文件名中删除特殊字符

来自分类Dev

如何使用正则表达式从bash中的文件名中仅选择数字

来自分类Dev

使用正则表达式匹配文件名

来自分类Dev

重命名使用终端和正则表达式从文件名中删除前导数字

来自分类Dev

正则表达式或子字符串以使文件名与扩展名匹配

来自分类Dev

正则表达式从路径中删除文件名

来自分类Dev

正则表达式:从文件名中删除时间戳

来自分类Dev

正则表达式-从文件名中删除(1)

来自分类Dev

Crashplan和正则表达式-根据文件名排除文件

来自分类Dev

使用带有正则表达式的Notepad ++将字符串(具有可变文件名)替换为其他字符串

来自分类Dev

在MATLAB中通过正则表达式从文件名中查找和删除文件扩展名

来自分类Dev

正则表达式,用于禁止文件名中的字符

来自分类Dev

在文件名的正则表达式中处理短划线字符

来自分类Dev

正则表达式检查输入目录/路径中文件名中的特殊字符

来自分类Dev

正则表达式匹配文件名

来自分类Dev

正则表达式验证文件名失败

来自分类Dev

查找文件名正则表达式

来自分类Dev

文件名的正则表达式

来自分类Dev

正则表达式文件名

来自分类Dev

正则表达式文件名

Related 相关文章

  1. 1

    使用正则表达式从字符串中刮取文件名

  2. 2

    匹配文件名而不是python正则表达式中的子字符串

  3. 3

    正则表达式的文件名包含在任何Java字符串

  4. 4

    从文件名返回字符串的正则表达式

  5. 5

    将字符串/正则表达式转换为保存文件名的功能

  6. 6

    正则表达式问题从文件名获取特定的字符串词

  7. 7

    匹配文件名随机字符串的正则表达式

  8. 8

    从给定字符串中提取文件名所需的正则表达式

  9. 9

    构建在字符串中分隔文件名的正则表达式

  10. 10

    正则表达式从Windows的文件名中删除特殊字符

  11. 11

    如何使用正则表达式从bash中的文件名中仅选择数字

  12. 12

    使用正则表达式匹配文件名

  13. 13

    重命名使用终端和正则表达式从文件名中删除前导数字

  14. 14

    正则表达式或子字符串以使文件名与扩展名匹配

  15. 15

    正则表达式从路径中删除文件名

  16. 16

    正则表达式:从文件名中删除时间戳

  17. 17

    正则表达式-从文件名中删除(1)

  18. 18

    Crashplan和正则表达式-根据文件名排除文件

  19. 19

    使用带有正则表达式的Notepad ++将字符串(具有可变文件名)替换为其他字符串

  20. 20

    在MATLAB中通过正则表达式从文件名中查找和删除文件扩展名

  21. 21

    正则表达式,用于禁止文件名中的字符

  22. 22

    在文件名的正则表达式中处理短划线字符

  23. 23

    正则表达式检查输入目录/路径中文件名中的特殊字符

  24. 24

    正则表达式匹配文件名

  25. 25

    正则表达式验证文件名失败

  26. 26

    查找文件名正则表达式

  27. 27

    文件名的正则表达式

  28. 28

    正则表达式文件名

  29. 29

    正则表达式文件名

热门标签

归档