联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!
@echo off ::::::::Any2Bat {s11ss 2007-12-2}:::::::: ::思路:利用debug获得原文件16进制代码,然后再次利用debug构造生成原文件的bat代码。 setlocal set f="%~f1" if not exist %f% (echo File doesn't exist!&&goto :eof) ::写临时文件 set len=%~z1 set/a end=0x100+%len%-1 call :10to16 %end% pushd %tmp% >t1 call echo d100 %%r%end%%% >>t1 echo q >nul copy %f% t2 type t1|debug t2|more|find ":">t3 ::读取临时文件t3,获得16进制代码 set "i= %%a %%b %%c %%d %%e %%f %%g %%h %%i %%j %%k %%l %%m %%n %%o %%p %%q" for /f "delims=" %%a in (t3) do set/a lines+=1 set/a m=1 setlocal enabledelayedexpansion for /f "tokens=1-17 delims=- " %%a in (t3) do ( if !m! equ %lines% goto :lastline set "hex!m!=%i%" set/a m+=1 ) :lastline set/a m-=1 set/a remain=(%len%-16*%m%+1)*3 call set remain=%%i:~0,%remain%%% for /f "tokens=1-17 delims=- " %%a in ('^<t3 more +%m%') do set "hex%lines%=%remain%" ::写bat call :10to16 %len% set t=^>^>%f%.bat echo %t% @echo off %t% ^<^"%%^~f0^" more +4 ^|debug ^>nul %t% move t "%~nx1" %t% goto :eof for /l %%a in (1,1,%lines%) do ( call set hex%%a=%%hex%%a:*:=e%% %t% !hex%%a! ) %t% rcx %t% !r%len%! %t% n t %t% w %t% q for /l %%a in (1,1,3) do (del t%%a) goto :eof :10to16 set "h=0123456789ABCDEF" set/a q=%1 :1c set/a r=%q%%%16 set/a q=%q%/16 call set r=%%h:~%r%,1%% call set r%1=%r%%%r%1%% if not %q% equ 0 goto :1c
Originally posted by vkill at 2007-12-2 09:54 PM: 像这样的问题,我始终觉得 debug 不好,要是文件大了就慢的,http://www.cn-dos.net/forum/viewthread.php?tid=35808 还是用vbs快多了,不是打击s11ss兄,用最 ...