我是新来的批处理脚本,我试图解析具有由新线划定对键值(种)的文件。 例如:
the value of abc
1234
the value of def
5678
the value of ghi
9876
我想读使用新行作为分隔,这样我可以访问值这个文件。
就像是
for /f "tokens=1,2,3 delims='\n'" %%i in ('findstr /C:the value of abc 'filepath') do echo %%j
我是新来的批处理脚本,我试图解析具有由新线划定对键值(种)的文件。 例如:
the value of abc
1234
the value of def
5678
the value of ghi
9876
我想读使用新行作为分隔,这样我可以访问值这个文件。
就像是
for /f "tokens=1,2,3 delims='\n'" %%i in ('findstr /C:the value of abc 'filepath') do echo %%j
@ECHO OFF
SETLOCAL
SET "prevline="
FOR /f "delims=" %%z IN (tvabc.txt) DO (
IF DEFINED prevline (
FOR /f "tokens=1-6" %%a IN ('echo %%prevline%% %%z') DO (
ECHO %%a %%b %%c %%d %%e %%f
)
SET "prevline="
) ELSE (SET prevline=%%z)
)
应该做的工作,如果你需要从两个连续行的每个标记输出。 如果我们有所需的输出的列表,而不是从代码不起作用猜测会容易得多。
本质上,此代码保存一个行的内容,然后检测到所述第二已经由该变量保持前一行被限定的事实读取。 在这些情况下, for/f
是用来tokenise两条线的串联。
我只是把它放在这里作为一个选项:
for /F delims^=^ eol^= %%i in ('findstr /C:the value of abc 'filepath') do echo %%i
你不能设置“新线”作为分隔符。 试试这个:
@echo off &setlocal
for /f "tokens=1*delims=:" %%i in ('findstr /NC:"the value of abc" "filepath"') do set /a count=%%i
if defined count for /f "skip=%count%tokens=1*delims=:" %%i in ('findstr /N "^" "filepath"') do if not defined value set "value=%%j"
echo.%value%
endlocal
不知道你要什么与名称/值对你催促他们,但如果你打算这样做在PowerShell中,这样做的权利,并通过创建对象的开始:
$file = 'c:\somedir\somefile.txt'
[regex]$regex = @'
(?ms)the value of (\S+)
(\d+)
'@
#Choose one
$text = Get-Content $file -Raw # V3 Only
$text = [IO.File]::ReadAllText($file) # V2 or V3
$regex.matches($text) |
foreach {
New-object PSObject -Property @{
Name = $_.groups[1].value
Value = $_.groups[2].value
}
}|
Select Name,Value |
Format-Table -AutoSize
Name Value
---- -----
abc 1234
def 5678
ghi 9876
你对那个怎么想的? 在PowerShell中:
(get-content .\essai.txt)[(Select-String .\essai.txt -Pattern "the value of abc").LineNumber]
它显示了图案之后的下一行。