我是批处理脚本的新手,我正在尝试解析一个由新行分隔的键值(种类(对的文件。例如:
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
我只是把它作为一个选项放在这里:
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
@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
用于标记两行的连接。
不确定在获得这些名称/值对后将如何处理它们,但如果要在Powershell中进行处理,请正确操作,并从创建对象开始:
$file = 'c:somedirsomefile.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]
它显示图案后面的下一行。
我通常使用给定的批处理命令来读取文件中的每一行
FOR /F "delims=" %%G IN (test.txt) DO (
ECHO %%G
)
在这里,"delim="
起作用。