我有一个日志文件,我需要逐行读入并将该行传递给下一个循环.
首先,我在一个单独的文件中grep日志文件中的"主"字(如"错误") - 以保持它的小.现在我需要获取单独的文件并逐行读取 - 每行需要转到另一个循环(在这些循环中我grep日志并将其分成块)但我卡在这里.
日志看起来像
xx.xx.xx.xx - - "http://www.blub.com/something/id=?searchword-yes-no" 200 - "something_else"
Run Code Online (Sandbox Code Playgroud)
使用for/f循环我只获取IP而不是完整的行.
如何管道/写入/缓冲整行?(每行写什么都没关系)
wim*_*ica 58
试试这个:
@echo off
for /f "tokens=*" %%a in (input.txt) do (
echo line=%%a
)
pause
Run Code Online (Sandbox Code Playgroud)
因为tokens=*一切都被捕获%a
编辑:要回复您的评论,您必须这样做:
@echo off
for /f "tokens=*" %%a in (input.txt) do call :processline %%a
pause
goto :eof
:processline
echo line=%*
goto :eof
:eof
Run Code Online (Sandbox Code Playgroud)
由于空间,你不能使用%1,因为那只包含直到第一个空间的部分.并且因为该行包含引号,您也可以不:processline "%%a"与它结合使用%~1.所以你需要使用%*哪个获取%1 %2 %3 ...,所以整行.
"呼叫"解决方案存在一些问题.
它失败了许多不同的内容,因为CALL解析器解析了a的参数两次.
这些线条会产生或多或少的奇怪问题
one
two%222
three & 333
four=444
five"555"555"
six"&666
seven!777^!
the next line is empty
the end
Run Code Online (Sandbox Code Playgroud)
因此,您不应该使用%%a调用的值,更好地将其移动到变量,然后调用仅包含变量名称的函数.
@echo off
SETLOCAL DisableDelayedExpansion
FOR /F "usebackq delims=" %%a in (`"findstr /n ^^ t.txt"`) do (
set "myVar=%%a"
call :processLine myVar
)
goto :eof
:processLine
SETLOCAL EnableDelayedExpansion
set "line=!%1!"
set "line=!line:*:=!"
echo(!line!
ENDLOCAL
goto :eof
Run Code Online (Sandbox Code Playgroud)
这在过去对我有用,如果可以,它甚至会扩展文件中的环境变量。
for /F "delims=" %%a in (LogName.txt) do (
echo %%a>>MyDestination.txt
)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
195670 次 |
| 最近记录: |