使用批处理、JScript(JREPL?)或 VBScript 按照指定的顺序匹配文本文件(图像列表)中的行?

使用批处理、JScript(JREPL?)或 VBScript 按照指定的顺序匹配文本文件(图像列表)中的行?

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

任务:

从 Log.txt 文件中输出匹配的行同一订单作为搜索词列表(Tokens.txt,每行一个标记),这些搜索词是从 StartingList.txt(文件路径的文本列表,可作为批处理文件的 %1 使用)中提取的。

问题:(以及解决方法)

以下方法1:命令行 FindStr变化顺序(相对于列出的搜索词的顺序)。一种解决方法是使用 FOR 循环:

以下方法2:使用 FindStr 进行批量 FOR 循环非常慢变化一些字符(超出 32 到 126 的范围,命令行字体和字符集可能与底层 Windows Unicode 支持不一致 - 有关字符方面的更多信息,请参阅问题 157225)。解决方法禁止使用 32 到 126 这个“安全”范围之外的字符,或者对任何改变的字符运行尾端“查找和替换”。

可能的解决方案:(这是我需要帮助的地方......)

等效的 Unicode 感知 VBScript 或 JScript(可能也使用 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(updated).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

相关内容