批处理文件 - 搜索字符串并将下一个单词复制到新文件

批处理文件 - 搜索字符串并将下一个单词复制到新文件

大家好。

我想在文件夹中的一堆文本文件中搜索以下字符串:

USER

然后我要复制这个词(USER)旁边的字符串,并将其复制到一个新的文本文件中。

我该怎么做?字符串“USER”旁边的单词将是 FTP 用户名 - 我搜索的所有文件都是 FTP 日志...

谢谢

答案1

您的要求有点模糊。字符串“USER”可能出现在多个上下文中。您对预期行格式的要求越具体,解决方案就越好。

使用本机批处理命令的区分大小写的解决方案会有点棘手。

这是一个本机批处理解决方案不是区分大小写。它会在行首或空格后查找单词“USER”(不区分大小写),后跟一个空格。然后它会跳过一个或多个空格(或制表符),然后写出下一个字符串,直到空格、制表符或行尾。

@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

如果你允许自己超越本机批处理命令,生活会好得多。以下用途REPL.BAT - 一个混合 JScript/批处理实用程序,它对来自 stdin 的行执行正则表达式搜索和替换,并将结果写入 stdout。它是纯脚本,可​​以在 XP 及以上版本的任何现代 Windows 机器上本地运行。

下面的脚本假设 REPL.BAT 位于您的 PATH 中的某个位置。它会查找单词 USER(区分大小写),后面跟着一个或多个空格字符(最有可能是空格和/或制表符),然后写出下一个“字符串”,直到另一个空格字符。如果您更好地定义您的要求,那么正则表达式很可能可以根据需要轻松修改。

pushd "pathToYourFolder"
findstr USER *.log|repl ".*?:.*\bUSER\s+(\S+).*" $1 a >userNames.txt
popd

答案2

在经典的 bat 中这不完全是一个解决方案。Powershell:

$logfiles = gci $logdir -include "*.log" -recurse

foreach ($file in $logfiles) {

    select-string -pattern "USER" $file | foreach { $_.ToString().split(" ")[2] >> $outputfile}
}

相关内容