Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Loops 作为FOR-loop测厚仪的新线_Loops_Batch File_Cmd_Window_Delimiter - Fatal编程技术网

Loops 作为FOR-loop测厚仪的新线

Loops 作为FOR-loop测厚仪的新线,loops,batch-file,cmd,window,delimiter,Loops,Batch File,Cmd,Window,Delimiter,我不熟悉批处理脚本,我正在尝试解析一个文件,该文件的键值(种类)对由新行分隔。例如: 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
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中:

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

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

不确定获取这些名称/值对后将如何处理它们,但如果要在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 
如果您需要输出两个连续行中的每个令牌,则应该执行此任务。如果我们有一个所需输出的列表,而不必从不起作用的代码中猜测,那就容易多了


本质上,此代码保存一行的内容,然后检测到第二行已被前一行的变量定义的事实读取。在这些情况下,
for/f
用于标记两行的连接。

我只是将其作为一个选项放在这里:

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

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

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

在这里,
“delim=“
起作用。

你想要哪一个?批处理还是powershell?它们是两种不同的语言。您希望解析所有行还是只解析文件的一部分?可能是重复的不是批处理脚本(如有疑问的那样),而是PowerShell。
FOR /F "delims=" %%G IN (test.txt) DO (
    ECHO %%G
)