Batch, Dateinamen vergleichen
Hallo zusammen,
Wie kann ich mit einer Batch, die Datei unterhalb eines Ordners vergleichen mit einer anderen Datei, unterhalb eines anderen Ordners? Wenn die Dateinamen identisch sind, sollte er XXX machen und wenn nicht dann YYY machen.
Ich habe mal so probiert.. jedoch klappt das nicht richtig.
Im Verzeichnis D:\Temp\OrdnerA\ ist folgende Datei A.txt vorhanden
Im Verzeichnis D:\Temp\OrdnerB\ ist folgende Datei B.txt vorhanden
er gibt mir jedoch "ist genau gleich" aus.
Evtl. noch zu erwähnen: Ich möchte explizit nicht im Code D:\Temp\OrdnerA\A.txt haben. Sonst muss ich jedes mal diese im Code ändern bzw. anpassen. Er sollte einfach die Datei unterhalb vom Verzeichnis D:\Temp\OrdnerA mit der Datei unterhalb D:\Temp\OrdnerB vergleichen.
Wie kann ich mit einer Batch, die Datei unterhalb eines Ordners vergleichen mit einer anderen Datei, unterhalb eines anderen Ordners? Wenn die Dateinamen identisch sind, sollte er XXX machen und wenn nicht dann YYY machen.
Ich habe mal so probiert.. jedoch klappt das nicht richtig.
@echo off
fc "D:\Temp\OrdnerA" "D:\Temp\OrdnerB" > nul
if errorlevel 1 (
echo "ist genau gleich"
) else (
echo "ist nicht gleich"
)
pause
Im Verzeichnis D:\Temp\OrdnerA\ ist folgende Datei A.txt vorhanden
Im Verzeichnis D:\Temp\OrdnerB\ ist folgende Datei B.txt vorhanden
er gibt mir jedoch "ist genau gleich" aus.
Evtl. noch zu erwähnen: Ich möchte explizit nicht im Code D:\Temp\OrdnerA\A.txt haben. Sonst muss ich jedes mal diese im Code ändern bzw. anpassen. Er sollte einfach die Datei unterhalb vom Verzeichnis D:\Temp\OrdnerA mit der Datei unterhalb D:\Temp\OrdnerB vergleichen.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 203390
Url: https://administrator.de/contentid/203390
Ausgedruckt am: 22.11.2024 um 18:11 Uhr
7 Kommentare
Neuester Kommentar
Hi @netgearsdk,
Du benutzt dein IF-Statement falsch.
Übrigens vergleichst du DateiINHALTE und nicht DateiNAMEN!
Gruß
Snow
if %ERRORLEVEL% GTR 1 (
Echo "ist gleich"
) else (
Echo "ist nicht gleich"
)
Du benutzt dein IF-Statement falsch.
Übrigens vergleichst du DateiINHALTE und nicht DateiNAMEN!
Gruß
Snow
Was möchtest du denn überhaupt machen? Ich kann mir sehr gut vorstellen, dass dein Ansatz auf leichtere Art und Weise gelöst werden kann. Warum möchtest du Ordner A mit B vergleichen?
btw: Ausprobieren soll beim skripten schon oft geholfen haben. Dann hättest du auch bemerkt dass
Liegt daran, dass fc nunmal nur Dateien vergleichen kann. Errorlevel hierbei ist 2.
btw: Ausprobieren soll beim skripten schon oft geholfen haben. Dann hättest du auch bemerkt dass
fc <ordner 1> <ordner 2>
folgendes Ausgibt: FC: Kann Ordner 1 nicht öffnen - Datei oder Ordner nicht vorhanden
.Liegt daran, dass fc nunmal nur Dateien vergleichen kann. Errorlevel hierbei ist 2.
Hallo netgearsdk!
Wenn es im Verzeichnis "D:\Temp\OrdnerA" tatsächlich nur genau eine Datei gibt, dann etwa so:
Natürlich wird so nur geprüft, ob es im "OrdnerB" eine gleichnamige Datei gibt, nicht, ob dort ev mehrere Dateien vorhanden wären ...
Grüße
bastla
P.S.: Natürlich hätte anstatt "
Wenn es im Verzeichnis "D:\Temp\OrdnerA" tatsächlich nur genau eine Datei gibt, dann etwa so:
for /f "delims=" %%i in ('dir /b/a-d "D:\Temp\OrdnerA"') do if exist "D:\Temp\OrdnerB\%%~nxi" (
echo "ist genau gleich"
) else (
echo "ist nicht gleich"
)
Grüße
bastla
P.S.: Natürlich hätte anstatt "
%%~nxi
" auch "%%i
" genügt - aber aus edukativen Gründen ...
@netgearsdk
Abgesehen davon, dass, wie schon erwähnt wurde,
Wenn das Ergebnis positiv ist, d.h. wenn die Dateien gleich sind, ist der Errorlevel gleich 0, andernfalls ist er 1 oder höher. (Es ist ja auch kein "Successlevel" ) D.h.
Außerdem ist
Grüße
format-c
Abgesehen davon, dass, wie schon erwähnt wurde,
fc
Dateien nach Inhalten vergleicht, hast du in deinem Skript die Unterscheidungsfälle vertauscht.Wenn das Ergebnis positiv ist, d.h. wenn die Dateien gleich sind, ist der Errorlevel gleich 0, andernfalls ist er 1 oder höher. (Es ist ja auch kein "Successlevel" ) D.h.
if errorlevel 1
, sind sie nicht gleich.Außerdem ist
if errorlevel 1 ...
äqiuvalent zu if %errorlevel% GEQ 1 ...
, also ">=" und nicht GTR
, wie Snowman25 sagt (siehe if /?
).Grüße
format-c
Zitat von @bastla:
Natürlich wird so nur geprüft, ob es im "OrdnerB" eine gleichnamige Datei gibt, nicht, ob dort ev mehrere Dateien vorhanden wären ...
Natürlich wird so nur geprüft, ob es im "OrdnerB" eine gleichnamige Datei gibt, nicht, ob dort ev mehrere Dateien vorhanden wären ...
Mehrere gleichnamige Dateien in einem Ordner gibt es eh nicht.
@ format-c
Grüße
bastla
Mehrere gleichnamige Dateien in einem Ordner gibt es eh nicht.
Die Spitzfindigkeit "gleiche Namen, aber unterschiedliche Dateitypen in einem Ordner" können wir uns ja wohl sparen , daher nur die elaborierte Form der obigen Aussage: Aufgrund vondie Datei unterhalb vom Verzeichnis D:\Temp\OrdnerA mit der Datei unterhalb D:\Temp\OrdnerB vergleichen
stand die (bisher unwidersprochene) Annahme, dass es in jedem Ordner nur eine Datei geben sollte, im Raum - deshalb habe ich zur Sicherheit darauf hingewiesen, dass nur geprüft würde, ob esim "OrdnerB" eine gleichnamige Datei gibt,
nicht aber, ob dort weitere (= zusätzliche, sogar anders benannte ) Dateien vorhanden wären - ob netgearsdk das überhaupt wissen wollte, werden wir vielleicht irgendwann noch erfahren ...Grüße
bastla