找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
楼主: xp3000

[文本处理] [已解决]批处理对比两个文本,如何给一个文本添加一次顺序序号?

[复制链接]
发表于 2023-1-10 13:34:50 | 显示全部楼层
本帖最后由 WHY 于 2023-1-13 20:45 编辑
  1. <# :
  2. @echo off
  3. md "%~dp0Result" 2>nul
  4. PowerShell -C ". ([ScriptBlock]::Create((gc -Literal '%~f0') -join "`r`n")) '%~dp0' '%~dp0Result'"
  5. pause & exit
  6. #>

  7. param($myPath, $dstPath);

  8. forEach( $file In (dir -Literal $myPath -Filter *.log) ){
  9.     $logFile = $file.FullName;                             #log文件名
  10.     $txtFile = $file.FullName -replace '\.log$', '.txt';   #txt文件名
  11.     if( ![IO.File]::Exists($txtFile) ){ continue; }        #判断txt文件是否存在

  12.     $Hash = @{}
  13.     $arr1 = gc -Literal $logFile -ReadCount 0;             #log文本存入数组arr1
  14.     for($i=0; $i -lt $arr1.Count; $i++){                   #遍历数组arr1
  15.         if($arr1[$i] -ne '' -and !$Hash.ContainsKey($arr1[$i])){  #删除空行、重复行
  16.             $Hash.Add($arr1[$i], $true);                   #存入哈希表
  17.         }
  18.     }
  19.         
  20.     $arr2 = gc -Literal $txtFile -ReadCount 0;             #txt文本存入数组arr2
  21.     $n = 0;
  22.     for($i=0; $i -lt $arr2.Count; $i++){                   #遍历数组arr2
  23.         $curStr = $arr2[$i];                               #当前行
  24.         if($Hash.ContainsKey($curStr) -and $curStr -ne $preStr){
  25.             $arr2[$i] = '' + ++$n + '、《' + $curStr + '》';
  26.         }
  27.         $preStr = $curStr;                                 #上一行
  28.     }

  29.     $dstFile = $dstPath + '\' + $file.BaseName + '.txt';   #目标文件名
  30.     [IO.File]::WriteAllLines($dstFile, $arr2, [Text.Encoding]::Default); #保存
  31. }
复制代码

评分

参与人数 1技术 +1 收起 理由
xp3000 + 1 乐于助人

查看全部评分

 楼主| 发表于 2023-1-10 13:39:54 | 显示全部楼层
谢谢大神,学习了
发表于 2023-1-10 16:52:51 | 显示全部楼层
回复 14# xp3000


    试试这个

  1. gawk "NR==FNR{text[$0] = NR "、《" $0 "》";next}{if(A!=$0)if($0 in text){A=$0;$0=text[$0]}}1" 文本.log 文本.txt>修改后的文本.txt
复制代码

评分

参与人数 1技术 +1 收起 理由
xp3000 + 1 乐于助人

查看全部评分

发表于 2023-1-10 17:52:11 | 显示全部楼层
  1. @echo off
  2. rem 所有文件存为ANSI编码
  3. for /f "delims=" %%f in ('dir /b *.log') do (
  4.      setlocal enabledelayedexpansion
  5.      for /f "usebackq tokens=*" %%i in ("%%f") do set ""%%i"=1"
  6.      if exist "%%~nf.txt" (
  7.           (for /f "tokens=1* delims=:" %%a in ('findstr /n .* "%%~nf.txt"') do (
  8.                if defined "%%b" (
  9.                     if "!m!" == "!n!" (
  10.                          set/a n+=1,m=0
  11.                          echo;!n! 《%%b》
  12.                     ) else echo;%%b

  13.                )  else echo;%%b&set m=!n!
  14.           ))>"temp_%%f"
  15.      ) else echo;%%f对应文件不存在
  16.      endlocal
  17. )
  18. pause
复制代码

评分

参与人数 1技术 +1 收起 理由
xp3000 + 1 乐于助人

查看全部评分

 楼主| 发表于 2023-1-11 12:18:17 | 显示全部楼层
回复 19# terse
谢谢,可以用
 楼主| 发表于 2023-1-11 12:24:07 | 显示全部楼层
回复 18# hfxiang

还是会出问题,像8楼一样
文本.txt
  1. 岳阳楼
  2. 春色醉巴陵,阑干落洞庭。
  3. 水吞三楚白,山接九疑青。
  4. 空阔鱼龙气,婵娟帝子灵。
  5. 何人夜吹笛,风急雨冥冥。

  6. 岳阳楼
  7. 岳阳楼
  8. 岳阳楼上日衔窗,影到深潭赤玉幢。
  9. 怅望残春万般意,满棂湖水入西江。

  10. 黄鹤楼
  11.   昔人已乘黄鹤去,此地空余黄鹤楼。
  12.   黄鹤一去不复返,白云千载空悠悠。
  13.   晴川历历汉阳树,芳草萋萋鹦鹉洲。
  14.   日暮乡关何处是,烟波江上使人愁。
复制代码
文本.log
  1. 岳阳楼
  2. 岳阳楼
  3. 黄鹤楼
复制代码
复制代码
这种情况,代码都出现了问题
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-19 06:18 , Processed in 0.018352 second(s), 7 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表