CMD - Löschen Eventlog mit Rückmeldung
Hallo Leute,
mir wurde vorgestern super geholfen, ich hoffe das mein letztes Anliegen ebenso umsetzbar ist.
Ich google jetz schon seit Tagen nach der Möglichkeit bei einem lösch oder umbennungsbefehl im Eventlog eine Erfolgsmeldung oder eine Negative Meldung zu erzeugen.
Leider bisher ohen Erfolg
Bisher sieht es so aus:
batch startet löschen wie z.b.
del c:\"Datei.xls" >>del_"Ordner".log
Das Problem an der Sache ist das der in das log schreibt:
30.04.2014 - 15:05:15 Uhr: lösche *zensiert*
Das ist nicht im Sinne des Erfinders, da genau in dieser Zeile eine Datei nicht gelöscht werden konnte da sie wegen Zugriffes eines anderen Benutzers gesperrt war.
Gibt es hier eine Möglichkeit das anzupassen?
lg
mir wurde vorgestern super geholfen, ich hoffe das mein letztes Anliegen ebenso umsetzbar ist.
Ich google jetz schon seit Tagen nach der Möglichkeit bei einem lösch oder umbennungsbefehl im Eventlog eine Erfolgsmeldung oder eine Negative Meldung zu erzeugen.
Leider bisher ohen Erfolg
Bisher sieht es so aus:
batch startet löschen wie z.b.
del c:\"Datei.xls" >>del_"Ordner".log
Das Problem an der Sache ist das der in das log schreibt:
30.04.2014 - 15:05:15 Uhr: lösche *zensiert*
Das ist nicht im Sinne des Erfinders, da genau in dieser Zeile eine Datei nicht gelöscht werden konnte da sie wegen Zugriffes eines anderen Benutzers gesperrt war.
Gibt es hier eine Möglichkeit das anzupassen?
lg
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 237005
Url: https://administrator.de/contentid/237005
Ausgedruckt am: 08.11.2024 um 09:11 Uhr
25 Kommentare
Neuester Kommentar
So wie ich es verstanden habe:
Das Problem ist, dass del keinen Errorlevel zurück gibt. Daher benenne ich die zu löschende Datei um mit ren in eine temporäre und lösche sie dann. Wenn das Umbenennen fehl schlägt kann sie auch nicht gelöscht werden, weil sie in Benutzung ist und das schreibt er dann in die Logdatei.
Gruß
ps: Bastla und co bekommen das sicher schöner hin
@echo off
set pfad=blabla
set LOG="Log.txt"
set dateineu=temp.tmp
:anfang
set /p dateiname=Bitte den Namen der zu loeschenden Datei eingeben:
ren "%pfad%\%dateiname%" "%dateineu%"
if ERRORLEVEL 1 goto nichterfolgreich
if ERRORLEVEL 0 goto erfolgreich
:nichterfolgreich
echo Datei: "%pfad%\%dateiname%" nicht geloescht >>%LOG%
goto weitere
:erfolgreich
del "%pfad%\%dateineu%"
echo Datei: "%pfad%\%dateiname%" geloescht >>%LOG%
goto weitere
:weitere
set /p nochmal=Weitere Dateien loeschen?(j/n):
if /i "%nochmal%"=="j" goto anfang
if /i "%nochmal%"=="n" (goto eof) else (goto weitere)
:eof
Das Problem ist, dass del keinen Errorlevel zurück gibt. Daher benenne ich die zu löschende Datei um mit ren in eine temporäre und lösche sie dann. Wenn das Umbenennen fehl schlägt kann sie auch nicht gelöscht werden, weil sie in Benutzung ist und das schreibt er dann in die Logdatei.
Gruß
ps: Bastla und co bekommen das sicher schöner hin
ehm ist denn "pfad" bei dir "hier" nur geändert oder hast du pfad irgendwo deklariert? Dann muss es ja %pfad% heißen.
Du willst Dateien aus 30 verschiedenen Ordnern löschen?
Ich glaube du hast uns da ein paar Informationen vorenthalten ... gib uns mal allen Input... sonst wird das ja pures Rätselraten
Du willst Dateien aus 30 verschiedenen Ordnern löschen?
Ich glaube du hast uns da ein paar Informationen vorenthalten ... gib uns mal allen Input... sonst wird das ja pures Rätselraten
Benutze mal bitte code Tags <"code"> <"/code"> ohne die "".
Ich weiß echt nicht, ob es zu früh ist oder es einfach nicht nachvollziehbar ist wie du es schreibst was du machst ...
1. Du hast also eine CMD in der alle Server aufgeführt sind, richtig?
2. Du hast auf dem Server je eine CMD mit anderen Pfadangaben (anderer Server, andere Pfade), richtig?
Selbst dann kannst du alles in einer einzigen CMD, die dann vielleicht etwas länger ist, aber dafür in der Wartung besser ist, umsetzen.
Was soll das bezwecken:
?
Gruß
Ich weiß echt nicht, ob es zu früh ist oder es einfach nicht nachvollziehbar ist wie du es schreibst was du machst ...
1. Du hast also eine CMD in der alle Server aufgeführt sind, richtig?
2. Du hast auf dem Server je eine CMD mit anderen Pfadangaben (anderer Server, andere Pfade), richtig?
Selbst dann kannst du alles in einer einzigen CMD, die dann vielleicht etwas länger ist, aber dafür in der Wartung besser ist, umsetzen.
Was soll das bezwecken:
if not "%nochmal%" == "" set nochmal=%nochmal:~0,1%
?
Gruß
Gut, aber dann verstehe ich nicht warum den Code von oben nicht nehmen kannst
Ich habe den gleichen Code wie aus dem vorherigen Beitrag genommen und lediglich eine Errorlevelabfrage eingebaut, damit er bei nicht erfolgreicher Löschung dies auch so in der Logdatei einträgt.
Die genauen Pfade musst du anpassen - die kenne ich ja nicht
Frage: Zur Nutzung der cmds loggst du dich auf dem Server ein oder machst du das alles von einem zentralen pc aus?
Was genau steckt denn hier hinter? Du schreibst eine Zeile "blabla" in die del_baufi.log. Dann schreibst du eine weitere Zeile mit einem ganz anderen Pfad rein...
Und dann löscht du die Datei im ersten Pfad... was soll dir denn dieser zweite echo Eintrag zeigen?
Ich habe den gleichen Code wie aus dem vorherigen Beitrag genommen und lediglich eine Errorlevelabfrage eingebaut, damit er bei nicht erfolgreicher Löschung dies auch so in der Logdatei einträgt.
Die genauen Pfade musst du anpassen - die kenne ich ja nicht
Frage: Zur Nutzung der cmds loggst du dich auf dem Server ein oder machst du das alles von einem zentralen pc aus?
Was genau steckt denn hier hinter? Du schreibst eine Zeile "blabla" in die del_baufi.log. Dann schreibst du eine weitere Zeile mit einem ganz anderen Pfad rein...
Und dann löscht du die Datei im ersten Pfad... was soll dir denn dieser zweite echo Eintrag zeigen?
echo %date:~0% - %time:~0,8% Uhr: lösche \\server\System\%dateiname%" >>H:\T_LBS\tbs\Neue.CMDs\del_baufi.log
echo lösche G\B\HU\##PBinfo\Baufinanzierung\"%dateiname%"
del \\Server\system\"%dateiname%" >>H:\T_LBS\tbs\Neue.CMDs\del_baufi.log
Mhh also ich sehe hier zwei verschiedene Dinge die da rein geschrieben werden
lösche \\server\System\%dateiname%"
und
lösche G\B\HU\##PBinfo\Baufinanzierung\"%dateiname%"
Da würde jeder Vergleich ein Ungleich zurück geben, aber seis drum.
Noch mal eine Verständnisfrage:
Dieser Block:
steht da 30 mal mit verschiedenen Ordnernamen drin? Oder was meinst du mit Block 2, 3 usw?
edit:
Wenn dem so ist könntest du z.b. in dem Moment wo du j drückst und zum "anfang" springst dort entweder:
1. Mit einer Abfrage den Pfad ändern. Z.b. Bei der Abfrage, ob du eine weitere löschen willst könntest du zusätzlich zu j/n eine Option p oder so hinzufügen um den Pfad zu ändern. "goto pfadaendern". Dort kannst du dann entweder sagen du codest es so, dass dort alle Pfade gelistet sind und die mit einem Counter immer zum nächsten Pfad springen. Also dort counter = counter +1. An hand dieses Wertes könntest du dann sagen if counter == 1 pfad =blabla.
2. Du könntest dir eine Art menü basteln in dem du alle Pfade ausgibst und diese via 1-30 auswählst und dann auch den Pfad änderst mit if pfad == 1 pfad = blabla.
Der Unterschied zwischen 1 und 2 wäre, dass er bei 1. alle Pfade nacheinander abkopft in der Reihenfolge wie du es angegeben hast. Bei 2. könntest du selbst entscheiden in welchem Pfad du was löschen willst. Kommt halt darauf an was für dich praktischer ist.
Ansonsten:
Um es nur klar zu machen: Ich versuche deine Gedanken bei der Batchdatei nachvollziehen zu können um evtl. eine einfachere Methode dafür zu finden
Hintergrund ist also der, dass in diesen Verzeichnissen, die jeden morgen durchforstet werden müssen irgendwelche Dateien sind, die dort nichts zu suchen haben und dann gelöscht werden?
Sind das immer unterschiedliche Dateien? Kann man die an Hand irgendwelcher Kriterien erkennen? Wieso werden die dort immer wieder angelegt? Werden sie vorher woanders hin kopiert?
Gruß
lösche \\server\System\%dateiname%"
und
lösche G\B\HU\##PBinfo\Baufinanzierung\"%dateiname%"
Da würde jeder Vergleich ein Ungleich zurück geben, aber seis drum.
Noch mal eine Verständnisfrage:
Dieser Block:
set /P dateiname=Bitte den Namen der zu loeschenden Datei eingeben:
echo %date:~0% - %time:~0,8% Uhr: lösche \\server\System\%dateiname%" >>H:\T_LBS\tbs\Neue.CMDs\del_baufi.log
echo lösche G\B\HU\##PBinfo\Baufinanzierung\"%dateiname%"
del \\Server\system\"%dateiname%" >>H:\T_LBS\tbs\Neue.CMDs\del_baufi.log
edit:
Wenn dem so ist könntest du z.b. in dem Moment wo du j drückst und zum "anfang" springst dort entweder:
1. Mit einer Abfrage den Pfad ändern. Z.b. Bei der Abfrage, ob du eine weitere löschen willst könntest du zusätzlich zu j/n eine Option p oder so hinzufügen um den Pfad zu ändern. "goto pfadaendern". Dort kannst du dann entweder sagen du codest es so, dass dort alle Pfade gelistet sind und die mit einem Counter immer zum nächsten Pfad springen. Also dort counter = counter +1. An hand dieses Wertes könntest du dann sagen if counter == 1 pfad =blabla.
2. Du könntest dir eine Art menü basteln in dem du alle Pfade ausgibst und diese via 1-30 auswählst und dann auch den Pfad änderst mit if pfad == 1 pfad = blabla.
Der Unterschied zwischen 1 und 2 wäre, dass er bei 1. alle Pfade nacheinander abkopft in der Reihenfolge wie du es angegeben hast. Bei 2. könntest du selbst entscheiden in welchem Pfad du was löschen willst. Kommt halt darauf an was für dich praktischer ist.
Ansonsten:
Um es nur klar zu machen: Ich versuche deine Gedanken bei der Batchdatei nachvollziehen zu können um evtl. eine einfachere Methode dafür zu finden
Hintergrund ist also der, dass in diesen Verzeichnissen, die jeden morgen durchforstet werden müssen irgendwelche Dateien sind, die dort nichts zu suchen haben und dann gelöscht werden?
Sind das immer unterschiedliche Dateien? Kann man die an Hand irgendwelcher Kriterien erkennen? Wieso werden die dort immer wieder angelegt? Werden sie vorher woanders hin kopiert?
Gruß
Hab noch bissel gebastelt nach meinem aktuellen Verständnis:
Ich hoffe es ist nachvollziehbar Damit verarbeite ich dann denke ich alle batches in eine ... über die schalter: serverwechseln und pfadwechseln kannst du dann bei der Abfrage, ob noch weitere Dateien gelöscht werden sollen auch ein kleines Menü basteln.
Vielleicht verrenn ich mich ja total, aber Spaß machts trotzdem :P
@echo off
setlocal ENABLEDELAYEDEXPANSION
set LOG="Log.txt"
set dateineu=temp.tmp
:serverwechseln
set COUNT=0
set CNT=0
for %%i in ("Server1" "Server2" "Server3" "Server4") do (
set /A COUNT=!COUNT! + 1
echo !COUNT! %%i
)
set /p pfadnr=Bitte wählen Sie einen Server aus:
for %%i in ("Server1" "Server2" "Server3" "Server4") do (
set /A CNT=!CNT! + 1
if !CNT! == 1 (
set server=%%i
)
)
:pfadwechseln
set COUNT=0
set CNT=0
for %%i in ("office" "Buero" "sonstiges" "diverses") do (
set /A COUNT=!COUNT! + 1
echo !COUNT! %%i
)
set /p pfadnr=Bitte wählen Sie einen Pfad aus:
for %%i in ("office" "Buero" "sonstiges" diverses) do (
set /A CNT=!CNT! + 1
if !CNT! == %pfadnr% (
set pfad=%%i
)
)
REM usw. hier kannst du dann noch weitere Auswahlkriterien nach der oben genannten Struktur erstellen
set gesamtpfad=%server%\%pfad%
set /p dateiname=Bitte den Namen der zu loeschenden Datei eingeben:
ren "%gesamtpfad%\%dateiname%" "%dateineu%"
if ERRORLEVEL 1 goto nichterfolgreich
if ERRORLEVEL 0 goto erfolgreich
:nichterfolgreich
echo Datei: "%gesamtpfad%\%dateiname%" nicht geloescht >>%LOG%
goto weitere
:erfolgreich
del "%gesamtpfad%\%dateineu%"
echo Datei: "%gesamtpfad%\%dateiname%" geloescht >>%LOG%
goto weitere
:weitere
set /p nochmal=Weitere Dateien loeschen?(j/n):
if /i "%nochmal%"=="j" goto serverwechseln
if /i "%nochmal%"=="n" (goto eof) else (goto weitere)
:eof
Ich hoffe es ist nachvollziehbar Damit verarbeite ich dann denke ich alle batches in eine ... über die schalter: serverwechseln und pfadwechseln kannst du dann bei der Abfrage, ob noch weitere Dateien gelöscht werden sollen auch ein kleines Menü basteln.
Vielleicht verrenn ich mich ja total, aber Spaß machts trotzdem :P
Benutze bitte Code-Tags <"code"> <"/code"> ohne "" -> Auf "Mehr" klicken und dann "Bearbeiten".
Des Weiteren wäre eine Rückmeldung zum eigentlichen Problem wünschenswert wenn man sich schon dran setzt und das nicht 2 Wochen später - sorry, aber muss mal gesagt werden.
Gruß
edit: außerdem: was willst du damit machen? Wie wäre es statt mit start mit call?
Des Weiteren wäre eine Rückmeldung zum eigentlichen Problem wünschenswert wenn man sich schon dran setzt und das nicht 2 Wochen später - sorry, aber muss mal gesagt werden.
Gruß
edit: außerdem: was willst du damit machen? Wie wäre es statt mit start mit call?
Ich weiß ja nicht was du da aufrufst...
Wenn ich mir zwei cmds erstelle.
1.
batch.cmd
Dann öffnet er mir zwei Fenster. Im zweiten gibt er mir dann hallo aus.
Was soll denn in der "\V2.2 Masterbatch G-laufw.cmd" stattfinden?
Die Batch von oben?
Pack doch einfach mal alles hier rein. Sonst kann ich da nichts mehr nachvollziehen was du machst.
Oder lads hoch und schick mir ne PM.
Wenn ich mir zwei cmds erstelle.
1.
start batch.cmd
batch.cmd
echo hallo
Dann öffnet er mir zwei Fenster. Im zweiten gibt er mir dann hallo aus.
Was soll denn in der "\V2.2 Masterbatch G-laufw.cmd" stattfinden?
Die Batch von oben?
Pack doch einfach mal alles hier rein. Sonst kann ich da nichts mehr nachvollziehen was du machst.
Oder lads hoch und schick mir ne PM.
Tippfehler hin oder her
Call oder start - benutz start- Damit hats bei mir geklappt.
Ich sehe das Problem woanders.
Wenn ich es richtig verstanden habe hast du eine Batch - nennen wir sie "Verwaltung".
Diese wird vom User aufgerufen. Innerhalb dieser Batch wird dann kontrolliert, ob eine neue Batch mit dem Namen "Verwaltung" vorhanden ist.
Wenn es so ist soll er die alte löschen und die neue kopieren.
Frage: Änderst du jedes mal die Dateinamen?
Oben steht jetzt Suchen nach V2.3 und Aufruf von 2.3. Dann löschen von 2.2?
In 2.3 steht dann Update 2.4?
Call oder start - benutz start- Damit hats bei mir geklappt.
Ich sehe das Problem woanders.
Wenn ich es richtig verstanden habe hast du eine Batch - nennen wir sie "Verwaltung".
Diese wird vom User aufgerufen. Innerhalb dieser Batch wird dann kontrolliert, ob eine neue Batch mit dem Namen "Verwaltung" vorhanden ist.
Wenn es so ist soll er die alte löschen und die neue kopieren.
Frage: Änderst du jedes mal die Dateinamen?
Oben steht jetzt Suchen nach V2.3 und Aufruf von 2.3. Dann löschen von 2.2?
In 2.3 steht dann Update 2.4?