我有一个文本文件,其中包含
之类的内容M test123
S test
M abc
依旧......
我正在尝试编写将执行以下操作的批处理脚本:
读取此文本文件,在每行搜索“M”(带空格!)然后将找到的行保存在变量中,删除“M”并将输出存储在单独的output.txt
中所以output.txt应该包含以下内容:
test123
S test
abc
这是我到目前为止所拥有的:
SETLOCAL ENABLEDELAYEDEXPANSION
SET count=1
FOR /F "tokens=* USEBACKQ" %%F IN (output_whole_check.txt) DO (
SET var!count!=%%F
findstr /lic:"M " > nul && (set var!count!=var!count!:~8%) || (echo not found)
SET /a count=!count!+1
)
ENDLOCAL
或者是否有一些更简单的方法可以解决这个问题,而不需要在Windows上安装任何额外的东西?
答案 0 :(得分:0)
试试这个。它将所有行回显到output.txt
,而“M”替换为空。
@echo off & setlocal
>output.txt (
FOR /F "usebackq delims=" %%I IN ("output_whole_check.txt") DO (
set "line=%%I"
setlocal enabledelayedexpansion
echo(!line:M =!
endlocal
)
)
结果:
test123
氏试验
ABC
或者如果你的output_whole_check.txt非常大,使用for /L
循环遍历这些行可能会更快。 for /L
比for /F
更有效率。您只需要计算行数以确定要循环的迭代次数。
@echo off & setlocal
rem // get number of lines in the text file
for /f "tokens=2 delims=:" %%I in ('find /v /c "" "output_whole_check.txt"') do set /a "count=%%I"
<"output_whole_check.txt" >"output.txt" (
for /L %%I in (1,1,%count%) do (
set /P "line="
setlocal enabledelayedexpansion
echo(!line:M =!
endlocal
)
)
结果是相同的输出。