【问题标题】:New line as a delimeter of FOR loop换行作为 FOR 循环的分隔符
【发布时间】:2013-03-16 11:57:23
【问题描述】:

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

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

【问题讨论】:

标签: loops batch-file cmd window delimiter


【解决方案1】:

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

for /F delims^=^ eol^= %%i in ('findstr /C:the value of abc 'filepath') do echo %%i

【讨论】:

    【解决方案2】:

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

    @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
    

    【讨论】:

      【解决方案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 用于标记两行的连接。

      【讨论】:

        【解决方案4】:

        不确定在获得这些名称/值对后您将如何处理它们,但如果您要在 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 
        

        【讨论】:

          【解决方案5】:

          你怎么看?在 powershell 中:

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

          在模式之后显示下一行。

          【讨论】:

          • 它不是批处理脚本(如问题所述),它是 PowerShell。
          【解决方案6】:

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

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

          在这里,"delim=" 成功了。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-05-28
            • 1970-01-01
            • 2012-04-19
            • 2012-12-09
            • 2013-08-05
            • 1970-01-01
            相关资源
            最近更新 更多