中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [求助]如何去掉文本前两行,要求保留空格
作者:
标题: [求助]如何去掉文本前两行,要求保留空格 上一主题 | 下一主题
HUNRYBECKY
银牌会员





积分 1179
发帖 442
注册 2006-9-9
状态 离线
『楼 主』:  [求助]如何去掉文本前两行,要求保留空格

我有一个注册表如下:
?
cls
REGEDIT4

;SETUPPATH;D:\\OFFICE2003
[HKEY_CLASSES_ROOT\Installer\Products\4080110900063D11C8EF10054038389C]
"ProductName"="Microsoft Office Professional Edition 2003"
现在的问题是我要去掉前两行的?和cls,我使用下面的批处理
for /f "skip=2 tokens=1,2 delims=:" %%a in ('findstr /n ".*" "%ravel%"') do (if "%%b"=="" (echo.>>"%crackfile%") else (echo %%b>>"%crackfile%"))
虽然能输出空行,但是如果文本中有:的话也会被忽略掉后面的部分,如何解决。在线等待。。。。。。。。。。

2008-7-24 22:23
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『第 2 楼』:  

tokens=1-2*

2008-7-24 22:25
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
HUNRYBECKY
银牌会员





积分 1179
发帖 442
注册 2006-9-9
状态 离线
『第 3 楼』:  

问题解决,如下
rem for /f "skip=2 tokens=1,2 delims=:" %%a in ('findstr /n ".*" "%ravel%"') do (if "%%b"=="" (echo.>>"%crackfile%") else (echo %%b>>"%crackfile%"))
for /f "delims=" %%a in ('findstr /n .* "%ravel%"') do (
   set str=%%a
   setlocal enabledelayedexpansion
   set str=!str:*:=!
   echo.!str!>>"%crackfile%"
   endlocal
)


不知道有没有更好的方法。

2008-7-24 22:31
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
HUNRYBECKY
银牌会员





积分 1179
发帖 442
注册 2006-9-9
状态 离线
『第 4 楼』:  

好久没有见到兄弟了。哈哈。能否清楚点?我试过好象不行。能否把代码发出来。

2008-7-24 22:31
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
obsolete
初级用户





积分 192
发帖 72
注册 2005-7-31
状态 离线
『第 5 楼』:  


for /f "skip=2 tokens=1,* delims=:" %%a in ('findstr /n .* input.txt') do echo.%%b>>result.txt


2008-7-24 22:38
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『第 6 楼』:  

直接在命令行执行下面的试试:
for /f "skip=2 tokens=1* delims=: eol=~" %a in ('findstr /n .* your_reg_file') do @echo.%b>>result.txt


2008-7-24 22:41
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『第 7 楼』:  

看来我慢了一步哈 ^_^

我也好久没看见兄了啊,在忙什么呢?

2008-7-24 22:43
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
HUNRYBECKY
银牌会员





积分 1179
发帖 442
注册 2006-9-9
状态 离线
『第 8 楼』:  

echo.%%b 这个东西好,我原来使用IF....ELSE 判断,没有达到效果。谢谢obsolete兄弟,非常满足要求。

for /f "skip=2 tokens=1,* delims=:" %%a in ('findstr /n .* "%ravel%"') do (if "%%b"=="" (echo.>>"%crackfile%") else (echo %%b>>"%crackfile%"))
这样也可以,我只是把tokens=1,* 搞成tokens=2,* ,呵呵,所以老是出来错误。

[ Last edited by HUNRYBECKY on 2008-7-24 at 10:51 PM ]

2008-7-24 22:45
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
HUNRYBECKY
银牌会员





积分 1179
发帖 442
注册 2006-9-9
状态 离线
『第 9 楼』:  

回L兄,最近整理关于加密解密的帖子,在前辈的基础上做了很多修改,这个批处理基本上可以解密所有的文本加密了。感觉还是 copy nul+%ravel% "%crackfile%"命令最简单方便。
下面整理完成了解密的帖子。
@echo off
mode con: cols=80 lines=25
for /f "tokens=2 delims=: " %%a in ('chcp') do set lan_chcp=%%a
:index
color 27
cls
echo                        ╭───────────────╮
echo                        │                              │
echo    ╭─────────┤      文 本 解 密 终 极 版    ├─────────╮
echo    │                  │                              │                  │
echo    │                  ╰───────────────╯                  │
echo    │                                                                      │
echo    │                                                                      │
echo    │     本工具用来对混淆编码类型的加密文本进行解密,能自动分辨加密类型!   │
echo    │     本批处理是根据cn-dos等多位前辈的帖子整理出来的,在此表示感谢      │
echo    │     请输入批处理回车,也可拖放批处理至本窗体或本解密文件.             │
echo    │     解密成功后会在本程序目录下生成"crack_原文件名" 格式的文件.       │
echo    │     注意:解密后将替换本目录下的"crack_原文件名"文件,所以请自行备份.  │
echo    │                                                                      │
echo    │                                                                      │
echo    ╰───────────────────────────────────╯
echo.
if not "%1"=="" set ravel=%*
if "%ravel%"=="" set /p ravel=请输入要解密的文件全名:
if "%ravel%"=="" goto:err
dir /a "%ravel%"
cls
if "%errorlevel%"=="0" goto:go

:err
cls
echo                              ╭──────────╮
echo          ╭─────────┤   文  件  错  误   ├────────╮
echo          │                  ╰──────────╯                │
echo          │                                                          │
echo          │    指定文件不存在或输入了空字符串!                       │
echo          │    按任意键重新输入...                                   │
echo          │                                                          │
echo          ╰─────────────────────────────╯
echo.
echo.
pause >nul
set ravel=
goto index

:go
rem 使用TYPE命令(使用变数%%a字符写入文件首行加密文件,适合非批处理如注册表加密的解密)试探加密类型,如果失败则使用其他方式解密,注意这里的变量crackfile需要完整路径,否则拖动方式产生的文件会在用户当前目录
set "ravel=%ravel:"=%"
for /f "tokens=*" %%I in ("%ravel%") do set crackfile=%%~dpIcrack_%%~nxI
if exist "%crackfile%" del /f/q "%crackfile%"
type "%ravel%"|FINDSTR /I "%%a.*%%a.*%%a.*%%a.*%%a.*%%a.*%%a.*%%a.*%%a.*%%a"
IF "%ERRORLEVEL%"=="1" goto:try
type "%ravel%"|FINDSTR /I/V "%%a.*%%a.*%%a.*%%a.*%%a.*%%a.*%%a.*%%a.*%%a.*%%a">%crackfile%
goto:end

:try
rem 1.使用最简单的COPY命令,会产生两行多余字符,不会过滤空行,如果是注册表文件必须使用方法二去掉前两行
rem ----------------------------------------------------------------------
rem copy nul+%ravel% "%crackfile%"
rem goto :end
rem ----------------------------------------------------------------------

rem 2.使用for结合findstr /n 命令,也只需要一句命令非常简单,注意如果不使用findstr /n则会过滤掉空行
for /f "skip=2 tokens=1,* delims=:" %%a in ('findstr /n .* "%ravel%"') do echo.%%b>>"%crackfile%"
rem for /f "skip=2 delims=" %%a in ('findstr /n .* "%ravel%"') do (
rem    cls
rem    set str=%%a
rem    setlocal enabledelayedexpansion
rem    set str=!str:*:=!
rem    echo.!str!>>"%crackfile%"
rem    endlocal
rem )
goto:end

rem 3.使用debug方法,此方法也会产生多余行,需要FOR命令做二次处理,注意变量"%~dp1crack_%~nx1"在CALL中的应用.
copy %ravel% unenc.tmp
echo e 100 40,40,40,40>~debug
echo w>>~debug
echo q>>~debug
debug unenc.tmp<~debug
del ~debug
chcp %lan_chcp%
cls
call :ok %ravel%
goto :end
:ok
type unenc.tmp|FINDSTR /I/V "@@@@">unenc1.tmp
for /f "skip=2 tokens=1,2 delims=:" %%a in ('findstr /n ".*" "unenc.tmp"') do (if "%%b"=="" (echo.>>unenc1.tmp) else (echo %%b>>unenc1.tmp))
for /f "skip=2 delims=" %%a in (unenc.tmp) do echo "%%a">>unenc1.tmp
unenc1.tmp "%~dp1crack_%~nx1"
del /q/f unenc.tmp
del /q/f unenc1.tmp

:end
cls
echo                              ╭──────────╮
echo          ╭─────────┤   解  密  成  功   ├────────╮
echo          │                  ╰──────────╯                │
echo          │                                                          │
echo          │    恭喜, 批处理解密成功!                                 │
echo          │                                                          │
echo          ╰─────────────────────────────╯
echo 按任意键退出...
pause >nul
exit
[ Last edited by HUNRYBECKY on 2008-7-24 at 11:00 PM ]

2008-7-24 22:57
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
fastslz
铂金会员

DOS一根葱


积分 5493
发帖 2315
注册 2006-5-1
来自 上海
状态 离线
『第 10 楼』:  

都复杂化了^_^
more +2 input.txt>result.txt


   此帖被 +4 点积分     点击查看详情   
评分人:【 lxmxn 分数: +4  时间:2008-7-24 23:06




第一高手    第二高手

2008-7-24 23:02
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
HUNRYBECKY
银牌会员





积分 1179
发帖 442
注册 2006-9-9
状态 离线
『第 11 楼』:  

对了。for /f "skip=2 tokens=1* delims=: eol=~" %a in ('findstr /n .* your_reg_file') do @echo.%b>>result.txt
测试还是发现问题,如果批处理中有以冒号开头如“:start”则结果会把冒号“:”过滤掉。使用三楼的方法则不会过滤。不知道有没有解决方法,估计是使用findstr /n加行号后本身就有:所引起的。

[ Last edited by HUNRYBECKY on 2008-7-24 at 11:27 PM ]

2008-7-24 23:07
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
HUNRYBECKY
银牌会员





积分 1179
发帖 442
注册 2006-9-9
状态 离线
『第 12 楼』:  

more +2 input.txt>result.txt
兄弟的方法通不过,如果使用DEBUG加密的话输出的是空文本

2008-7-24 23:11
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





积分 9023
发帖 5017
注册 2007-5-31
状态 离线
『第 13 楼』:  

凑热闹
sed "1,2d" a.txt
sed.exe
http://upload.cn-dos.net/img/561.zip



2008-7-25 12:09
查看资料  发短消息 网志   编辑帖子  回复  引用回复
yishanju
银牌会员

[b]看你妹啊[/b]


积分 1488
发帖 1357
注册 2006-5-20
状态 离线
『第 14 楼』:  

sed 处理文本很好玩,我昨天刚学的SED 然后就把一千多个文本给处理出来了
我装的gnu sed 4.1.5




有问题请发论坛或者自行搜索,再短消息问我的统统是SB
2008-7-25 12:50
查看资料  发短消息 网志   编辑帖子  回复  引用回复
HUNRYBECKY
银牌会员





积分 1179
发帖 442
注册 2006-9-9
状态 离线
『第 15 楼』:  

SEd 是个好工具。简单方便。

2008-7-30 08:38
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: