中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-06-14 19:05
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [原创]CMD批处理获取文件的ASCII码
楼 主 [原创]CMD批处理获取文件的ASCII码 发表于 2007-01-10 13:13 ·  中国 湖北 武汉 电信
版主
★★★★★
积分 11,386
发帖 4,938
注册 2006-07-23 17:10
UID 59080
状态 离线

  利用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 ]
本帖最近评分记录 (共 11 条) 点击查看详情
评分人分数时间
ccwan +5 2007-01-10 21:06
9527 +5 2007-01-10 22:13
0401 +2 2007-01-11 01:40
redtek +11 2007-01-11 02:18
pengfei +15 2007-01-11 10:11
everest79 +2 2007-01-11 12:19
electronixtar +20 2007-01-11 12:43
qasa +2 2007-01-11 17:15
26933062 +15 2008-05-25 15:04
pusofalse +8 2008-06-03 20:50
gool123456 +2 2010-10-14 01:56
2 发表于 2007-01-10 21:06 ·  中国 河北 廊坊 三河市 移动
金牌会员
★★★★
积分 2,725
发帖 1,160
注册 2006-09-23 12:00
UID 63486
来自 河北廊坊
状态 离线
除了钦佩没有什么别的了。^_^
三人行,必有吾师焉。 学然后知不足,教然后知困,然后能自强也。
3 发表于 2007-01-11 01:17 ·  中国 甘肃 甘南藏族自治州 合作市 电信
金牌会员
★★★★
积分 4,103
发帖 1,744
注册 2006-01-20 13:00
UID 49241
性别 男
来自 甘肃.临泽
状态 离线
没明白
4 发表于 2007-01-11 01:37 ·  中国 北京 联通
中级用户
★★
带走
积分 435
发帖 88
注册 2005-09-24 19:22
UID 42793
状态 离线
这句漂亮
fsutil file createnew %new% %size%
这样创建后的文件其16进制全为0,也就不会与其他字符相同了。难得兄能有这样的细心发现这点,佩服啊。缺点是必须ADMIN组才能用。
http://www.cn-dos.net/forum/viewthread.php?tid=24715#pid151384
这里的方法也很漂亮,将文件分别与同字节的a和b比较,然后再sort就可以得到按字节顺序排列的16进制数了。
5 发表于 2007-01-11 01:49 ·  中国 四川 成都 教育网
铂金会员
★★★★
积分 7,493
发帖 2,672
注册 2005-09-02 00:00
UID 42173
性别 男
状态 离线
呵呵,lxmxn的p处理太漂亮啦,可惜昨天加分加完了,下次记着给你加分啦
6 发表于 2007-01-11 02:07 ·  中国 湖北 武汉 电信
版主
★★★★★
积分 11,386
发帖 4,938
注册 2006-07-23 17:10
UID 59080
状态 离线

  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 :

  多谢兄的肯定,呵呵,我还要感谢兄的建议呢。
  
7 发表于 2007-01-11 02:25 ·  中国 北京 联通
金牌会员
★★★★
积分 2,902
发帖 1,147
注册 2006-09-21 12:00
UID 63324
性别 男
状态 离线
甚是欣赏lxmxn兄精彩代码!!!
不仅代码精彩而且还是一种创新~:)))

能够看到lxmxn和electronixtar兄的思想真是一种享受~:)
    Redtek,一个永远在网上流浪的人……

_.,-*~'`^`'~*-,.__.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._
8 发表于 2007-01-11 11:19 ·  中国 湖南 娄底 新化县 电信
银牌会员
★★★
积分 1,218
发帖 485
注册 2006-07-21 21:24
UID 58987
来自 湖南.娄底
状态 离线
原来fc可以这样, electronixtar兄知识面很广啊, lxmxn兄脚本功底越来越强了! ^_^
业精于勤而荒于嬉,形成于思而毁于随。
9 发表于 2007-01-11 11:54 ·  中国 广东 广州 荔湾区 电信
中级用户
★★
积分 251
发帖 108
注册 2007-01-07 11:33
UID 75721
性别 男
来自 湖南==&gt;广州
状态 离线
看不懂..能不能说明一下?
10 发表于 2007-01-11 12:35 ·  中国 湖南 娄底 新化县 电信
银牌会员
★★★
积分 1,218
发帖 485
注册 2006-07-21 21:24
UID 58987
来自 湖南.娄底
状态 离线
我也传一个用C写的文本ASCII码的十进制和十六进制转换程序.

ascii.exe test.txt save.txt

如上程序有两个参数, 第一为要转换的文件名, 第二个为转换后保存的文件名. 第二个参数可以不要.

对中文字符转换十进制形式表示为负数, 十六进制形式为非正常显示.
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
redtek +9 2007-01-11 23:07
附件
ascii.rar (4.28 KiB, 下载附件所需积分 1 点, 下载次数: 48)
业精于勤而荒于嬉,形成于思而毁于随。
11 发表于 2007-01-11 17:15 ·  中国 广东 湛江 电信
高级用户
★★★
积分 959
发帖 311
注册 2006-04-11 14:08
UID 53665
性别 男
来自 广东-LianJiang
状态 离线
佩服,思路很好。加分支持~~~
12 发表于 2007-01-12 07:15 ·  中国 湖北 武汉 电信
版主
★★★★★
积分 11,386
发帖 4,938
注册 2006-07-23 17:10
UID 59080
状态 离线
Originally posted by Eblis at 2007-1-10 22:54:
看不懂..能不能说明一下?


  思路已经说了啊,还有哪些不懂呢?
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
+1 2009-09-11 18:38
13 发表于 2007-01-12 10:26
中级用户
★★
DOS之日
积分 337
发帖 161
注册 2006-11-04 05:27
UID 69523
性别 男
状态 离线
正好要这个,呵,谢谢了.
for /f %%h in (`echo hxuan`) do for /f %%x in (`echo hxuan`) do if %%h==%%x nul
14 发表于 2007-01-14 02:12 ·  中国 山东 青岛 电信
新手上路
积分 12
发帖 6
注册 2007-01-14 01:44
UID 76442
性别 男
状态 离线
庭好玩,收下了
15 发表于 2007-01-15 12:45 ·  中国 河南 洛阳 联通
新手上路
积分 11
发帖 6
注册 2007-01-15 08:42
UID 76568
性别 男
状态 离线
好厉害呀
论坛跳转: