中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [原创]CMD批处理获取文件的ASCII码
<<   [1] [2]  >>   >
作者:
标题: [原创]CMD批处理获取文件的ASCII码 上一主题 | 下一主题
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『楼 主』:  [原创]CMD批处理获取文件的ASCII码

  利用FC命令的“执行二进制比较”参数/B来获取文件的ASCII码,并分别显示其ASCII的十六进制和十进制形式,理论上可以是获取任何文件的内容所对应的ASCII码。   说明:如果文件中含有中文或者ASCII码值比较大的字符,显示的ASCII码就会分开了,这是不可避免的。比如"啊"将显示为"B0 A1",因此其对应的十进制形式就会显示为"176 161"。   希望大家多测试一下,有bug或者错误的地方,请跟贴指出。感谢 electronixtar 提供建议。
::Code by lxmxn @ bbs.cn-dos.net
:::::::::: GetASCII.Bat ::::::::::::
::Date 22:50 2007-1-9

@echo off&mode con cols=80
:begin
cls
set/p file=请输入要处理的文件(Q 键直接退出此脚本):
	if /i "%file%"=="Q" goto :eof
	if "%file%"=="" goto error
set new=%random%
for %%a in (%file%) do set size=%%~za
	if "%size%"=="0" goto error
cls&fsutil file createnew %new% %size% >nul
echo=&&echo=文件内容所对应的ASCII码的十六进制形式依次为:&echo==========================================================
for /f "skip=1 tokens=3" %%a in ('fc /B %new% %file%') do (
	set /p=%%a <nul
)
echo=&echo==========================================================&echo=&echo=&echo=文件内容所对应的ASCII码的十进制形式依次为:&echo==========================================================
setlocal EnableDelayedExpansion
for /f "skip=1 tokens=3" %%a in ('fc /B %new% %file%') do (
	set num=%%a
	set /a num=0x!num!
	set /p=!num! <nul
)
del %new%
endlocal&echo;&echo==========================================================&echo;&pause
exit /b 0

:error
	cls&echo;&echo;
	echo         “输入错误” OR “文件大小为零”,请重新输入……
	del %new% >nul 2>nul
	set file=
	set new=
	pause>nul&goto :begin
[ Last edited by lxmxn on 2007-1-10 at 09:17 PM ]


   此帖被 +87 点积分        点击查看详情   
评分人:【 ccwan 分数: +5  时间:2007-1-10 21:06
评分人:【 9527 分数: +5  时间:2007-1-10 22:13
评分人:【 0401 分数: +2  时间:2007-1-11 01:40
评分人:【 redtek 分数: +11  时间:2007-1-11 02:18
评分人:【 pengfei 分数: +15  时间:2007-1-11 10:11
评分人:【 everest79 分数: +2  时间:2007-1-11 12:19
评分人:【 electronixtar 分数: +20  时间:2007-1-11 12:43
评分人:【 qasa 分数: +2  时间:2007-1-11 17:15
评分人:【 26933062 分数: +15  时间:2008-5-25 15:04
评分人:【 pusofalse 分数: +8  时间:2008-6-3 20:50
评分人:【 gool123456 分数: +2  时间:2010-10-14 01:56


2007-1-10 13:13
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
ccwan
金牌会员




积分 2725
发帖 1160
注册 2006-9-23
来自 河北廊坊
状态 离线
『第 2 楼』:  

除了钦佩没有什么别的了。^_^




三人行,必有吾师焉。 学然后知不足,教然后知困,然后能自强也。
2007-1-10 21:06
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
vkill
金牌会员





积分 4103
发帖 1744
注册 2006-1-20
来自 甘肃.临泽
状态 离线
『第 3 楼』:  

没明白


2007-1-11 01:17
查看资料  发送邮件  访问主页  发短消息  网志   编辑帖子  回复  引用回复
0401
中级用户

带走



积分 435
发帖 88
注册 2005-9-24
状态 离线
『第 4 楼』:  

这句漂亮
fsutil file createnew %new% %size%
这样创建后的文件其16进制全为0,也就不会与其他字符相同了。难得兄能有这样的细心发现这点,佩服啊。缺点是必须ADMIN组才能用。 www.cn-dos.net/forum/viewthrea ... 这里的方法也很漂亮,将文件分别与同字节的a和b比较,然后再sort就可以得到按字节顺序排列的16进制数了。


2007-1-11 01:37
查看资料  发短消息  网志   编辑帖子  回复  引用回复
electronixtar
铂金会员





积分 7493
发帖 2672
注册 2005-9-2
状态 离线
『第 5 楼』:  

呵呵,lxmxn的p处理太漂亮啦,可惜昨天加分加完了,下次记着给你加分啦


2007-1-11 01:49
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『第 6 楼』:  

  RE vkill :      这个批处理就是将文件的内容转化为ASCII的形式啊。比如现在有个文件file.txt的内容如下:
www.cn-dos.net
     那么运行这个批处理,输入file.txt之后,就会得到下面的ASCII码的十六进制和十进制形式:(不过要是ADMIN组的成员,局限性)
文件内容所对应的ASCII码的十六进制形式依次为: ========================================================= 77 77 77 2E 63 6E 2D 64 6F 73 2E 6E 65 74 0D 0A ========================================================= 文件内容所对应的ASCII码的十进制形式依次为: ========================================================= 119 119 119 46 99 110 45 100 111 115 46 110 101 116 13 10 ========================================================= 请按任意键继续. . .
  RE 0401 :   多谢兄的指点和鼓励。又有这么多方法可以学了。   RE electronixtar :   多谢兄的肯定,呵呵,我还要感谢兄的建议呢。   


2007-1-11 02:07
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
redtek
金牌会员





积分 2902
发帖 1147
注册 2006-9-21
状态 离线
『第 7 楼』:  

甚是欣赏lxmxn兄精彩代码!!! 不仅代码精彩而且还是一种创新~:))) 能够看到lxmxn和electronixtar兄的思想真是一种享受~:)




    Redtek,一个永远在网上流浪的人…… _.,-*~'`^`'~*-,.__.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._
2007-1-11 02:25
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
pengfei
银牌会员




积分 1218
发帖 485
注册 2006-7-21
来自 湖南.娄底
状态 离线
『第 8 楼』:  

原来fc可以这样, electronixtar兄知识面很广啊, lxmxn兄脚本功底越来越强了! ^_^




业精于勤而荒于嬉,形成于思而毁于随。
2007-1-11 11:19
查看资料  发送邮件  发短消息  网志  OICQ (573381312)  编辑帖子  回复  引用回复
Eblis
中级用户




积分 251
发帖 108
注册 2007-1-7
来自 湖南==>广州
状态 离线
『第 9 楼』:  

看不懂..能不能说明一下?


2007-1-11 11:54
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
pengfei
银牌会员




积分 1218
发帖 485
注册 2006-7-21
来自 湖南.娄底
状态 离线
『第 10 楼』:  

我也传一个用C写的文本ASCII码的十进制和十六进制转换程序. ascii.exe test.txt save.txt 如上程序有两个参数, 第一为要转换的文件名, 第二个为转换后保存的文件名. 第二个参数可以不要. 对中文字符转换十进制形式表示为负数, 十六进制形式为非正常显示.


   此帖被 +9 点积分       点击查看详情   
评分人:【 redtek 分数: +9  时间:2007-1-11 23:07


附件 1: ascii.rar (2007-1-11 12:52, 4.28 K, 下载附件所需积分 1 点 ,下载次数: 48)


业精于勤而荒于嬉,形成于思而毁于随。
2007-1-11 12:35
查看资料  发送邮件  发短消息  网志  OICQ (573381312)  编辑帖子  回复  引用回复
qasa
高级用户




积分 959
发帖 311
注册 2006-4-11
来自 广东-LianJiang
状态 离线
『第 11 楼』:  

佩服,思路很好。加分支持~~~


2007-1-11 17:15
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『第 12 楼』:  

Originally posted by Eblis at 2007-1-10 22:54: 看不懂..能不能说明一下?
  思路已经说了啊,还有哪些不懂呢?


   此帖被 +1 点积分    点击查看详情   
评分人:【 分数: +1  时间:2009-9-11 18:38


2007-1-12 07:15
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
hxuan999
中级用户

DOS之日


积分 337
发帖 161
注册 2006-11-4
状态 离线
『第 13 楼』:  

正好要这个,呵,谢谢了.




for /f %%h in (`echo hxuan`) do for /f %%x in (`echo hxuan`) do if %%h==%%x nul
2007-1-12 10:26
查看资料  发送邮件  发短消息  网志  OICQ (33899867)  编辑帖子  回复  引用回复
nicholasmaxwell
新手上路





积分 12
发帖 6
注册 2007-1-14
状态 离线
『第 14 楼』:  

庭好玩,收下了


2007-1-14 02:12
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
ytfsse
新手上路





积分 11
发帖 6
注册 2007-1-15
状态 离线
『第 15 楼』:  

好厉害呀


2007-1-15 12:45
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
<<   [1] [2]  >>   >
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


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



论坛跳转: