【问题标题】:Reading a specific part of a text file using Batch使用批处理读取文本文件的特定部分
【发布时间】:2017-03-20 08:29:33
【问题描述】:

我有一个 .h 文件,其中包含这些行,从第 8 行到第 23 行:

#define SW_VERSION_BYTE_14          '0'
#define SW_VERSION_BYTE_13          '1'
#define SW_VERSION_BYTE_12          '5'
#define SW_VERSION_BYTE_11          '.'
#define SW_VERSION_BYTE_10          '0'
#define SW_VERSION_BYTE_9           '0'
#define SW_VERSION_BYTE_8           '5'
#define SW_VERSION_BYTE_7           '.'
#define SW_VERSION_BYTE_6           '0'
#define SW_VERSION_BYTE_5           '0'
#define SW_VERSION_BYTE_4           '0'
#define SW_VERSION_BYTE_3           '.'
#define SW_VERSION_BYTE_2           '0'
#define SW_VERSION_BYTE_1           '0'
#define SW_VERSION_BYTE_0           '0' /* LSB */

我需要从该文件中提取#define 的数字并将其保存在一个变量中,以便:

var==015005000000

我该怎么办?

【问题讨论】:

  • 文件中是否还有其他以#define SW_VERSION_BYTE_ 开头的行?他们在你展示的之上吗?到目前为止,您自己尝试过什么?

标签: batch-file command-line cmd


【解决方案1】:

问:“我该怎么办?”
A:“构建一个脚本……”

好吧,说真的:

@echo off
setlocal enabledelayedexpansion
set "var="
for /f "tokens=2 delims='" %%a in ('type file.h ^|find "#define SW_VERSION_BYTE_"') do set "var=!var!%%a"
echo %var:.=%

遗憾的是,您没有显示整个文件,因此此解决方案是否有效 - 取决于您文件的其他行。

【讨论】:

  • 感谢您对我的帮助。我打印了“SW015005000000”,我使用以下命令删除了“SW”:%var:.=% | sed 's/SW//' 现在我需要在字符串中添加“rW”为“rW015005000000”,然后将其保存到变量中。抱歉,我是批处理新手。
  • 不使用 unix-tools (sed):添加另一个子字符串替换。 set "var=%var:SW=rW"(如果“SW”已修复)或删除前两个字符并添加“rW”:set "var=rW%var:~2"
  • 这个解决方案中的from line 8 to line 23约束在哪里?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多