|
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
状态 离线
|
|
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 来自 上海
状态 离线
|
|
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 |
|