[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] 批处理如何将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

你想把文本里的16进制换成10进制?
批处理不支持UTF-8编码。

TOP

是的 想把文本里的16进制换成10进制。
该如何修改?谢谢。

TOP

本帖最后由 foxJL 于 2013-11-20 10:35 编辑

qzwqzw的源代码,我只作小改动,
原贴地址:http://www.bathome.net/viewthrea ... mp;page=1#pid109904
  1. @echo off & setlocal EnableDelayedExpansion
  2. for /f %%i in (a.txt) do (
  3. set 大数=%%i
  4. set from=16
  5. set to=10
  6. call :XConvert !大数! !from! !to! 结果
  7. echo [!from!进制] !大数!
  8. echo [!to!进制] !结果!
  9. )
  10. pause
  11. goto :eof
  12. :XConvert - X进制大数N转换为指定Y进制(X/Y不大于62)
  13. :: 参考链接:http://www.cppblog.com/baby-fly/archive/2009/10/24/99362.html
  14. ::           http://www.cnblogs.com/phinecos/archive/2009/09/11/1564975.html
  15. setlocal EnableDelayedExpansion
  16. set 源数=%~1
  17. set 源进制=%~2
  18. set 目标进制=%~3
  19. set 返回值=%~4
  20. set 进制数列=0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
  21.         :XCloop1
  22.         set 位号=0
  23.         set 模=0
  24.         set 商=
  25.                 :XCloop2
  26.                 set 当前位=!源数:~%位号%,1!
  27.                 set 当前位值=-1
  28.                         :XCLoop3
  29.                         set /a 当前位值+=1
  30.                         if not "%当前位%"=="!进制数列:~%当前位值%,1!" goto :XCLoop3
  31.                 set /a 当前除数=模 * 源进制 + 当前位值
  32.                 set /a 当前商=当前除数 / 目标进制
  33.                 set 商=%商%!进制数列:~%当前商%,1!
  34.                 if "%商%"=="0" set 商=
  35.                 set /a 模=当前除数 %% 目标进制
  36.                 set /a 位号+=1
  37.                 if not "!源数:~%位号%,1!"=="" goto :XCloop2
  38.         if "%商%"=="" set 商=0
  39.         set 目标数=!进制数列:~%模%,1!%目标数%
  40.         set 源数=%商%
  41.         if not "%源数%"=="0" goto :XCloop1
  42. endlocal & set %返回值%=%目标数%
  43. goto :eof
复制代码
1

评分人数

TOP

可以了,谢谢foxJL老大。这个问题折腾3天了,终于解决。
太感谢了!!!!!

TOP

qzwqzw的源代码,我只作小改动,
原贴地址:
foxJL 发表于 2013-11-20 10:34



    太厉害了!我得好好学习
初九的冬天

TOP

本帖最后由 PowerShell 于 2013-11-20 12:46 编辑

如何把“大数进制转换代码”改为“大数文本转换  -----这标题真不通顺

powershell代码
  1. [system.reflection.assembly]::loadwithpartialname("System.Text") | Out-Null
  2. [int32]$long = 1024 * 1024 * 128 #128MB
  3. $大字符串 = New-Object System.Text.StringBuilder($long)
  4. foreach   (  $每个文件  in (Get-ChildItem    -path 'e:\pscode\坛友am873\*.txt') )
  5. {
  6. foreach ($文件中的每一行   in  (Get-Content -LiteralPath  $每个文件)  )
  7. {
  8. $文件中的每一行2 = ('0x' + $文件中的每一行) -as  [int64]
  9. $大字符串.AppendLine($文件中的每一行2) | Out-Null
  10. }
  11. Add-Content  -value $大字符串   -Encoding unicode   -LiteralPath  $($每个文件.fullName  + '.txt')
  12.     #生成  文件名.txt.txt
  13.     $大字符串.clear()
  14. }
复制代码
脚本是写给人看的,是写给用户看的,而不是写给机子看的
用户能看懂、会修改的脚本,才是好脚本。
写易懂的powershell脚本帮人解决问题,进而让用户学会自渔,吾所愿也

TOP

支持楼主的帖子。!!!!!!!!!!!

TOP

返回列表