barkingdog
Goto Top

Comp Befehl - Ist das möglich ?

Hallo zusammen,

ich frage mich ob dass was ich vor habe so möglich ist bzw. was an meinem Code falsch ist.
So vorne Weg schon einmal der Code, damit jeder weiss was gemeint ist.

@echo off & setlocal 
set "Anrufe=D:\ANRUFE.TXT"   
set "AnrufeTemp=D:\ANRUFETEMP.TXT"  
set "CTILOG=D:\CTILOG.TXT"   

:Loop 
IF exist D:\ANRUFE.TXT for /f "tokens=1-10 delims=," %%a in ('findstr /c:", 111" "%CTILOG%"^|findstr /c:",ein"')do >>"%Anrufetemp%" echo %%a,%%b,%%c,%%d,%%e,%%f  
IF not exist D:\ANRUFE.TXT for /f "tokens=1-10 delims=," %%a in ('findstr /c:", 111" "%CTILOG%"^|findstr /c:",ein"')do >>"%Anrufe%" echo %%a,%%b,%%c,%%d,%%e,%%f  
comp %ANRUFETEMP% %ANRUFE%
if %ERRORLEVEL% EQU 0 del %ANRUFETEMP% else %ERRORLEVEL% EQU 5 %ANRUFETEMP% > %ANRUFE%
sleep 40
goto :Loop

Es geht hier um eine Telefonliste(CTILOG.txt) , welche auf eine bestimmte Nummer ("111" )untersucht wird und ob es ein eingehender Anruf ( "ein" )war. Diese Einträge sollen
dann in die Anrufe.txt gespeichert werden. Allerdings möchte ich nur neu eingehende Anrufe in Anrufe.txt aufnhemen. Deswegen erstelle ich einmal am Anfang die Anrufe.txt,
wenn diese existiert werden die Einträge nur noch in die Anrufetemp.txt aufgenommen.
Und hier liegt jetzt auch das eigentliche Problem, ich will jetzt die Anrufetemp.txt mit der Anrufe.txt vergleichen, sind sie gleich soll die Anrufetemp.txt gelöscht werden, sind
sie unterschiedlich, soll die Annrufe.txt überschrieben werden.
Klappt beim ersten Mal, beim zweiten Durchlauf wird der Inhalt der Anrufe.txt gelöscht. Ich weiss nicht woran das liegt.


Ist mein Vorhaben so umsetzbar, oder macht es keinen Sinn. Gibt es eine möglichkeit die Abfrage die beim comp Befehl kommt "Weitere Dateien vergleichen (J/N) ?" zu deaktivieren?

Beispiel für CTILOG.txt
01.12.2008,09:46:01, 100,       +49 (555) 66666,  ja,ein,       9,                     100,                     100
01.12.2008,10:00:41, 100,       +49 (777) 88888,  ja,aus,    14,                     100,                     100

Content-ID: 105770

Url: https://administrator.de/contentid/105770

Ausgedruckt am: 12.11.2024 um 22:11 Uhr

60730
60730 12.01.2009 um 13:14:27 Uhr
Goto Top
Servus,

grob drüber gesehen:

nimm anstatt
comp
FC

Nimm anstatt
IF exist D:\ANRUFE.TXT
IF exist %ANRUFE%

Macht mehr Sinn eine Variable nicht nur zu deklarieren sondern auch zu benutzen.

Gruß
barkingdog
barkingdog 12.01.2009 um 13:26:29 Uhr
Goto Top
Hallo,

ich habe jetzt den "comp"-Befehl mit dem "fc"-Befehl ersetzt. Allerdings ohne Erfolg.

fc %ANRUFETEMP% %ANRUFE%
if %ERRORLEVEL% EQU 0 del %ANRUFETEMP% else %ERRORLEVEL% EQU 1 %ANRUFETEMP% > %ANRUFE%
sleep 40
goto :Loop

Wenn ich die bat ausführe und zu der Abfrage komme ob ich weitere Dateien vergleichen möchte und dann auf
"N" drücke bricht die .bat ab.
60730
60730 12.01.2009 um 13:32:28 Uhr
Goto Top
Zitat von @barkingdog:
Hallo,

ich habe jetzt den "comp"-Befehl mit dem
"fc"-Befehl ersetzt. Allerdings ohne Erfolg.
Wenn ich die bat ausführe und zu der Abfrage komme ob ich
weitere Dateien vergleichen möchte und dann auf
"N" drücke bricht die .bat ab.

Servus,

FC fragt im Unterschied zu Comp nicht ob du weitere Dateien überprüfen willst.

Beende mal alle deine Scripte - überprüfe deine Batch und starte Sie neu face-wink

Gruß
barkingdog
barkingdog 13.01.2009 um 14:48:52 Uhr
Goto Top
Also auch das neu starten hat nichts gebracht fc fragt bei mir dennoch nach.
Jedenfalls habe ich es mittlerweile geschafft es zum Laufen zu bringen. Ich bin beim Comp geblieben und lasse
es automatisch beantworten.
60730
60730 13.01.2009 um 15:13:49 Uhr
Goto Top
Servus,

ich versteh das zwar nicht, muß es aber dann wohl akzeptieren ...

Aber kannst du mich mal aufklären, welche Funktion in Zeile 10 bzw. 2 (in zweiten Schnippsel) abläuft, wenn der Errorlevel equ 1 ist?
fehlt da nicht ein copy oder echo

if %ERRORLEVEL% EQU 0 del %ANRUFETEMP% else %ERRORLEVEL% EQU 1 %ANRUFETEMP% > %ANRUFE%

Gruß
barkingdog
barkingdog 13.01.2009 um 15:22:21 Uhr
Goto Top
@echo off & setlocal 
set "Anrufe=D:\ANRUFE.TXT"   
set "AnrufeTemp=D:\ANRUFETEMP.TXT"  
set "CTILOG=D:\CTILOG.TXT"   
set "Antwort=D:\antwort.txt"  
set "Puffer=D:\bla.txt"  
set "variable=n"  

:Loop 
IF exist     %Anrufe% 	for /f "tokens=1-10 delims=," %%a in ('findstr /c:", 111" "%CTILOG%"^|findstr /c:",ein"')do >>"%AnrufeTemp%"  echo %%a,%%b,%%c,%%d,%%e,%%f  
IF not exist %Anrufe% 	for /f "tokens=1-10 delims=," %%a in ('findstr /c:", 111" "%CTILOG%"^|findstr /c:",ein"')do >>"%Anrufe%" 	  echo %%a,%%b,%%c,%%d,%%e,%%f  
goto :vergleich

:vergleich
echo %variable% >%antwort%
comp  %AnrufeTemp% %ANRUFE%<%antwort%
echo %ERRORLEVEL%
if  %ERRORLEVEL%==1 goto :Ungleich
if  %ERRORLEVEL%==0 del /q %AnrufeTemp% goto :Loop
sleep 5
goto :Loop

:Ungleich
type nul > %Anrufe%
for /f "tokens=1-10 delims=," %%a in ('findstr /c:", 111" "%CTILOG%"^|findstr /c:",ein"')do >>"%Anrufe%"  echo %%a,%%b,%%c,%%d,%%e,%%f  
del /q %AnrufeTemp%
goto :Loop

Also so sieht jetzt die fertige Lösung aus.
Zu deiner Frage, dass macht nichts weil es nicht funktioniert hat.

"* Bei Umleitung mit einfachem Pfeil in einem bedingtem Befehl..

z.B. IF errorlevel 1 echo irgendwas > DATEI

wird die Ausgabedatei neu angelegt, BEVOR die Bedingung
geprüft wird. D.h. wenn die Bedingung NICHT WAHR ist, wird
trotzdem die Ausgabedatei mit 0 Bytes erzeugt. Falls die Datei
bereits vorhanden war, wird sie damit zerstört."

Quelle: http://www.antonis.de/dos/batchtut/bat-kurs/index.htm#14


Eigentlich sollte es, wenn es denn funktioniert hätte, etwaige Änderungen in die Anrufe.txt schreiben sollen.
Hm ob da ein echo oder copy fehlt weiss ich nicht, ich kenn mich mit dem Ganzen nicht so gut aus.
Ich bin froh dass ich es überhaupt irgendwie geschafft habe.

Ich bin dir dankbar für deine Hilfe, aber aus irgend einem Grund hat es halt einfach nicht funktionieren wollen.
Leider weiss ich nicht warum.
60730
60730 14.01.2009 um 10:12:29 Uhr
Goto Top
Servus,

Zu deiner Frage, dass macht nichts weil es nicht funktioniert hat.
"* Bei Umleitung mit einfachem Pfeil in einem bedingtem Befehl..
z.B. IF errorlevel 1 echo irgendwas > DATEI
wird die Ausgabedatei neu angelegt, BEVOR die Bedingung geprüft wird.
D.h. wenn die Bedingung NICHT WAHR ist, wird trotzdem die Ausgabedatei mit 0 Bytes erzeugt.
Falls die Datei bereits vorhanden war, wird sie damit zerstört."

Lass dich nicht von jedem, der eine Webseite mit Zeichensalat füllen kann verpochern face-wink
für MS-DOS bis V7.0, Stand: Juni 98

  • steht in der Überschrift - obwohl ich das eher nicht glaube, daß das Verhalten unter DOS 7 jemals so gewesen wäre .

Und meine Frage zielte genau darauf, das diese (die angefragte) Zeile eher überflüssig ist. (fehlt ein copy oder echo).

Da du mit deinem Skript zufrieden bist, hat sich die Frage ja erübrigt, wollte dich nicht nur "D*mm" sterben lassen.

Gruß