O ambiente é WindowsXP (possivelmente atualizando para o Windows7 em breve). Tenho permissão para executar scripts, mas NÃO posso instalar ferramentas.
TAREFA:
Saída de linhas correspondentes de um arquivo Log.txt em mesma ordem como lista de termos de pesquisa (Tokens.txt, um token por linha), que foram extraídos de StartingList.txt (uma listagem de texto de caminhos de arquivos, disponíveis como% 1 para um arquivo em lotes).
PROBLEMAS: (e soluções alternativas)
Método1 abaixo: A linha de comando FindStr altera a ordem (ordem vs dos termos de pesquisa listados). Uma alternativa é usar um loop FOR:
Método2 abaixo: O loop FOR de lote com FindStr é muito lento e muda alguns caracteres (fora do intervalo de 32 a 126, linha de comando fontes e conjuntos de caracteres podem não concordar com o suporte subjacente do Windows Unicode - veja a pergunta 157225 para obter mais informações sobre aspectos de char). Uma solução alternativa é proibir o uso de caracteres fora do intervalo "seguro" de 32 a 126, ou executar uma busca e substituição 'em qualquer caractere alterado.
SOLUÇÕES POSSÍVEIS: (É aqui que preciso de ajuda, por favor ...)
Um VBScript ou JScript compatível com unicode equivalente (possivelmente usando JREPL também) resolveria a velocidade lenta e suportaria todos os caracteres Unicode.
Um exemplo de um loop FOR funcionalmente equivalente nessas linguagens de script ajudaria, por favor.
Os métodos JREPL mais próximos são por dbenham na questão 1052645 e em: link
Exemplo de StartingList.txt:
D:\Pics05-03-27 Bristol05-03-27 DSC_0016#.JPG
D:\Pics05-03-26 Brighton05-03-26 DSC_0014#^{!k¿m.JPG
D:\Pics05-03-26 London05-03-26 DSCN0015#.JPG
D:\Pics05-03-28 Bath05-03-30 _DSC0019#.JPG
D:\Pics05-03-28 Bath05-03-29 P01_0018#.JPG
Exemplo de Tokens.txt:
DSC_0016#
DSC_0014#
DSCN0015#
_DSC0019#
P01_0018#
Exemplo de Log.txt:
F:\Pics\Edited05-03-28 Bath05-03-30 _DSC0019#.JPG
F:\Pics\Edited05-03-28 Bath05-03-29 P01_0018#.JPG
F:\Pics\Edited05-03-28 Bath05-03-28 DSC_0017#.JPG
F:\Pics\Edited05-03-27 Bristol05-03-27 DSC_0016#.JPG
F:\Pics\Edited05-03-26 London05-03-26 DSCN0015#.JPG
F:\Pics\Edited05-03-26 Brighton05-03-26 DSC_0014#^{!k¿m.JPG
Exemplo de StartList (atualizado) .txt:
F:\Pics\Edited05-03-27 Bristol05-03-27 DSC_0016#.JPG
F:\Pics\Edited05-03-26 Brighton05-03-26 DSC_0014#^{!k¿m.JPG
F:\Pics\Edited05-03-26 London05-03-26 DSCN0015#.JPG
F:\Pics\Edited05-03-28 Bath05-03-30 _DSC0019#.JPG
F:\Pics\Edited05-03-28 Bath05-03-29 P01_0018#.JPG
Método 1:
::method1
type nul >%1
findstr /G:Tokens.txt Log.txt >%1(updated).txt
Método 2:
::method2
setlocal enableDelayedExpansion
type nul >%1
for /F "tokens=*" %%i in (Tokens.txt) do (
findstr /C:"%%i" Log.txt >>%1(updated).txt
)
Método 3:
Idealmente, uma solução como esta, possivelmente usando o JREPL, passando parâmetros de pesquisa como uma lista de texto, talvez usando um pipe para dentro ou para fora, possivelmente para outro JREPL? As soluções para questionar 850183 parecem próximas, mas meu cérebro-pensionista não pode preencher a lacuna - desculpas pela minha tentativa frustrada:
Caso contrário, um exemplo puro de JScript ou VBScript ajudaria, por favor.
::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
Tags command-line batch-file