cmd - bestanden vergelijken + opdracht uitvoeren

Status
Niet open voor verdere reacties.

swen91

Gebruiker
Lid geworden
16 mrt 2008
Berichten
91
hallo,

ik zit met het volgende probleem.
ik wil graag een "programma" maken dat 2 bestanden vergelijkt,
en aan de hand van die vergelijking een ander cmd bestandje oproept.
ik heb nu deze code: (die dus niet werkt)
Code:
@if "1.txt"=="2.txt" goto chek1
@if not "1.txt"=="2.txt" goto chek2"
:chek1
echo het werkt :)
pause
call finish.bat
:chek2
echo het werkt niet :(
pause
exit
ook heb ik het al geprobeerd doormiddel van fc
Code:
fc int.cer log.cer /B
@if "fc int.cer log.cer /b"=="" goto oke1
@if not "fc int.cer log.cer /b"=="" goto oke2
:oke1
call finish.bat
:oke2
echo nee, werkt ook niet:(
pause
exit
graag zou ik een oplossing van jullie krijgen, alvast bedankt.
 
Op basis van welke dingen vergelijk je de bestanden? Inhoud/datum/grootte/eigenaar....
 
de bestanden moeten exact gelijk zijn aan elkaar.
bij fc gebruik de /b functie, die binair vergelijkt.
maar is dat wat ik wil uberhaupt mogelijk ?
 
Niet makkelijk maar het moet wel lukken.

Wat je namelijk kan doen is de output van je FC commando naar een tekst bestand schrijven (fc int.cer log.cer /B >temp.txt) en dan dat tekst bestand doorlopen met een FOR commando (eventueel eerst met een FINDSTR een nieuw tijdelijk tekstbestand vullen en die met het FOR commando doorlopen)

(voor wat info over de commando's kun je http://ss64.com/nt/ gebruiken)
 
ik heb even gekeken naar FOR en findstr, maar dit zijn zeer gecompliceerde batch commando's. zou je misschien in een voorbeeld toe kunnen lichten hoe ik deze toe moet passen ?
 
Het is misschien makkelijker om te beginnen met te kijken of de 2 bestanden wel echt verschillend zijn. Je kunt daarvoor gebruik maken van het ERRORLEVEL.
ERRORLEVEL 1 betekent dat de bestanden wél verschillend waren.

fc /b uit.txt uit2.txt
IF errorlevel 1 GOTO verschillend
GOTO gelijk
:verschillend
echo Bestanden waren verschillend
GOTO end
:gelijk
echo Bestanden waren gelijk
GOTO end
:end

Nu is me verder niet duidelijk wat je met de uitvoer van de verschillen wilt doen. 'Probleem' is dat, omdat je binair vergelijkt, de uitvoer ook 'binair' is!
Bezig met het vergelijken van bestanden uit.txt en UIT2.TXT
00000000: 20 66
00000001: 66 64
00000002: 64 73
00000003: 73 66
FC: uit.txt langer dan UIT2.TXT
Als je een ASCII vergelijking maakt (dus zonder /b), dan wordt de uitvoer wél 'leesbaar' weergegeven:
Code:
Bezig met het vergelijken van bestanden uit.txt en UIT2.TXT
***** uit.txt
fdsf
***** UIT2.TXT
 fdsf
*****

Kortom: Je zit in een wespennest als je binair vergelijkt én de uitvoer ook nog wilt gebruiken op de een of andere manier.

We horen wel wat je nu eigenlijk met die uitvoer wilt gaan doen. Een voorbeeld zou kunnen helpen.

Tijs.
 
Laatst bewerkt:
alvast hartelijk bedankt.
de bedoeling is dat er een ander batch bestand word geopend, als de bestanden gelijk zijn.
als de bestanden niet gelijk zijn moet het programma worden afgesloten.
Code:
@if wel gelijk
call test.bat
@if niet gelijk
exit
om het maar even heel simpel te vertalen.
 
Enige wat je met onderstaande code nog moet doen is aangeven welke 2 bestanden er vergeleken moeten worden in de fc /b regel:
@echo off
fc /b uit.txt uit2.txt
IF errorlevel 1 CALL test.bat
:end
EXIT

Tijs.
 
het werkt helemaal, nooit gedacht dat het zo'n simpel stukje code zou zijn:p
super bedankt:thumb:
 
Zoals je ziet wordt het label :end in de code niet gebruikt (er staat geen GOTO end in de code), dus die regel kan eventueel ook nog verwijderd worden.

Fijn dat het je geholpen heeft. :thumb:

Tijs.
 
Ik zie net iets vreemds: Als ik je goed interpreteer moet test.bat worden aangeroepen als de 2 bestanden gelijk zijn. Dat is niet zoals het nu in mijn code staat, want daar wordt test.bat aangeroepen als beide bestanden niet gelijk zijn.

Wil je test.bat aanroepen als beide bestanden gelijk zijn, dan wordt het:

@echo off
fc /b uit.txt uit2.txt
IF NOT errorlevel 1 CALL test.bat
:end
EXIT

Zie het verschil. Natuurlijk weer de 2 bestandsnamen in de fc /b regel aanpassen als je bovenstaande code wilt gebruiken.

Tijs.
 
Laatst bewerkt:
bedankt voor deze reactie, maar dit had ik zelf ook al gemerkt en aangepast;)
 
Fijn, want ik was even bang iets definitief naar het hiernamaals te hebben gestuurd op je pc! :)

Tijs.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan