Windows - for循环中的findstr(文件内容)
Windows - findstr in for loop (file content)
我有一个文本文件,其中包含
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 上安装任何额外的东西?
试试这个。它将所有行回显到 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
S test
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
)
)
结果是一样的输出。
我有一个文本文件,其中包含
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 上安装任何额外的东西?
试试这个。它将所有行回显到 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
S test
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
)
)
结果是一样的输出。