Seus requisitos são um pouco vagos. A string "USER" pode aparecer em vários contextos. Quanto mais específico você for quanto ao formato de linha esperado, melhor será a solução.
Uma solução caso sensitiva usando comandos em lote nativo seria um pouco complicada.
Aqui está uma solução de lote nativo que é não sensível a maiúsculas e minúsculas. Ele procura a palavra "USER" (insensível a maiúsculas e minúsculas) no início de uma linha ou depois de um espaço, seguida de um espaço. Em seguida, ele pula um ou mais espaços (ou tabulações) e, em seguida, grava a próxima cadeia até espaço, tabulação ou fim de linha.
@echo off
setlocal disableDelayedExpansion
pushd "pathToYourFolder"
>userNames.txt (
for /f delims^=^ eol^= %%A in ('findstr /ri /c:" USER " /c:" USER " *.txt') do (
set "ln=%%A"
setlocal enableDelayedExpansion
set "ln=!ln:*:=!"
if /i "!ln:~0,5!" equ "USER " (set "ln=!ln:~5!") else set "ln=!ln:* USER =!"
for /f %%B in ("!ln!") do if "%%B" neq "" echo %%B
endlocal
)
)
popd
A vida é muito melhor se você se permitir ir além dos comandos em lote nativos. Os seguintes usos REPL.BAT - um utilitário JScript / batch híbrido que executa uma pesquisa de expressão regular e substitui as linhas de stdin e grava o resultado para stdout . É um script puro que é executado nativamente em qualquer máquina moderna do Windows a partir do XP.
O script abaixo assume que o REPL.BAT está em algum lugar dentro do seu PATH. Ele procura a palavra USER (sensível a maiúsculas e minúsculas) seguida por um ou mais caracteres de espaços em branco (provavelmente espaços e / ou tabulações) e depois grava a próxima "cadeia" até outro caractere de espaço em branco. É provável que a expressão regular possa ser modificada, se necessário, com bastante facilidade, se você definir melhor suas necessidades.
pushd "pathToYourFolder"
findstr USER *.log|repl ".*?:.*\bUSER\s+(\S+).*" $1 a >userNames.txt
popd