如何从批处理文件中的多行获取此文本

Posted

技术标签:

【中文标题】如何从批处理文件中的多行获取此文本【英文标题】:How can i get this text from multiple line in batch file 【发布时间】:2021-02-26 11:42:03 【问题描述】:

我有一个文本文件(Myfile.txt),一行一行的,很长并且居中,如下图所示

...","ItemPrice":17000.0,"MustPay":17000.0,"PaywithCash":17000.0,"etc...
...","ItemPrice":900.0,"MustPay":900.0,"PaywithCash":900.0,"etc...
...","ItemPrice":1400.0,"MustPay":1400.0,"PaywithCash":1400.0,"etc...

所以我想获取单词“PayWithCash”后面的数字:例如第一行是数字17000等到下一行,并将其保存到一个新的文本文件“result.txt”

1700
900
1400

我已经尝试了几个代码,包括如下

echo off 
SETLOCAL EnableDelayedExpansion
for /f "delims=" %%a in ('type Myfile.txt^|find "PayWithCash:"') do (
  set "line=%%a"
  set "line=!line:*PayWithCash =!
  set /a "last=!line:~1!" 2>nul
)
echo %last% >> result.txt

是的,我仍然无法得到想要的结果,你能帮帮我吗?

我用谷歌翻译,希望你能理解

【问题讨论】:

你没有PayWithCash<SPACE> 的实例,所以set "line=!line:*PayWithCash =! 不太可能做它打算做的事情。 【参考方案1】:

PayWithCash 更正为数据中的正确大小写,PaywithCash 或将/i 开关添加到find 以使匹配不区分大小写。

按照@Compo 的建议删除冒号。

删除set语句中PayWithCash后面的Space,因为数据中没有这样的Space

由于line 中的结果现在将以": 开头,因此您需要使用line:~2

我使用的测试代码:

@ECHO OFF
SETLOCAL EnableDelayedExpansion
SET "sourcedir=U:\sourcedir"
SET "destdir=U:\destdir"
SET "filename1=%sourcedir%\q64838297.txt"
SET "outfile=%destdir%\outfile.txt"

(
for /f "delims=" %%a in ('type "%filename1%"^|find /i "PayWithCash"') do (
  set "line=%%a"
  set "line=!line:*PayWithCash=!"
  set /a "last=!line:~2!" 2>nul

  echo !last!
)
)>"%outfile%"

TYPE "%outfile%"

GOTO :EOF

您需要更改sourcedirdestdir 的设置以适应您的情况。该列表使用适合我的系统的设置。

我使用了一个名为 q64838297.txt 的文件,其中包含您的数据用于我的测试。

生成定义为%outfile%的文件

结果:

17000
900
1400

【讨论】:

我试过了,但是只出现了最后一个行号。你能帮我写完整的代码吗?

以上是关于如何从批处理文件中的多行获取此文本的主要内容,如果未能解决你的问题,请参考以下文章

使用 Apache Pig 从文本文件中获取备用行

从 Dataflow 中的 GCS 读取时如何获取正在处理的文件名?

如何从 NSArray 中获取此文本值?

如何批量将多个txt文本中多行合并成一行,且中间用tab或空间间隔,并最终合并成一个txt文件

如何批量解析csv中的多行值

批处理文件中的多行 IF 语句内的变量值未递增 [重复]