1

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

ЗАДАЧА:

Вывести совпадающие строки из файла Log.txt в том же порядке, что и список условий поиска (Tokens.txt, один токен на строку), которые были извлечены из StartingList.txt (текстовый список путей к файлам, доступный как% 1 для пакета файл).

ПРОБЛЕМЫ: (и обходные пути)

Метод 1 ниже: Командная строка FindStr изменяет порядок (по сравнению с порядком перечисленных поисковых терминов). Обходной путь должен использовать цикл FOR:

Метод 2 ниже: Пакетный цикл FOR с FindStr очень медленный и изменяет некоторые символы (за пределами диапазона от 32 до 126 шрифты и наборы символов командной строки могут не соответствовать базовой поддержке Windows Unicode - см. Вопрос 157225 для получения дополнительной информации об аспектах char), Обходной путь - запретить использование символов за пределами «безопасного» диапазона от 32 до 126 или выполнить хвостовую команду «найти и заменить» для любых измененных символов.

ВОЗМОЖНЫЕ РЕШЕНИЯ: (Здесь мне нужна помощь, пожалуйста ...)

Эквивалентный VBScript или JScript с поддержкой Unicode (возможно, с использованием JREPL) решит медленную скорость и поддержит все символы Unicode.

Пожалуйста, помогите пример функционально эквивалентного цикла FOR в этих языках сценариев.

Ближайшие методы JREPL - это dbenham на вопрос 1052645 и по адресу:http://www.dostips.com/forum/viewtopic.php?p=39534#p39534.

Пример StartingList.txt:

D:\Pics\2005-03-27 Bristol\2005-03-27 DSC_0016#.JPG  
D:\Pics\2005-03-26 Brighton\2005-03-26 DSC_0014#^{!k¿m.JPG  
D:\Pics\2005-03-26 London\2005-03-26 DSCN0015#.JPG  
D:\Pics\2005-03-28 Bath\2005-03-30 _DSC0019#.JPG  
D:\Pics\2005-03-28 Bath\2005-03-29 P01_0018#.JPG  

Пример Tokens.txt:

DSC_0016#  
DSC_0014#  
DSCN0015#  
_DSC0019#  
P01_0018#  

Пример Log.txt:

F:\Pics\Edited\2005-03-28 Bath\2005-03-30 _DSC0019#.JPG  
F:\Pics\Edited\2005-03-28 Bath\2005-03-29 P01_0018#.JPG  
F:\Pics\Edited\2005-03-28 Bath\2005-03-28 DSC_0017#.JPG  
F:\Pics\Edited\2005-03-27 Bristol\2005-03-27 DSC_0016#.JPG  
F:\Pics\Edited\2005-03-26 London\2005-03-26 DSCN0015#.JPG  
F:\Pics\Edited\2005-03-26 Brighton\2005-03-26 DSC_0014#^{!k¿m.JPG  

Пример StartingList(обновлено).txt:

F:\Pics\Edited\2005-03-27 Bristol\2005-03-27 DSC_0016#.JPG  
F:\Pics\Edited\2005-03-26 Brighton\2005-03-26 DSC_0014#^{!k¿m.JPG  
F:\Pics\Edited\2005-03-26 London\2005-03-26 DSCN0015#.JPG  
F:\Pics\Edited\2005-03-28 Bath\2005-03-30 _DSC0019#.JPG  
F:\Pics\Edited\2005-03-28 Bath\2005-03-29 P01_0018#.JPG  

Способ 1:

::method1
type nul >%1
findstr /G:Tokens.txt Log.txt >%1(updated).txt

Способ 2:

::method2
setlocal enableDelayedExpansion
type nul >%1
for /F "tokens=*" %%i in (Tokens.txt) do (
    findstr /C:"%%i" Log.txt >>%1(updated).txt
    )

Способ 3:

В идеале, решение, подобное этому, возможно, с использованием JREPL, передачей параметров поиска в виде текстового списка, возможно, с использованием входного или выходного канала, возможно, с другим JREPL? Решения вопроса 850183 кажутся близкими, но мой мозг пенсионера не может преодолеть разрыв - извиняюсь за мою неудачную попытку:

В противном случае, пожалуйста, помогите чистый пример JScript или VBScript.

::method3 [pseudo Jscript in square brackets is where I need help please]
type nul >%1
Call jrepl "[Read in Tokens.txt, match each token IN LISTED ORDER]" "[if (token==match, output matched line)]" /jmatch /jbeg "[cnt]" /f Log.txt /o >%1(updated).txt

0