- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我只想在他的文本文件中找到特定的行,所以我认为使用范围是个好主意。但我似乎可以在网上找到任何教程。请帮助..
文本文件的例子
XXX scan report for 192.0.0.0
exampleexampleexampleexampleexample
OS: windows 8
exampleexampleexampleexample
exampleexampleexampleexample
PORT STATE SERVICE VERSION
21/tcp close ftp
80/tcp open http Microsoft ISS
exampleexampleexampleexample
exampleexampleexampleexample
XXX scan report for 192.0.0.1
exampleexampleexampleexampleexample
exampleexampleexampleexample
exampleexampleexampleexample
PORT STATE SERVICE VERSION
21/tcp close ftp
80/tcp open http Microsoft ISS
exampleexampleexampleexample
exampleexampleexampleexample
我想将 IP 地址、操作系统详细信息和端口状态获取到电子表格中。
我的代码:
@echo off
set file=C:\Users\1.txt
set match=report for
set match1=OS
findstr /c:"%match%" %file%
findstr /c:"%match1%" %file%
findstr /c:"tcp " /c:"udp " %file%
for /f "tokens=1-5" %%a in ('findstr /c:"%match%" %file%') do (
echo "IP Address:","%%e" >> report1.csv
for /f "tokens=1,2 delims=:*" %%a in ('findstr /c:"%match1%" %file%') do
(
echo "Operating System: ","%%b" >> report1.csv
echo "PORT","STATE","SERVICE","VERSION" >> report1.csv
for /f "tokens=1-4 delims=: " %%a in ('findstr /c:"tcp " /c:"udp "
%file%') do (
echo "%%a","%%b","%%c","%%d" >> report1.csv
)
)
)
这段代码有一个很大的问题,它在for循环中。该代码将获取第一个 ip,然后将继续获取 os 详细信息,但 ip 永远不会有 os 详细信息,因此 os 详细信息将放在错误的 ip 中。
代码的另一个问题是它将列出一个 IP 地址下的所有操作系统和端口详细信息。下一个 IP 地址也将相同,它也将包含所有操作系统和端口详细信息。
请帮我解决这个问题。或者有没有其他的方法比如call?
最佳答案
@ECHO OFF
SETLOCAL
SET "sourcedir=U:\sourcedir"
SET "destdir=U:\destdir"
SET "filename1=%sourcedir%\q43335765.txt"
SET "outfile=%destdir%\outfile.txt"
>"%outfile%" ECHO IP,OS,PORT,STATUS,SERVICE,VERSION
FOR /f "usebackqdelims=" %%a IN ("%filename1%") DO (
CALL :process %%a
)
GOTO :EOF
:process
ECHO %*|FIND "scan report for " >NUL
IF NOT ERRORLEVEL 1 GOTO newip
IF "%~1"=="OS:" SET "$os=%*"&GOTO :eof
ECHO %~1|FIND "/">NUL
IF ERRORLEVEL 1 GOTO :EOF
FOR /f "tokens=1,2,3*" %%p IN (
"%*") DO >>"%outfile%" ECHO %$ip%,%$os:*: =%,%%p,%%q,%%r,%%s
GOTO :eof
:newip
IF "%~2" neq "" shift&GOTO newip
SET "$ip=%~1"
SET "$os=: "
GOTO :eof
您需要更改 sourcedir
和 destdir
的设置以适合您的情况。
我使用了一个名为 q43335765.txt
的文件,其中包含您的数据用于我的测试。
生成定义为 %outfile% 的文件
建立文件名后,将标题行放在输出文件中,并通过 :process
处理文件的每一行
在:process
中,检测到表示ne数据项的key字符串。如果找到,转到 :newip
,它简单地随机移动数据行,直到只剩下最后一个条目,并将最后一个条目分配给 $ip
。将 $ip
设置为 :
Space + 任何您想要表示“未找到”的特殊字符串(例如 unknown)
如果该行不包含 key 串,则查看第一个标记是否为 OS:
,如果是,则将 $os
设置为整个原始行。
否则,在第一个标记中查找 /
。如果不存在,则放弃处理这一行,否则简单地标记该行,选择第一个到 thid 和 rest 并使用保存的 ip,保存的 os 输出,除了第一个之前的部分 :
< kbd>Space 和四个数据行条目,全部用逗号分隔。
修订以适应数据中的 |
- 替换为 /
@ECHO OFF
SETLOCAL
SET "sourcedir=U:\sourcedir"
SET "destdir=U:\destdir"
SET "filename1=%sourcedir%\q43335765.txt"
SET "outfile=%destdir%\outfile.txt"
>"%outfile%" ECHO IP,OS,PORT,STATUS,SERVICE,VERSION
FOR /f "usebackqdelims=" %%a IN ("%filename1%") DO (
SET "line=%%a"
CALL :preprocess
)
GOTO :EOF
:preprocess
SET "line=%Line:|=/%"
CALL :process %line%
GOTO :eof
:process
ECHO %*|FIND "scan report for " >NUL
IF NOT ERRORLEVEL 1 GOTO newip
IF "%~1"=="OS:" SET "$os=%*"&GOTO :eof
ECHO %~1|FIND "/">NUL
IF ERRORLEVEL 1 GOTO :EOF
FOR /f "tokens=1,2,3*" %%p IN (
"%*") DO >>"%outfile%" ECHO %$ip%,%$os:*: =%,%%p,%%q,%%r,%%s
GOTO :eof
:newip
IF "%~2" neq "" shift&GOTO newip
SET "$ip=%~1"
SET "$os=: "
GOTO :eof
表明需要提供有代表性的数据样本...
对于具有特殊含义的字符,如 |
,分配给一个变量并调用预处理器将所有 |
转换为 /
(或任何其他所需的),然后然后 call
过程和结果。
公式:set "var=%somevar:string1=string2%"
将把所有出现的 string1 替换为 string2 的 somevar 的值赋给 var。 set 命令中的引号确保行中任何杂散的尾随空格不包含在分配的值中。
关于windows - 使用具有特定范围或其他方法的 Findstr,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43335765/
我的批处理程序 FINDSTR /C:"Result Comparison failure" %tmp_result_file% 我想做以下操作,将上述命令的结果设置为变量。 如果找到,将第一行设
我在文本文件(test.txt)中有以下字符串: BLA BLA BLA BLA BLA Found 11 errors and 7 warnings 我执行以下命令: findstr /r "[0-
今天从命令行提示符启动 JBoss 时出现以下错误: 'findstr' is not recognized as an internal or external command 最佳答案 请谷歌一下
我不明白; 搜索 用法很清楚,但我无法让它工作。我要搜索 在文本文件上,使用 ^和 $特点。这边走: findstr /C:"^test$" test.txt 我以多种方式制作了文件 (test.tx
我正在尝试编写一个 findstr 正则表达式,它将使用 subversion 查找本地和远程修改的文件。鉴于下面的示例输出,我想匹配那些以“M”作为第一个或第二个字符的行。还会有其他人,但这是我的起
我做了一段批处理代码,我认为这会奏效。我在想这段代码在做什么?我有一些插件,我想测试部署是否正确。所以我从plugins.txt 中得到了pluginlink。然后我用java语句从SVN获取插件。我
关闭。这个问题是not reproducible or was caused by typos .它目前不接受答案。 这个问题是由于错别字或无法再重现的问题引起的。虽然类似的问题可能是on-topi
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 关闭 9 年前。 Improve this
我是 Windows 批处理编程和 Stack Overflow 的新手,所以如果我问任何对你们经验丰富、才华横溢的人来说显而易见的问题,请原谅我。我正在使用 Windows 批处理 (.bat) 使
我正在使用 findstr 及其 /r 标志进行一些字符串验证,以允许使用正则表达式。特别是我想验证整数。 正则表达式 ^[0-9][0-9]*$ 对于非负数效果很好,但由于我现在也支持负数,所以我尝
我有两个文件: 1.txt: abc def 2.txt: abc 请注意,2.txt 仅包含 3 个字符,没有空行。现在,如果我这样做: findstr /S /I /L /A:02 "abc" *
我只想在他的文本文件中找到特定的行,所以我认为使用范围是个好主意。但我似乎可以在网上找到任何教程。请帮助.. 文本文件的例子 XXX scan report for 192.0.0.0 example
Windows 中的批处理文件有时会让人感到困惑。怎么办 findstr "^" 相当于找一个空文件夹,当^表示行首? for /d /r %1 %%A in (.) do ( dir /ad
我正在尝试使用 findstr 代替 grep 在准系统的 vanilla windows 框上(遗憾的是这是一个要求)。我有一些相对较大的文件 (1Gb+),我想提取那些不包括 MX、MXnn、BR
我需要使用 DOS 命令 FINDSTR 来搜索我们所有与其他类型文件(如 PDF、exe、dll 等)混合的源代码文件。 我不需要搜索那些二进制文件。有没有办法排除二进制文件? 我的命令看起来像 f
我有一个程序正在使用 findstr ,当找到字符串时 errorlevel返回 0当找不到字符串时 errorlevel返回 1 .好吧,没关系,我可以处理。 问题出在哪里,我找不到任何关于每个 e
这很简单……为什么第一个命令有效而第二个命令无效? Findstr 在我看来最适合在“dos”之类的命令中使用,而不是在 powershell 中使用。 Get-AppXProvisionedPack
PowerShell 的 DOS FINDSTR 等价物是什么? ?我需要在一堆日志文件中搜索“错误”。 最佳答案 这是快速答案 Get-ChildItem -Recurse -Include *.l
我正在尝试使用netstat -abn或Select-String来获取findstr命令的完整输出,但是由于仅列出了搜索字符串,因此无法正常工作。我正在寻找与grep在Linux上相同的行为,如果您
我正在尝试执行命令 findstr /RC:"h25v06.*hdf\"" "index.html" >temp.txt 得到跟随输出 index.html: FINDSTR: Cannot ope
我是一名优秀的程序员,十分优秀!