如何从批处理文件中的多行获取此文本
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
您需要更改sourcedir
和destdir
的设置以适应您的情况。该列表使用适合我的系统的设置。
我使用了一个名为 q64838297.txt
的文件,其中包含您的数据用于我的测试。
生成定义为%outfile%
的文件
结果:
17000
900
1400
【讨论】:
我试过了,但是只出现了最后一个行号。你能帮我写完整的代码吗?以上是关于如何从批处理文件中的多行获取此文本的主要内容,如果未能解决你的问题,请参考以下文章
从 Dataflow 中的 GCS 读取时如何获取正在处理的文件名?