1

Среда - WindowsXP (возможно, скоро обновится до Windows7).
Мне разрешено запускать скрипты, но НЕ разрешено устанавливать инструменты.

Чистая партия обычно терпела неудачу из-за проблем с производительностью или «специальных» символов (таких как восклицательный знак).

FINDSTR обычно терпел неудачу, потому что он находит ВСЕ экземпляры строки поиска, а не только первое совпадение.

Самые близкие решения, которые я нашел, упомянуты dbenham по адресу:http://www.dostips.com/forum/viewtopic.php?p=39534#p39534.

Мой текстовый файл обычно содержит (2 МБ) список изображений (сначала самая последняя версия) для каждой папки (в алфавитном порядке), обычно создаваемый с помощью командной строки: dir * .jpg /o: -d /b /s> test.txt

Я хочу сохранить только строки, показывающие самую последнюю версию каждого изображения (помеченные звездочками ниже).

По сути, я хочу сохранить только первую строку для каждого идентификатора изображения (восемь символов перед #).

Порядок перечисленных изображений не должен меняться, потому что список используется для запуска слайд-шоу:

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 ответ1

2

Я уверяю вас, что список уже отсортирован так, что именованные файлы уже являются смежными, и самый последний из них всегда указывается первым.

Не должно быть сложно написать специальный скрипт VBS или JScript, но, возможно, немного проще использовать JREPL с небольшим количеством предоставленного пользователем JScript следующим образом:

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .