?? any2bat.txt
字號:
@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
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -