标题: [文本处理] 批处理比较两个文本的内容 [打印本页]
作者: netdzb 时间: 2021-1-18 10:10 标题: 批处理比较两个文本的内容
按行进行比较,如果有不同打印出不同位置的行号
和内容,批处理应该怎么写?
作者: lancer 时间: 2021-1-18 10:34
- @echo off
- setlocal enabledelayedexpansion
- for /f "tokens=1,* delims=:" %%i in ('type 1.txt ^| findstr /n ".*"') do (
- set var1=%%i
- set str1=%%j
- for /f "tokens=1,* delims=:" %%a in ('type 2.txt ^| findstr /n ".*"') do (
- set var2=%%a
- set str2=%%b
- if "!var1!" equ "!var2!" (
- if "!str1!" neq "!str2!" (
- echo 1.txt中的 第!var1!行---!str1! 与2.txt中的 第!var2!行---!str2! 不同>>temp.log))
- )
- )
复制代码
自己改改就可以了
作者: qixiaobin0715 时间: 2021-1-18 14:00
本帖最后由 qixiaobin0715 于 2021-1-18 16:22 编辑
- @echo off
- setlocal enabledelayedexpansion
- set /a n=0,m=0
- for /f "delims=" %%a in (a.txt) do (
- set /a n+=1&set "_!n!=%%a"
- )
- for /f "delims=" %%i in (b.txt) do (
- set /a m+=1
- for %%x in (_!m!) do if not "%%i"=="!%%x!" echo !m! a.txt:!%%x! b.txt:%%i&&set k=false
- )
- if not defined k echo 两个文本相同
- pause
复制代码
作者: netdzb 时间: 2021-1-18 15:56
回复 3# qixiaobin0715
文件要是完全相同能否给个提示,两个文件完全相等。谢谢!
作者: netdzb 时间: 2021-1-18 16:02
本帖最后由 netdzb 于 2021-1-18 16:05 编辑
回复 3# qixiaobin0715
set "_!n!=%%a" 表示什么含义,出了括号变量不是过期了吗?
代码没有完全看懂啊。
第一个for是一个一重循环,第二个for是两重循环的意思吗?
作者: qixiaobin0715 时间: 2021-1-18 16:23
回复 4# netdzb
这样行吗
作者: flashercs 时间: 2021-1-18 16:24
本帖最后由 flashercs 于 2021-1-18 17:57 编辑
- <#*,:&cls
- @echo off
- pushd "%~dp0"
- powershell -NoProfile -ExecutionPolicy RemoteSigned -Command ". ([ScriptBlock]::Create((Get-Content -LiteralPath \"%~0\" -ReadCount 0 | Out-String ))) "
- popd
- ::pause
- exit /b
- #>
- # 比较两个文本
- $file1 = "gbk.txt"
- $file2 = "gbk2.txt"
- $syncWindow = 0
- $includeEqual = $false
- function New-ComparableLines {
- param (
- [string]$FilePath,
- [string]$strEncoding
- )
- $lineCtr = 0
- if ([string]::IsNullOrEmpty($strEncoding)) {
- $content = @(Get-Content -Path $FilePath)
- } else {
- $content = @(Get-Content -Path $FilePath -Encoding $strEncoding)
- }
- foreach ($item in $content) {
- $lineCtr++
- $item | Add-Member -MemberType NoteProperty -Name "Line" -Value $lineCtr
- }
- $content
- }
- $lines1 = @(New-ComparableLines -FilePath $file1)
- $lines2 = @(New-ComparableLines -FilePath $file2)
- $objComp = Compare-Object -ReferenceObject $lines1 -DifferenceObject $lines2 -SyncWindow $syncWindow -IncludeEqual:$includeEqual
- $result = @($objComp | Group-Object -Property @{
- Expression={$_.InputObject.Line}
- } | ForEach-Object {
- $pso = $_ | Select-Object -Property @{
- Name = "Line"
- Expression = { $_.Name }
- }, Reference, Difference, @{
- Name = "IsEqual"
- Expression = { $_.Group[0].SideIndicator -eq "==" }
- }
- $pso.Line = $_.Name
- foreach ($item in $_.Group) {
- switch ($item.SideIndicator) {
- "<=" { $pso.Reference = $item.InputObject }
- "=>" { $pso.Difference = $item.InputObject }
- "==" {
- $pso.Reference = $item.InputObject
- $pso.Difference = $item.InputObject
- }
- }
- }
- $pso
- })
-
- $result | Out-GridView -Title "Compare result"
- Read-Host -Prompt "按Enter退出..."
复制代码
作者: qixiaobin0715 时间: 2021-1-18 16:25
回复 5# netdzb
你在哪儿看到的
作者: qixiaobin0715 时间: 2021-1-18 16:31
回复 5# netdzb
运行下面代码试试:- @echo off
- setlocal enabledelayedexpansion
- for /l %%a in (1,1,3) do (
- set /a n+=1
- set str!n!=%%a
- )
- echo !str1!#!str2!#!str3!
- pause
复制代码
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |