如何使用批处理、Jscript(JREPL?)或 vBScript 从文本文件(图像列表)中删除类似的行?

如何使用批处理、Jscript(JREPL?)或 vBScript 从文本文件(图像列表)中删除类似的行?

环境是WindowsXP(可能很快会升级到Windows7)。
我可以运行脚本,但不允许安装工具。

纯批处理通常由于性能问题或“特殊”字符(例如感叹号)而失败。

FINDSTR 通常会失败,因为它会找到搜索字符串的所有实例,而不仅仅是第一个匹配项。

我发现最接近的解决方案是 dbenham 提到的解决方案: http://www.dostips.com/forum/viewtopic.php?p=39534#p39534

我的文本文件通常包含每个文件夹(按数字字母顺序)的图像列表(2MB)(最新版本在第一个),通常通过命令行创建:dir *.jpg /o:-d /b /s > test.txt

我只想保留显示每幅图像的最新版本的行(下面用星号标记)。

本质上,我只想保留每个图像 ID 的第一行(# 之前的八个字符)。

列出的图像的顺序不能改变,因为该列表用于运行幻灯片:

D:\2016 London\2016-01-02 DSCN2111#227 bridge top.jpg   *
D:\2016 London\2016-01-02 DSCN2111#211 bridge top.jpg
D:\2016 London\2016-01-02 DSCN2111#110 bridge top.jpg
D:\2016 Paris\2016-01-01 imag1233#121 restaurant.jpg    *
D:\2016 Paris\2016-01-01 imag1233#110 restaurant.jpg
D:\2016 Paris\2016-01-01 P0001232#110 procession¿.jpg   *
D:\2016 Paris\2016-01-01 DSC_1231#111 skyline^05am.jpg  *
D:\2016 Paris\2016-01-01 DSC_1231#110 skyline^05am.jpg
D:\2016 Paris\2016-01-01 DSCN1230#310 fountain {!}.jpg  *
D:\2016 Paris\2016-01-01 DSCN1230#224 fountain {!}.jpg
D:\2016 Paris\2016-01-01 DSCN1230#110 fountain {!}.jpg

答案1

我相信你的话,列表已经排序,以便类似命名的文件已经连续,并且最新的文件始终列在第一位。

编写专用的 VBS 或 JScript 脚本应该不难,但使用 JREPL 和一些用户提供的 JScript 可能会更容易一些,如下所示:

jrepl "^(.+?)#.*$" "if ($1==prev) {false} else {prev=$1;$0}" /jmatch /jbeg "prev=''" /f test.txt

相关内容