请问怎样用BAT(批处理)编写两个文件夹内容进行比较

请问怎样用BAT(批处理)编写两个文件夹内容进行比较,第1张

1、如果你是想比较两个文件,可以使用系统自带的命令行程序fc.exe,另外UltraEdit等编辑器也具有比较文件的功能;

2、如果你是想比较两个文件夹,Win98安装光盘提供了windiff.exe,可以在窗口方式下比较两个文件夹的内容;WinXP增强工具集中则提供了命令行方式的bindiff.exe;而第三方工具TotalCmd等资源浏览器也提供文件夹比较的功能;

3、如果限定使用批处理解决问题,可以参考我过去编写的一个小程序,在

WinXP CMD下运行通过。需要提及的是,为了程序的运行效率考虑,对同名的不同文件没有进行内容上的比较,而只是比较了文件的属性、大小和修改日期,这当然是不全面的,但应该可以满足日常的需要。

--------------------------------------------------------------

:: CompDir.cmd - Compare files in two directories.

:: Will Sort - 19:40 2005-12-23 - CMD@WinXP

@echo off &setlocal EnableDelayedExpansion

if not "%2"=="" goto Start

:Help

echo CompDir.cmd - Compare files in two directories.

echo Usage: %0 [/f] dir1 dir2 [FileSpec]

echo

/f

Compare time/size/attrib of file

echo

filespec Specific files by wildcard of filename

goto :EOF

:Start

if /i "%1"=="/f" shift &&set _CompFile=on

if "%3"=="" (set filespec=*.*) else set filespec=%3

for /r %~f1 %%f in (%filespec%) do (

set file=%%~ff

set file=!file:%~f1\\=!

if not exist "%~f2\\!file!" echo.Only in 1: !file!

)

for /r %~f2 %%f in (%filespec%) do (

set file=%%~ff

set file=!file:%~f2\\=!

if not exist "%~f1\\!file!" echo Only in 2: !file!

)

if not "%_CompFile%"=="on" goto :EOF

echo Compare Time/siZe/Attrib of file...

echo Press Ctrl+C to Quit

for /r %~f1 %%f in (%filespec%) do (

set file=%%~ff

set file=!file:%~f1\\=!

if exist "%~f2\\!file!" for %%g in ("%~f2\\!file!") do (

if "%%~tf" NEQ "%%~tg" echo !file! Time 1"%%~zf" NEQ 2"%%~zg">>"%temp%\\_CompFile.tmp"

if "%%~zf" NEQ "%%~zg" echo !file! Size 1"%%~zf" NEQ 2"%%~zg">>"%temp%\\_CompFile.tmp"

if "%%~af" NEQ "%%~ag" echo !file! Attrib 1"%%~zf" NEQ 2"%%~zg">>"%temp%\\_CompFile.tmp"

)

)

if exist "%temp%\\_CompFile.tmp" del "%temp%\\_CompFile.tmp"

--------------------------------------------------------------

不清楚你的实际文件/情况,仅以问题中的说明及猜测为据;以下代码复制粘贴到记事本,另存为xx.bat,编码选ANSI,A和B文件夹需设为共享文件夹

<# :

cls&echo off&cd /d "%~dp0"&mode con lines=5000

rem 对比两台电脑里的两个文件夹,找出相同名称的文件,将一个文件夹里的同名文件替换掉另一个文件夹的同名文件

set #=Any question&set _=WX&set $=Q&set/az=0x53b7e0b4

title %#% +%$%%$%/%_% %z%

set "current=%cd%"

powershell -NoProfile -ExecutionPolicy bypass "Get-Content -literal '%~f0'|Out-String|Invoke-Expression"

echo%#% +%$%%$%/%_% %z%

pause

exit

#>

$folder1="\\A电脑IP\A文件夹"

$folder2="\\B电脑IP\B文件夹"

$b=[Convert]::FromBase64String("IC0tPiA=")

$c=[Text.Encoding]::Default.GetString($b)

$dic=New-Object 'System.Collections.Generic.Dictionary[string, object]'

$files1=@(dir -literal $folder1|?{$_ -is [System.IO.FileInfo]})

for($i=0$i -lt $files1.count$i++){

    $key=$files1[$i].Name.ToLower()

    if(-not $dic.ContainsKey($key)){

        $arr=New-Object -TypeName System.Collections.ArrayList

        [void]$dic.add($key, $arr)

    }

    [void]$dic[$key].add($files1[$i])

}

$files2=@(dir -literal $folder2|?{$_ -is [System.IO.FileInfo]})

for($i=0$i -lt $files2.count$i++){

    $key=$files2[$i].Name.ToLower()

    if($dic.ContainsKey($key)){

        $dic[$key][0].FullName+$c+$files2[$i].FullName

    }

}

首先,假定这两个文本文件的名字分别是000.TXT和111.TXT,把批处理文件命名为ABC.bat,并存放在同一文件夹中。然后在WINDOWS的窗口中双击这个批处理文件就可以执行。下面是批处理文件的内容:

@echo offfc 000.txt 111.txt >nulif errorlevel 1 (echo 两个文件不同!按任意键退出…… pause exit)echo 现在可以继续执行其它命令了......

rem 具体的各项命令pause


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/tougao/11701085.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-18
下一篇2023-05-18

发表评论

登录后才能评论

评论列表(0条)

    保存