标题: [文本处理] [已解决]如何用批处理对文本砍头去尾保留有用信息? [打印本页]
作者: batpro 时间: 2011-7-5 20:46 标题: [已解决]如何用批处理对文本砍头去尾保留有用信息?
本帖最后由 batpro 于 2011-7-6 08:12 编辑
在1.txt中- HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run
- HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run
- \360tray
- \360safe
- HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run
- \StormCodec_Helper
- HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Winlogon
- HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ShellExecuteHooks
- HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\SharedTaskScheduler
- HKEY_CURRENT_USER\Control Panel\Desktop
复制代码
如何用bat砍头去尾,保留有用信息,生成2.txt:- HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run
- \360tray
- \360safe
- HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run
- \StormCodec_Helper
复制代码
说明:去除下行无键值的[key_行]
保留其他部分
作者: CrLf 时间: 2011-7-5 22:12
看了楼主在卡饭的帖子,很为楼主的执着和分享精神感动,可是想帮忙却不知从何帮起,主要是搞不清楚几个问题:- 1、楼主说的规则是“去除下行无键值的[key_行]”,但是所举的例子并没有很明显的迎合这条规则之处
- 2、第一部分的第1行为什么在第二部分中被挪到第7行?感觉根本没有规律啊
- 3、\360safe 这个键值为何在第二部分里出现了两次呢?
复制代码
不管是否符合楼主题意,这里先提供一个砍头去尾的常用办法:- @echo off
- (for /f "skip=1 delims=" %%a in (1.txt) do (
- if defined str echo;!str:~1!
- endlocal
- set "str=#%%a"
- setlocal enabledelayedexpansion
- ))>2.txt
复制代码
如果楼主觉得用颜色、字体来发帖更利于表达,那请在3楼发一贴不用code的,虽然这有违版规,但是对于开发实用批处理项目的爱好者,本人绝对支持,如因此被扣分,算我头上。
仅此一次,下不为例哦
作者: ArdentMan 时间: 2011-7-5 22:17
本帖最后由 ArdentMan 于 2011-7-5 22:49 编辑
- @Echo Off&SetLocal EnableDelyaedExpansion
- (For /F %%I IN ('Type 1.txt^&Echo End') Do (
- Set "Str=%%I"
- If "!Var:~,1!" EQU "\" (
- Echo !Var!
- ) Else (
- If "!Str:~,1!" EQU "\" Echo !Var!
- )
- Set "Var=%%I"
- ))>2.txt
- Start 2.txt
复制代码
作者: CrLf 时间: 2011-7-5 22:23
3# ArdentMan
这种非常特殊的情况下,可以用 %%~pa 来代替 !Str:~,1!,以简化代码、提高效率
作者: batpro 时间: 2011-7-5 22:46
2# zm900612
这点抱歉,一直在看帖子没留言自己发重复了
作者: batpro 时间: 2011-7-5 23:18
我正在写SrengLOG智能分析助手一键查杀版,但查杀时要对注册表项进行处理生成完整的注册表键值
所以对于任何一个中毒的Windows操作系统扫描出来的日志如附件一:SRengLOG.LOG
运行复制代码
会生成 不含有“{”的木马注册表键值
==========================================================
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run]
<Explorer><C:\WINDOWS\system32\drivers\TXP1atform.exe>
[HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows]
[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run]
<updater><C:\WINDOWS\system32\updater.exe> []
[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Winlogon]
[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Windows]
[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Winlogon]
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ShellExecuteHooks]
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\ShellServiceObjectDelayLoad]
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\Notify\WgaLogon]
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\SharedTaskScheduler]
[HKEY_CURRENT_USER\Control Panel\Desktop]
<SCRNSAVE.EXE><C:\WINDOWS\system32\透明七~1.SCR> [Microsoft Corporation] (这是正常的,可以添加白名单排除)
=====================================================================
现在需要对他进行处理
生成一个完整的注册表键比如:
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run\Explorer
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run\updater
这是要得到的结果
由于我想不通怎么才能得到,所有问了两天都没提出个好问题来
作者: batpro 时间: 2011-7-5 23:24
本帖最后由 batpro 于 2011-7-5 23:27 编辑
如果一定要说特征的话就是要求在要处理的文本中
HKEY_~~~任意注册表路径~~~~+~~~~~任意键值~~~~~
作者: jsbba 时间: 2011-7-5 23:45
郁闷啊 ,看不懂 ,好气人
作者: CrLf 时间: 2011-7-5 23:47
先来一个比较不通用的,借用 3 楼框架:- @Echo Off&SetLocal EnableDelayedExpansion
- set hh=^
-
-
- For /F "skip=1 delims=" %%I IN (1.txt) Do (
- If "%%~pI" neq "\" (
- set str=!hh!%%I
- ) else (
- set var=!var!!str!!hh!%%I
- set str=
- )
- )
- for /f "delims=" %%a in ("!var!") do echo %%a
- pause
复制代码
作者: CrLf 时间: 2011-7-5 23:53
这个是通用性强的:- @Echo Off
- (For /F "skip=1 delims=" %%I IN (1.txt) Do (
- for /f "tokens=1* delims=;" %%a in ("!var!;!str!") do (
- endlocal
- set var=%%a
- set str=%%b
- )
- set var=%%I
- setlocal enabledelayedexpansion
- If "%%~pI" neq "\" (
- set str=!var!
- ) else (
- if defined str echo !str!
- set str=
- echo !var!
- )
- ))>2.txt
- pause
复制代码
作者: batpro 时间: 2011-7-6 00:12
谢谢大家的辛苦
我继续测试,过几天在换个思路问一问
作者: terse 时间: 2011-7-6 02:22
以我的判断 这样处理不知可行不- @Echo Off&SetLocal EnableDelayedExpansion
- For /F "tokens=*" %%i IN (1.txt) Do (
- set "str=%%i"
- if "!str:~,1!" equ "\" (
- if defined var (echo !var!&set var=&echo %%i) ELSE echo %%i
- ) else set var=%%i
- )
- pause
复制代码
作者: batpro 时间: 2011-7-6 08:12
12# terse
高手,
经过少量日志分析,此代码貌似可以实现这个功能
谢谢,以后还望多学习学习
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |