中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
作者:
标题: [原创]Exe2Bat 纯p处理版 上一主题 | 下一主题
q8249014
初级用户





积分 175
发帖 45
注册 2007-8-4
状态 离线
『楼 主』:  [原创]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 ]

2009-12-3 19:44
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
aries215
初级用户





积分 29
发帖 46
注册 2009-6-9
状态 离线
『第 2 楼』:  

纯p处理的是值得支持的!!
顶楼主!

2009-12-3 19:57
查看资料  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





积分 9023
发帖 5017
注册 2007-5-31
状态 离线
『第 3 楼』:  

另一个:
http://www.bathome.cn/viewthread.php?tid=6570#pid42500



2009-12-5 02:21
查看资料  发短消息 网志   编辑帖子  回复  引用回复
yhp1996
新手上路





积分 8
发帖 8
注册 2009-8-28
状态 离线
『第 4 楼』:  牛人

谢了!

2009-12-5 22:14
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
ZJHJ
高级用户





积分 609
发帖 374
注册 2006-8-2
状态 离线
『第 5 楼』:  

研究一下

2009-12-7 16:52
查看资料  发短消息 网志   编辑帖子  回复  引用回复
ZJHJ
高级用户





积分 609
发帖 374
注册 2006-8-2
状态 离线
『第 6 楼』:  

纯p版比用debug转换要慢的多。
巧妙之处在于fsutil file createnew "tme.txt" %size%和用了fc
可以转换大于64K文件,但恢复时debug不能转换大于64K文件。

2009-12-12 00:29
查看资料  发短消息 网志   编辑帖子  回复  引用回复
q8249014
初级用户





积分 175
发帖 45
注册 2007-8-4
状态 离线
『第 7 楼』:  

更新了一下

想转换大于64k只需分段转换即可

即:65280 字节 为1段

2010-1-9 21:15
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: