cadsupport007
Goto Top

Ergebnis von find in Variable schreiben

Hallo,

ich nutze den Befehl robocopy um CAD-Daten zu sichern. Gleichzeitig lasse ich ein Logfile schreiben, dass mir im Fehlerfall die Möglichkeit bietet, nach dem Fehler zu suchen.

Ziel schlussendlich ist es, sicherzustellen, dass der Kopiervorgang 100%-ig funktioniert hat.

robocopy %QUELLE% %ZIEL% /E /DCOPY:DA /COPY:DAT /TS /R:5 /W:5 /LOG+:"C:\boc\backup.log"  

Das funktioniert auch.

Jetzt möchte ich aber dieses Logfile nach verschiedenen Fehlermeldungen durchsuchen und beim Finden des ersten Fehlers möchte ich eine Variable setzen um damit eine Messagebox anzusteuern. Die Suchstrings sind Fehlercodes von Robocopy. Es ist mir gelungen, eine Fehlermldung per echo abzusetzen.

find /i "0x00000003" backup.log && echo Fehler gefunden!  
find /i "0x00000005" backup.log && echo Fehler gefunden!  
find /i "0x00000020" backup.log && echo Fehler gefunden!  
usw. gibt noch mehr davon

Es gelingt mir aber nicht, im Fehlerfall eine Variable mit einem Wert zu belegen.

Ich habe schon diverse Anleitungen in verschiedenen Foren u.a. mit For /F gelesen, komme aber leider nicht zum gewünschten Erfolg.

Kann mir da vielleicht jemand weiterhelfen?

Anmerkung: Die Installation von zusätzlicher Software kommt leider nicht in Frage. Wenn jemand eine grundsätzlich andere Idee in Bezug auf die Optionen von robocopy hat, bin ich auch dafür offen. Es muss nicht zwangsweise über eine log-Datei laufen.


Mit freundlichen Grüßen

cadsupport007

Content-ID: 790804946

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

Ausgedruckt am: 23.11.2024 um 17:11 Uhr

PeterPanter
PeterPanter 24.06.2021 um 13:48:49 Uhr
Goto Top
Moin, du könntest direkt nach Robocopy den Exitcode abfragen:

robocopy c:\temp d:\temp /MIR
 
 if ($LastExitCode -eq 0) {
    write-host "Robocopy erfolgreich!"  
}
else {
    write-host "Robocopy Fehler: " $LastExitCode  
}

/pp
PeterPanter
PeterPanter 24.06.2021 um 14:11:10 Uhr
Goto Top
https://docs.microsoft.com/en-US/troubleshoot/windows-server/backup-and- ...

Sehe gerade, dass nicht nur ExitCode=0 fehlerfrei bedeutet. Detailierte Info siehe Link...
CADSupport007
CADSupport007 24.06.2021 um 15:12:09 Uhr
Goto Top
Hallo,

danke erstmal für den Tipp. Werde ich nachher gleich mal ausprobieren. Habe auch schon Deine zweite Info gelesen.

Ich lasse Dich wissen, ob das so funktioniert hat.

Danke und Gruß

cadsupport007
CADSupport007
CADSupport007 24.06.2021 um 21:52:07 Uhr
Goto Top
Hallo PeterPanter,

leider hat Dein Code nicht funktioniert. face-sad

Ich hatte vergessen zu erwähnen, dass ich die ganze Aktion in einem cmd mache. Mit Deinem Code blitzte das DOS-Fenster mal kurz auf und dann war es das.

Habe den Code dann für CMD wie folgt umgeschrieben:

robocopy %QUELLE% %ZIEL% /MIR /NFL /R:5 /W:5

if (%LastExitCode%=0) (
    echo "Robocopy erfolgreich!" %LastExitCode%  
 )
else (
    echo "Robocopy Fehler: " %LastExitCode%  
 )

echo on
echo %LastExitCode%

pause

Dann wird zwar kopiert und im CMD der Kopiervorgang protokolliert. Aber sobald das
if (%LastExitCode%=0)
erreicht wird bricht die ganze Aktion ab. CMD schließt sich und pause wird nicht erreicht.

Selbst nur ein
echo %LastExitCode%
nach dem robocopy führt zum Abbruch.

Ich habe dann einen anderen Versuch gestartet. Ich habe nur robocopy gestartet und während des Kopierens das Zielllaufwerk getrennt (Verbindungsabbruch zum Netzlaufwerk simuliert). Dabei ist dann auch mein CMD-Fenster zugegangen.
Ich muss also ein Logfile schreiben lassen und dieses dann mit find oder findstr auswerten lassen. Und damit bin ich wieder am Anfang meines Problems. Eine andere Möglichkeit sehe ich nur darin, den Befehl comp über Quelle und Ziel laufen zu lassen. Ziel schlussendlich soll es sein, sicherzustellen, dass der Kopiervorgang 100%-ig funktioniert hat.

Viele Grüße

cadsupport007
PeterPanter
PeterPanter 29.06.2021 um 15:17:45 Uhr
Goto Top
Hallo CADsupport,

der Vergleich in der IF-Abfrage im Batch/CMD wird nicht mit einem einzelnen "=" geprüft. Entweder "==" oder "equ" benutzen. Und in Batch ist der %errorlevel% abzufragen. z.B.
if %errorlevel% equ 0 echo OK
Oder wenn du da in ein Logfile schreiben möchtest:
if %errorlevel% equ 0 echo OK >> C:\Testordner\TestLog.log

Wenn es Batch werden soll, guck dir ggf. die Syntax der Befehle an. Nicht PowerShell und Batch vermischen...
https://docs.microsoft.com/en-us/windows-server/administration/windows-c ...

Es spricht natürlich nichts dagegen, auch im Robocopy das Log mit zu schreiben.

/Peter
CADSupport007
CADSupport007 29.06.2021 um 23:05:48 Uhr
Goto Top
Zitat von @PeterPanter:

Hallo CADsupport,

der Vergleich in der IF-Abfrage im Batch/CMD wird nicht mit einem einzelnen "=" geprüft. Entweder "==" oder "equ" benutzen. Und in Batch ist der %errorlevel% abzufragen. z.B.
if %errorlevel% equ 0 echo OK
Oder wenn du da in ein Logfile schreiben möchtest:
if %errorlevel% equ 0 echo OK >> C:\Testordner\TestLog.log

Wenn es Batch werden soll, guck dir ggf. die Syntax der Befehle an. Nicht PowerShell und Batch vermischen...
https://docs.microsoft.com/en-us/windows-server/administration/windows-c ...

Es spricht natürlich nichts dagegen, auch im Robocopy das Log mit zu schreiben.

/Peter

Hallo PeterPanter,

danke erstmal für Deinen Tipp. Ich bin noch an einer Lösung dran. Ich werde auf alle Fälle Robocopy nehmen und das Logfile prüfen. Wenn ich meine Lösung gefunden habe, bekommst Du eine Info mit dem Code.

PS und cmd zu mixen, ist keine gute Idee. Da hast Du vollkommen recht. Noch dazu, wenn man von PS so gar keine Ahnung hat. Ich stürze mich jetzt voll auf cmd. Das brauche ich auch noch an anderen Stellen.

Ehe ich an dem Script weiter mache, muss ich noch einige andere Aufgaben abarbeiten. Antwort könnte also etwas dauern.

Gruß cadsupport007