【问题标题】:How can I compare and specific line of a text file?如何比较文本文件的特定行?
【发布时间】:2023-03-25 00:30:01
【问题描述】:

例子

    (
Line1: echo echo example
Line2: echo echo example
Line3: echo echo example
Line4: echo echo File Example
) > File1.txt

(
Line1: echo echo example
Line2: echo echo example
Line3: echo echo File
Line4: echo echo File
) > File2.txt

只想比较 Line4 是否相等但 丢弃其他行。在这种情况下返回 false

【问题讨论】:

  • 哪种批处理文件?重击脚本? PowerShell脚本? Python脚本? PHP 脚本?
  • @JuanLago:嗯,你可以阅读当鼠标光标放在batch-file标签上时出现的描述:“一个包含系列的文本文件由 MS-DOS、IBM OS/2 或 Microsoft Windows 上的命令解释器执行的命令数"...

标签: file batch-file compare


【解决方案1】:

您可以像这样使用数组来比较此类文件:

@echo off
(
    echo Line1:example
    echo Line2:example
    echo Line3:example
    echo Line4:File
)> File1.txt

(
    echo Line1:example
    echo Line2:example
    echo Line3:File
    echo Line4:example
)> File2.txt

setlocal enabledelayedexpansion
set i=0
for /f "tokens=* delims=" %%a in ('Type "File1.txt"') do (
  set /a i+=1
  set File1_Line[!i!]=%%a
)
set File1_Line[4]
pause
::********************************************************
set i=0
for /f "tokens=* delims=" %%a in ('Type "File2.txt"') do (
  set /a i+=1
  set File2_Line[!i!]=%%a
)
set File2_Line[4]
pause
::********************************************************
echo File1_Line[4]" = !File1_Line[4]!"
pause
echo File2_Line[4] = "!File2_Line[4]!"
pause
::********************************************************
IF /I "!File1_Line[4]!" equ "!File2_Line[4]!" ( echo TRUE 
 ) else (
echo False
)
pause

【讨论】:

    【解决方案2】:
    @ECHO OFF
    SETLOCAL
    SET "sourcedir=U:\sourcedir"
    SET "filename1=%sourcedir%\q36252686.txt"
    SET "filename2=%sourcedir%\q36252686_2.txt"
    
    :: This part simply establishes the data IN the files
    
    FOR %%a IN ("%filename1%" "%filename2%") DO DEL %%a 2>nul
    FOR %%a IN (
    "Line1: echo echo example"
    "Line2: echo echo example"
    "Line3: echo echo example"
    "Line4: echo echo File Example"
    ) DO >> "%filename1%" ECHO(%%~a
    
    FOR %%a IN (
    "Line1: echo echo example"
    "Line2: echo echo example"
    "Line3: echo echo File"
    "Line4: echo echo File"
    ) DO >> "%filename2%" ECHO(%%~a
    
    :: line to match
    
    SET /a matchonline=4
    :: lines to skip
    SET  /a skiplines=matchonline-1
    SET "skiplines=skip=%skiplines%"
    
    IF %matchonline%==1 SET "skiplines=" 
    
    FOR /f "usebackq%skiplines%delims=" %%a IN ("%filename1%") DO (
     FOR /f "usebackq%skiplines%delims=" %%b IN ("%filename2%") DO (
      IF "%%a"=="%%b" (SET "result=true") ELSE (SET "result=false")
      GOTO done
     )
    )
    :done
    ECHO match ON line %matchonline%=%result%
    
    GOTO :EOF
    

    您需要更改filename1filename2 的设置以适应您的情况。我在我的系统上将您的数据生成为方便的文件名以进行测试。

    读取第一个文件,跳过匹配前的行并将其内容分配给%%a。发生这种情况时,对第二个文件重复,%%b

    设置结果并跳出循环。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-14
      • 2017-05-05
      相关资源
      最近更新 更多