3

我是批处理脚本的新手,我正在尝试解析一个文件,该文件具有由换行符分隔的键值(种类)对。例如:

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
4

6 回答 6

4

我只是把它放在这里作为一个选项:

for /F delims^=^ eol^= %%i in ('findstr /C:the value of abc 'filepath') do echo %%i
于 2016-11-21T08:27:38.770 回答
3

您不能将“新行”设置为分隔符。尝试这个:

@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
于 2013-03-26T16:22:07.653 回答
3
@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用于标记两行的连接。

于 2013-03-26T18:10:47.317 回答
2

不确定在获得这些名称/值对后将如何处理它们,但如果您要在 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 
于 2013-03-26T16:40:21.560 回答
0

你对那个怎么想的?在 powershell 中:

(get-content .\essai.txt)[(Select-String .\essai.txt -Pattern "the value of abc").LineNumber]

它在模式之后显示下一行。

于 2013-03-26T16:22:52.733 回答
0

我通常使用给定的批处理命令来读取文件中的每一行

FOR /F "delims=" %%G IN (test.txt) DO (
    ECHO %%G
)

在这里,"delim="诀窍。

于 2019-11-02T15:05:42.567 回答