标题: [原创]Exe2Bat 纯p处理版
[打印本页]
作者: q8249014
时间: 2009-12-3 19:44
标题: [原创]Exe2Bat 纯p处理版
获取hex值的原理参考了 lxmxn 的 [CMD批处理获取文件的ASCII码] 表示感谢
http://www.cn-dos.net/forum/viewthread.php?tid=26521&fpage=1&highlight=CMD%E6%89%B9%E5%A4%84%E7%90%86%E8%8E%B7%E5%8F%96%E6%96%87%E4%BB%B6%E7%9A%84ASCII%E7%A0%81
最大支持 [65280 字节]。由于10k的文件在编码时速度就已经很慢了,所以也不
想在扩充了。其实简单的修改一下代码就可支持大于64k的文件了,有兴趣的朋
友可以自己扩充一下。
如果对大文件进行处理还是建议采用高级语言编写的Exe2Bat
这段代码仅作为一个演示,如果首次编码出现问题请再次运行即可
:: Code by-q8249014 CMD@XP Exe2Bat.cmd
:: update 2010-1-8
@echo off&endlocal&setlocal enabledelayedexpansion
set /a "count=0,str=240,var=%random%%%10"
set "hx=0123456789ABCDEF"
set /p file=请输入文件的绝对路径 [建议直接将文件拖放到此窗口中,最大 65280 字节]:&cls
for /f "eol=? delims=" %%i in ("!file!") do (if not exist "%%~$:i.\*" (
set "expname=%%~xi"&set /a "size=%%~zi-1"))
if not defined size echo.输入错误?&%0
if %size% NEQ -1 (if 65279 LSS %size% echo.文件太大了!&%0) else (echo.0 字节?&%0)
2>nul del /a /q /f cmp_.ps
>nul fsutil file createnew "%~dp0cmp_.ps" %size%
>>"%~dp0cmp_.ps" <nul set/p"=%var%"
(echo.@echo off
echo.^>nul ^(chcp 437^&graftabl 936^)
echo.more +6 %%0^|debug
echo.2^>nul del /a /q /f new_%expname%^&ren tmp_ new_%expname%
echo.pause
echo.exit/b)>"%~dp0test_.bat"
set "file=!file:"=!"
echo.正在对文件进行编码,请稍后…………&echo.
(for /f "skip=1 tokens=1,3 delims=: " %%i in ('fc /b "%~dp0cmp_.ps" "!file!"') do (
set /a "offset=0x%%i,newline=count&15"
if !newline! EQU 0 call :Dxh
if !offset! EQU !count! (<nul set /p"= %%j") else (
set /a addzero=offset-count
for /l %%i in (1 1 !addzero!) do (
<nul set /p"= 00"
set /a "count+=1,newline=count&15"
if !newline! EQU 0 call :Dxh)
<nul set /p"= %%j")
set /a count+=1
)
echo.)>>"%~dp0test_.bat"
2>nul del /a /f cmp_.ps
set /a str=size-15
set "data=rcx ^!h^! "n tmp_" w q"
:Dxh
set /a str+=16
set h=
(for /l %%i in (1 1 8) do (
if !str! GTR 0 (
set /a "n=str&15,str>>=4"
call set h=%%hx:~!n!,1%%!h!
)
)
set str=%str%)
(for %%i in (%data%) do (>>"%~dp0test_.bat" echo.%%~i))&&goto :End
if %count% neq 0 echo.
<nul set /p"=e %h%"
goto :eof
:End
echo.文件编码成功!
echo.
echo.新文件绝对路径:%~dp0test_.bat
echo.
pause
exit/b
[
Last edited by q8249014 on 2010-1-9 at 21:12 ]
作者: aries215
时间: 2009-12-3 19:57
纯p处理的是值得支持的!!
顶楼主!
作者: HAT
时间: 2009-12-5 02:21
另一个:
http://www.bathome.cn/viewthread.php?tid=6570#pid42500
作者: yhp1996
时间: 2009-12-5 22:14
标题: 牛人
谢了!
作者: ZJHJ
时间: 2009-12-7 16:52
研究一下
作者: ZJHJ
时间: 2009-12-12 00:29
纯p版比用debug转换要慢的多。
巧妙之处在于fsutil file createnew "tme.txt" %size%和用了fc
可以转换大于64K文件,但恢复时debug不能转换大于64K文件。
作者: q8249014
时间: 2010-1-9 21:15
更新了一下
想转换大于64k只需分段转换即可
即:65280 字节 为1段