【问题标题】:Batch - Convert a line in a text file from integer to ascii批处理 - 将文本文件中的一行从整数转换为 ascii
【发布时间】:2017-12-02 03:23:19
【问题描述】:

我有一个文件 (file.txt) 只包含一行(我已将所有行连接为一个)。 所以我有以下行:

85;048;048;057;048;055; 045 ;84;048;048;057;055;055

我想要包含由

分隔的每个数字的 ASCII 转换的 file.txt
;

所以 file.txt 应该包含:

U00907 - T00977

我尝试过使用循环,但它确实不起作用:

set content=
for /f "delims=;" %%i in (file.txt) do (
  cmd /c exit %%i
  Set "char=!=ExitCodeAscii!"
  set content=%content% %char%
)

有什么想法吗?

【问题讨论】:

  • 根据您预期的 txt 文件输出 U00907 - T00977,您可能需要添加额外的逻辑来防止出现 U00907-T00977 结果。该序列完全忽略了您应该包含在您的行中的空格。 前面的 0 没有任何区别,因此您的文本行应与此类似:85;048;048;057;048;055;32;045;32;84;048;048;057;055;055
  • @compo : Observation1: 在示例数据中,045 两侧有两个空格字符 - 也许这些是字面意思(无论这是否是空格独有的 - 我的水晶球有点雾...观察2:有一个数据元素048。需要我提醒你*八进制*效果吗?
  • @Magoo,在问题正文的原始版本和编辑版本中,045 两侧似乎只有一个空格。我的评论不是试图回答,只是源数据更正。
  • @compo:是的 - 有两个空格 - 045 的每一侧都有一个空格。我可能 - 好吧,没有“可能” - 在那里模棱两可。有趣的是,048 在exit 语句中not 被解释为八进制,事实上,分配给 errorlevel 的值在所有情况下都显示为十进制 - 无论前导如何0。书籍的另一个怪癖。

标签: file batch-file text ascii data-conversion


【解决方案1】:

一些小的逻辑错误:使用delims=;,您只使用第一个标记85,而忽略其余部分。您需要一个循环来获取file.txt 的每一行,并需要另一个循环来处理每一行中的标记(一个简单的for 没有/f)。你需要delayed expansion。

@echo off
setlocal enabledelayedexpansion
for /f "delims=" %%i in (file.txt) do (
  set content=
  for %%a in (%%i) do (
    cmd /c exit %%a
    Set "char=!=ExitCodeAscii!"
    set content=!content!!char!
  )
  echo !content:-= - !
)

如果您确定file.txt 只包含一行(或者您不关心其余的行),您可以将第一个for /f 循环替换为<file.txt set /p string= 并使用
for %%a in (%string%) do ( 进行处理

【讨论】:

  • 请参阅我对 Compo 对问题初始文本的评论。我可能会稍微改变你的方法。
  • 哇,我印象深刻。在几个小时(分钟)内非常快速的响应。似乎是斯蒂芬的好答案。我需要测试一下。也非常感谢 Magoo 和 Compo。你为我节省了很多时间!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-05
  • 2011-01-14
  • 1970-01-01
  • 2012-01-10
  • 2023-04-09
  • 1970-01-01
相关资源
最近更新 更多