环境是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