Board logo

标题: [原创]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段