标题: [文本处理] 批处理如何将txt文本里列出的多行16进制数转换成10进制数 [打印本页]
作者: am873 时间: 2013-11-20 10:15 标题: 批处理如何将txt文本里列出的多行16进制数转换成10进制数
本帖最后由 pcl_test 于 2017-4-30 16:25 编辑
批处理如何把“大数进制转换代码”改为“大数文本转换?
源代码:http://www.bathome.net/viewthread.php?tid=17141&rpid=109904&ordertype=0&page=1#pid109904
想把 set 大数=111111111111111111111111111111
改为:从一个大数16进制文本a.txt读取,转换后把结果输出为16_10.txt
我的修改:
for /f "delims=" %%a in (a.txt) do (
set from=16
set to=10
call :XConvert %%a %from% %to% 结果
echo %%a---------------》%结果%) >>16_10.txt
pause
goto :eof
执行修改后的代码结果如下:
……
以零为除数的错误。
以零为除数的错误。
命令语法不正确。
请按任意键继续. . .
请教该如何修改?谢谢!!!
当a.txt的编码为ANSI时,执行BAT后是上面的结果,如果编码改为UTF-8则是一个空窗口
a.txt的内容如下
075583266236
EDA4CCF0
059236564291
32FF3A92
FEEBA9879CC6
C26A3A92
EC7D731CF816
D2319D03
A9ECF819CDDA
32D9A703
E17163AD8E50
64B5855B
6456DE80C62D
A08E80C6
C4A0BA12543C
54C9C3DB
6655309BF8AB
A4E1C2DB
44AEC69B2AB0
662BC439
EF38B3792445
107A81C6
C33D2AD6EAF0
F431865B
30D454645987
F4B4825B
55EBA33F69CF
F02D7FC6
E19D94F7598A
作者: foxJL 时间: 2013-11-20 10:20
你想把文本里的16进制换成10进制?
批处理不支持UTF-8编码。
作者: am873 时间: 2013-11-20 10:27
是的 想把文本里的16进制换成10进制。
该如何修改?谢谢。
作者: foxJL 时间: 2013-11-20 10:34
本帖最后由 foxJL 于 2013-11-20 10:35 编辑
qzwqzw的源代码,我只作小改动,
原贴地址:http://www.bathome.net/viewthrea ... mp;page=1#pid109904- @echo off & setlocal EnableDelayedExpansion
- for /f %%i in (a.txt) do (
- set 大数=%%i
- set from=16
- set to=10
- call :XConvert !大数! !from! !to! 结果
- echo [!from!进制] !大数!
- echo [!to!进制] !结果!
- )
- pause
- goto :eof
-
- :XConvert - X进制大数N转换为指定Y进制(X/Y不大于62)
- :: 参考链接:http://www.cppblog.com/baby-fly/archive/2009/10/24/99362.html
- :: http://www.cnblogs.com/phinecos/archive/2009/09/11/1564975.html
- setlocal EnableDelayedExpansion
- set 源数=%~1
- set 源进制=%~2
- set 目标进制=%~3
- set 返回值=%~4
- set 进制数列=0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
- :XCloop1
- set 位号=0
- set 模=0
- set 商=
- :XCloop2
- set 当前位=!源数:~%位号%,1!
- set 当前位值=-1
- :XCLoop3
- set /a 当前位值+=1
- if not "%当前位%"=="!进制数列:~%当前位值%,1!" goto :XCLoop3
- set /a 当前除数=模 * 源进制 + 当前位值
- set /a 当前商=当前除数 / 目标进制
- set 商=%商%!进制数列:~%当前商%,1!
- if "%商%"=="0" set 商=
- set /a 模=当前除数 %% 目标进制
- set /a 位号+=1
- if not "!源数:~%位号%,1!"=="" goto :XCloop2
- if "%商%"=="" set 商=0
- set 目标数=!进制数列:~%模%,1!%目标数%
- set 源数=%商%
- if not "%源数%"=="0" goto :XCloop1
- endlocal & set %返回值%=%目标数%
- goto :eof
复制代码
作者: am873 时间: 2013-11-20 10:42
可以了,谢谢foxJL老大。这个问题折腾3天了,终于解决。
太感谢了!!!!!
作者: 1270697389 时间: 2013-11-20 12:32
qzwqzw的源代码,我只作小改动,
原贴地址:
foxJL 发表于 2013-11-20 10:34
太厉害了!我得好好学习
作者: PowerShell 时间: 2013-11-20 12:42
本帖最后由 PowerShell 于 2013-11-20 12:46 编辑
如何把“大数进制转换代码”改为“大数文本转换 -----这标题真不通顺
powershell代码- [system.reflection.assembly]::loadwithpartialname("System.Text") | Out-Null
- [int32]$long = 1024 * 1024 * 128 #128MB
- $大字符串 = New-Object System.Text.StringBuilder($long)
-
- foreach ( $每个文件 in (Get-ChildItem -path 'e:\pscode\坛友am873\*.txt') )
- {
- foreach ($文件中的每一行 in (Get-Content -LiteralPath $每个文件) )
- {
- $文件中的每一行2 = ('0x' + $文件中的每一行) -as [int64]
- $大字符串.AppendLine($文件中的每一行2) | Out-Null
- }
-
- Add-Content -value $大字符串 -Encoding unicode -LiteralPath $($每个文件.fullName + '.txt')
- #生成 文件名.txt.txt
- $大字符串.clear()
- }
复制代码
作者: hzcxdgioa 时间: 2013-11-28 22:06
支持楼主的帖子。!!!!!!!!!!!
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |