Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.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/4/webpack/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
Batch file 如何处理文本文件中的每一行并对每一行进行处理_Batch File - Fatal编程技术网

Batch file 如何处理文本文件中的每一行并对每一行进行处理

Batch file 如何处理文本文件中的每一行并对每一行进行处理,batch-file,Batch File,如何使用批处理文件处理文本文件中的每一行,并检查当前行中包含的字符串,如果为true,则执行其他操作,然后继续执行下一行,直到下线。 我有一个包含如下行的文本文件: \\.\DISPLAY2|ASPEED Graphics Family(WDDM) \\.\DISPLAY7|NVIDIA Tesla M10 \\.\DISPLAY11|NVIDIA Tesla M10 \\.\DISPLAY15|NVIDIA Tesla M10 \\.\DISPLAY3|NVIDIA Tesla M10 \\.

如何使用批处理文件处理文本文件中的每一行,并检查当前行中包含的字符串,如果为true,则执行其他操作,然后继续执行下一行,直到下线。 我有一个包含如下行的文本文件:

\\.\DISPLAY2|ASPEED Graphics Family(WDDM)
\\.\DISPLAY7|NVIDIA Tesla M10
\\.\DISPLAY11|NVIDIA Tesla M10
\\.\DISPLAY15|NVIDIA Tesla M10
\\.\DISPLAY3|NVIDIA Tesla M10
\\.\DISPLAY10|ASPEED11 Graphics Family(WDDM)
如果该行包含“NVIDIA”一词,我需要获取“DISPLAY”一词旁边的数字
因此,在本例中,我应该得到数字7、11、15和3。最简单的方法是使用
FOR
语句将文本文档的每一行声明为字符串。由于文本文档的格式,我们不能仅使用
tokens=
来提取数字

使用
findstr/i“NVIDIA”“list.txt”
我们可以让脚本只读取包含单词
NVIDIA
的测试为阳性的行,其中
list.txt
是文本文件的名称

使用,我们可以通过执行以下操作轻松提取数字:

  • 删除显示之前的所有内容,包括
    DISPLAY
  • 删除
    |
  • 每行的数字将设置为变量
    !绳子

    为了检查数字是否为真,可以在
    For
    语句中使用
    if
    语句。例如,
    如果“!string!”==“Number”(
    )。请记住,如果尝试在FOR循环中使用
    goto
    ,它将中断循环并退出循环(因此不会检查新行)



    请随意更改脚本以满足您的需要。

    不完全清楚您是否只想处理包含
    NVIDIA
    的行

    如果您这样做,那么根据您提供的信息,您可以尝试以下方法:

    @Echo关闭
    对于/F“令牌=2 Delims=Yy |”%%A(
    “FindStr/I”显示[0-9]*|NVIDIA“File.txt”2^>Nul')是否回显%%A
    暂停
    
    如果您希望处理所有字符串内容,但仅提供了有关如何处理包含
    NVIDIA
    的行的信息,这可能会有帮助:

    @Echo关闭
    对于/F UseBackDelims^=^EOL^=%%A,在(“File.txt”中
    )是否设置/P“=%A”Nul 2>&1&&(
    对于“%%A”中的/F“令牌=2 Delims=Yy |“%%B,执行回显%%B
    )||我想做点别的
    暂停
    

    上面的例子使用了文本文件名,
    file.txt
    ,请根据需要进行调整。

    希望这篇文章的格式正确,很难阅读行差异。这对我的情况非常有用。我只想在包含“NVIDIA”的行上工作。因此,第一行代码就是我所看到的。你很好,这对我的案子很有效。我只想在包含“NVIDIA”的行上工作。因此,第一行代码就是我所看到的。你太棒了,很高兴听到你这么说;请考虑将您的首选答案标记为点击大检查标记到左边。我尝试了这个代码,它也工作了,但是我喜欢COMPO的建议,因为写的线少了。非常感谢你的帮助。
    @ECHO OFF
    setlocal enabledelayedexpansion
    
    for /f "tokens=1,2" %%G in ('findstr /i "NVIDIA" "list.txt"') do (
    
    set string=%%G
    SET string=!string:*DISPLAY=%!
    SET endbit=!string:*^|=%!
    call set string=%%string:!endbit!=%%
    
    If "!string!"=="7" (
        :: Do some code for 7
        echo string equals 7!
    )
    If "!string!"=="11" (
        :: Do some code for 11
        echo string equals 11!
    )
    If "!string!"=="15" (
        :: Do some code for 15
        echo string equals 15!
    )
    If "!string!"=="3" (
        :: Do some code for 3
        echo string equals 3!
    ))