Fehler beim Ausführen einer selbstgeschriebenen Batch
Vielen Dank für die Mühe und das Bearbeiten meiner Fragen ! =)
MS Windows Home Premium 7 64-bit
Intel Core i3 CPU M 330 @ 2,13 GHz, 4 GB RAM
ATI Mobility Radeon
HD 5470
Hallo Leute =)
Ich bin Arne, 18 Jahre alt und interessiere mich seit knappen 2 Wochen für das "Batch-Schreiben/Programmieren". Auch wenn das mein erster Eintrag ist hoffe ich, Euch genug Informationen mitgeben zu können, wenn nciht fragt bitte noch enmal nach. =)
Ich habe mich an einer, von mir, selbst geschriebenen Batch gewagt. Diese soll nach Ausführung alle "Müll-Dateien" löschen. (Um genau zu sein:
- Google Chrome History
- Temorary Internet Files
- Cookies
- local TMP
- Windows History
- Zu letzte verwendete Dateien
- Windows TMP.
Meine bisherige Batch sieht so aus:
Nun die Problem(Ja, es sind mehrere):
1. Text den ich nicht haben will:
Nachdem die Google-Chrome History erfolgreich gelöscht wurde steht in cmd "Datei wurde gelöschte - C:\Users\%username%\AppData\Local\Google\Chrome\User Data\Default\History". Was ich aber nicht haben will, da ich ja meinen eigenen Text "Loeschen der Google Chrome History war erfolgreich!" extra geschrieben habe. (Ich habe sogar eine Möglichkeit gefunden: mit "cls zu arbeiten und dann wieder alles eintippen, was da stehen soll. - Ist mir aber zu affig, da gibt es bestimmt noch eine andere Methode. - Ausgabe unterdrücken?)
2. Temprary Internet FIles-Befehlskette läuft falsch ab (Version 1):
Erst wird mir via cmd gesagt "Es sind keine zu loeschenen Temporary Internet Files vorhanden!" (mein selbst geschriebenes echo).
Dann wird mir gesagt: "C:\Users\%username%\AppData\Local\Microsoft\Windows\Temporary Internet Files\* konnte nicht gefunden werden".
JETZT ABER steht in cmd: "Loeschen der Temporary Internet FIleswar erfolgreich!" (mein selbst geschriebenes echo); die Temporary-Internet-Files-Dateien sind aber immer NOCH im Ordner.
Die gleichen Ausgaben (jedoch mit Cookies; Windows History; anstatt "Temporary Internet Files") erfolgen auch beim Cookie-; und Windows-Befehl.
Ist alles irgendwie total paradox.
3. Befehlskette läuft falsch ab (Version 2):
Der 4. Befehl ( "C:\Users\%username%\AppData\Local\Temp") läuft ähnlich wie beim 2ten geschilderten Problem ab.
Der fad kann dieses mal jedoch gefunden werden, es kann aber nichts gelöscht werden, da die Dateien gerade wohl in einem Prozess verwendet werden
Sonst ist die Ausgabe exakt wie beim 2ten geschilderten Problem. - Soll ich den Befehl ganz raus nehmen, weil man die Dateien einfach nciht löschen kann, oder gibt´s da eine Möglichkeit?
Die gleiche Ausgabe (jedoch mit "Windows TMP" anstatt "local TMP") erfolgt auch beim 6. (""C:\Windows\Temp") Befehl.
4. Befehlskette läuft falsch ab (Version 3):
Der 5. Befehl ("C:\Users\%username%\AppData\Roaming\Microsoft\Windows\Recent") klappt zwar, jedch wird hier wieder über cmd alles angezeigt.
"Es sind keine zu loeschenden Zuletzt verwendeten Dateien vorhanden"
die Dateien werden aber gelöscht und es wird der Pfad angezeigt....
"Loeschen der Zuletzt verwendeten Dateien war erfolgreich!"
Noch eine letzte unabhänige Frage:
5. Buch:
Könntet Ihr mir Bücher zur Batchprogrammierung empfehlen (für Beginner)? Oder würdet Ihr sogar eine ganz andere Programmiersprache bevorzugen, weil Ihr Batch öde findet und man nciht viel damit machen kann? - Lasst es mich wissen =)
Visual Basic hört sich für mich naemlich auch ganz interessant an : )
Einen schönen Wochenstart, wünscht Euch
Arne =)
[Edit Biber] Codeformatierung. [/Edit]
MS Windows Home Premium 7 64-bit
Intel Core i3 CPU M 330 @ 2,13 GHz, 4 GB RAM
ATI Mobility Radeon
HD 5470
Hallo Leute =)
Ich bin Arne, 18 Jahre alt und interessiere mich seit knappen 2 Wochen für das "Batch-Schreiben/Programmieren". Auch wenn das mein erster Eintrag ist hoffe ich, Euch genug Informationen mitgeben zu können, wenn nciht fragt bitte noch enmal nach. =)
Ich habe mich an einer, von mir, selbst geschriebenen Batch gewagt. Diese soll nach Ausführung alle "Müll-Dateien" löschen. (Um genau zu sein:
- Google Chrome History
- Temorary Internet Files
- Cookies
- local TMP
- Windows History
- Zu letzte verwendete Dateien
- Windows TMP.
Meine bisherige Batch sieht so aus:
@echo off
set pfad=%cd%
echo System Eraser - Programmed by Arne
echo.
echo.
echo.
pause
if not exist "C:\Users\%username%\AppData\Local\Google\Chrome\User Data\Default\History" goto nichtloeschen
if exist "C:\Users\%username%\AppData\Local\Google\Chrome\User Data\Default\History" goto loeschen
if not exist "C:\Users\%username%\AppData\Local\Microsoft\Windows\Temporary Internet Files" goto nidelTIF
if exist "C:\Users\%username%\AppData\Local\Microsoft\Windows\Temporary Internet Files" goto delTIF
if not exist "C:\Users\%username%\AppData\Roaming\Microsoft\Windows\Cookies" goto nidelCoo
if exist "C:\Users\%username%\AppData\Roaming\Microsoft\Windows\Cookies" goto delCoo
if not exist "C:\Users\%username%\AppData\Local\Temp" goto nidelLTM
if exist "C:\Users\%username%\AppData\Local\Temp" goto delLTM
if not exist "C:\Users\%username%\AppData\Local\Microsoft\Windows\History" goto nidelWHI
if exist "C:\Users\%username%\AppData\Local\Microsoft\Windows\History" goto delWHI
if not exist "C:\Users\%username%\AppData\Roaming\Microsoft\Windows\Recent" goto nidelWRE
if exist "C:\Users\%username%\AppData\Roaming\Microsoft\Windows\Recent" goto delWR
if not exist "C:\Windows\Temp" goto nidelWT
if exist "C:\Windows\Temp" goto delWT
:nichtloeschen
echo Es ist keine zu loeschende Google Chrome History vorhanden!
pause
:loeschen
del "C:\Users\%username%\AppData\Local\Google\Chrome\User Data\Default\History" /s /q /f && echo Loeschen der Google Chrome History war erfolgreich!
pause
:nidelTIF
echo Es sind keine zu loeschenden Temporary Internet Files vorhanden!
pause
:delTIF
del "C:\Users\%username%\AppData\Local\Microsoft\Windows\Temporary Internet Files" && echo Loeschen der Temporary Internet Files war erfolgreich!
pause
:nidelCoo
echo Es sind keine zu loeschenden Cookies vorhanden!
pause
:delCoo
del "C:\Users\%username%\AppData\Roaming\Microsoft\Windows\Cookies" /s /q /f && echo Loeschen der Cookies war erfolgreich!
pause
:nidelLTM
echo Es sind keine zu loeschenden Temporaeren Dateien vorhanden!
pause
:delLTM
del "C:\Users\%username%\AppData\Local\Temp" /s /q /f && echo Loeschen der Temporaeren Dateien war erfolgreich!
pause
:nidelWHI
echo Es ist keine zu loeschende Windows History vorhanden!
pause
:delWHI
del "C:\Users\%username%\AppData\Local\Microsoft\Windows\History" /s /q /f && echo Loeschen der Windows History war erfolgreich!
pause
:nidelWRE
echo Es sind keine zu loeschenden Zuletzt verwendeten Dateien vorhanden!
pause
:delWRE
del "C:\Users\%username%\AppData\Roaming\Microsoft\Windows\Recent" /s /q /f && echo Loeschen der Zuletzt verwendeten Dateien war erfolgreich!
pause
:nidelWT
echo Es sind keine zu loeschenden Windows Temp Dateien vorhanden!
pause
:delWT
del "C:\Windows\Temp" /s /q /f && echo Loeschen der Windows Temp Dateien war erfolgreich
pause
@echo off
echo.
echo.
echo.
echo System Eraser - Programmed by Arne
pause
Nun die Problem(Ja, es sind mehrere):
1. Text den ich nicht haben will:
Nachdem die Google-Chrome History erfolgreich gelöscht wurde steht in cmd "Datei wurde gelöschte - C:\Users\%username%\AppData\Local\Google\Chrome\User Data\Default\History". Was ich aber nicht haben will, da ich ja meinen eigenen Text "Loeschen der Google Chrome History war erfolgreich!" extra geschrieben habe. (Ich habe sogar eine Möglichkeit gefunden: mit "cls zu arbeiten und dann wieder alles eintippen, was da stehen soll. - Ist mir aber zu affig, da gibt es bestimmt noch eine andere Methode. - Ausgabe unterdrücken?)
2. Temprary Internet FIles-Befehlskette läuft falsch ab (Version 1):
Erst wird mir via cmd gesagt "Es sind keine zu loeschenen Temporary Internet Files vorhanden!" (mein selbst geschriebenes echo).
Dann wird mir gesagt: "C:\Users\%username%\AppData\Local\Microsoft\Windows\Temporary Internet Files\* konnte nicht gefunden werden".
JETZT ABER steht in cmd: "Loeschen der Temporary Internet FIleswar erfolgreich!" (mein selbst geschriebenes echo); die Temporary-Internet-Files-Dateien sind aber immer NOCH im Ordner.
Die gleichen Ausgaben (jedoch mit Cookies; Windows History; anstatt "Temporary Internet Files") erfolgen auch beim Cookie-; und Windows-Befehl.
Ist alles irgendwie total paradox.
3. Befehlskette läuft falsch ab (Version 2):
Der 4. Befehl ( "C:\Users\%username%\AppData\Local\Temp") läuft ähnlich wie beim 2ten geschilderten Problem ab.
Der fad kann dieses mal jedoch gefunden werden, es kann aber nichts gelöscht werden, da die Dateien gerade wohl in einem Prozess verwendet werden
Sonst ist die Ausgabe exakt wie beim 2ten geschilderten Problem. - Soll ich den Befehl ganz raus nehmen, weil man die Dateien einfach nciht löschen kann, oder gibt´s da eine Möglichkeit?
Die gleiche Ausgabe (jedoch mit "Windows TMP" anstatt "local TMP") erfolgt auch beim 6. (""C:\Windows\Temp") Befehl.
4. Befehlskette läuft falsch ab (Version 3):
Der 5. Befehl ("C:\Users\%username%\AppData\Roaming\Microsoft\Windows\Recent") klappt zwar, jedch wird hier wieder über cmd alles angezeigt.
"Es sind keine zu loeschenden Zuletzt verwendeten Dateien vorhanden"
die Dateien werden aber gelöscht und es wird der Pfad angezeigt....
"Loeschen der Zuletzt verwendeten Dateien war erfolgreich!"
Noch eine letzte unabhänige Frage:
5. Buch:
Könntet Ihr mir Bücher zur Batchprogrammierung empfehlen (für Beginner)? Oder würdet Ihr sogar eine ganz andere Programmiersprache bevorzugen, weil Ihr Batch öde findet und man nciht viel damit machen kann? - Lasst es mich wissen =)
Visual Basic hört sich für mich naemlich auch ganz interessant an : )
Einen schönen Wochenstart, wünscht Euch
Arne =)
[Edit Biber] Codeformatierung. [/Edit]
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 161268
Url: https://administrator.de/forum/fehler-beim-ausfuehren-einer-selbstgeschriebenen-batch-161268.html
Ausgedruckt am: 23.04.2025 um 06:04 Uhr
7 Kommentare
Neuester Kommentar
Hallo DerArne und willkommen im Forum!
Gleich vorweg: Wenn Du Batches testest, solltest Du auf "
Abhilfe würde hier ein "
Zumeist wenig sinnvoll ist es, eine Abfrage zweimal (beim zweiten Mal mit umgekehrten Vorzeichen) durchzuführen - daher anstelle von
einfacher
Um die Ausgabe eines Befehles zu unterdrücken, kannst du diese durch ein angefügtes "
Noch eine Anmerkung zu "C:\Users\%username%": Wenn Du die für diesen Zweck vorgesehenen Variable "%userprofile%" verwendest, machst du Deinen Batch universeller (zB auch für XP) verwendbar. Welche weiteren Variablen in dieser Hinsicht zur Verfügung stehen, kannst Du mit "
Dass Deine Zeile 2 keinen Sinn hat, sei nur nebenbei erwähnt - dass Deine Zeile 2 nicht mit Zeilennummer und ansehnlicher formatiert abgebildet ist, liegt an der Nichtverwendung einer passenden ...
Grüße
bastla
Gleich vorweg: Wenn Du Batches testest, solltest Du auf "
echo off
" verzichten bzw es temporär auf "echo on
" ändern - dann kannst Du den Ablauf nachvollziehen; so würdest Du zB sehen, dass natürlich nach dem ersten Sprung zu "nichtloeschen"oder "loeschen" nie wieder "nach oben" zurückgekehrt wird, um das Vorhandensein der anderen Ordner zu prüfen, sondern dass nach der jeweiligen "pause
" gleich der nachfolgende Block in Angriff genommen wird ...Abhilfe würde hier ein "
call :nichtloeschen
" in der Abfrage und ein "goto :eof
" nach dem Löschvorgang schaffen.Zumeist wenig sinnvoll ist es, eine Abfrage zweimal (beim zweiten Mal mit umgekehrten Vorzeichen) durchzuführen - daher anstelle von
if not exist "C:\Users\%username%\AppData\Local\Google\Chrome\User Data\Default\History" goto nichtloeschen
if exist "C:\Users\%username%\AppData\Local\Google\Chrome\User Data\Default\History" goto loeschen
if not exist "C:\Users\%username%\AppData\Local\Google\Chrome\User Data\Default\History" (call :nichtloeschen) else (call :loeschen)
>nul
" ins "Nichts" umleiten (für Fehlermeldungen ginge das mit "2>nul
", ist aber speziell in der Testphase nicht sinnvoll).Noch eine Anmerkung zu "C:\Users\%username%": Wenn Du die für diesen Zweck vorgesehenen Variable "%userprofile%" verwendest, machst du Deinen Batch universeller (zB auch für XP) verwendbar. Welche weiteren Variablen in dieser Hinsicht zur Verfügung stehen, kannst Du mit "
set
" anzeigen lassen.Dass Deine Zeile 2 keinen Sinn hat, sei nur nebenbei erwähnt - dass Deine Zeile 2 nicht mit Zeilennummer und ansehnlicher formatiert abgebildet ist, liegt an der Nichtverwendung einer passenden ...
Grüße
bastla
Hallo DerArne!
Einrückungen im Code sind eine gute Sache - wenn sie maßvoll und systematisch verwendet werden; da die einzelnen "Programmteile" auf der selben Ebene stehen, hätte ich in diesem Fall überhaupt keine Einrückung verwendet ...
hat ein "C:\Users" zuviel - in "%userprofile%" ist das ohnehin schon enthalten; darf ich daher nochmals auf die Möglichkeit hinweisen, per
alle verfügbaren (System-)Variablen anzeigen zu lassen? Mit zB "

Da zB ":nichtloeschen" und ":loeschen" unterschiedliche Unterprogramme sind, steht jedem der beiden ein ordnungsgemäßes Ende (per "
Schließlich wäre auch noch in Zeile 26 ein "
Blieben noch die Zeilen ab 84 - bzw blieben sie besser nicht, da auch dieser Programmteil nie errreicht werden kann.
Grüße
bastla
Einrückungen im Code sind eine gute Sache - wenn sie maßvoll und systematisch verwendet werden; da die einzelnen "Programmteile" auf der selben Ebene stehen, hätte ich in diesem Fall überhaupt keine Einrückung verwendet ...
C:\Users\%userprofile%
set
set u
" werden dann übrigens nur jene aufgelistet, die auch mit "u" beginnen (die mit "a" könnten für Dein Vorhaben auch sehr interessant sein) ...ob ich das Prinzip und Einsetzten von "goto "eof" verstanden habe?!
Die richtige (und positive) Antwort kann hier nur lauten: zur Hälfte ja. Da zB ":nichtloeschen" und ":loeschen" unterschiedliche Unterprogramme sind, steht jedem der beiden ein ordnungsgemäßes Ende (per "
goto :eof
" zu). Andererseits wird die Pause in zB Zeile 33 nie stattfinden, weil bereits vorher der Sprung zurück erfolgt.Schließlich wäre auch noch in Zeile 26 ein "
goto :eof
" anzubringen, da hier das Hauptprogramm endet - derzeit würde dann nochmals der Teil ":nichtloeschen" durchlaufen ...Blieben noch die Zeilen ab 84 - bzw blieben sie besser nicht, da auch dieser Programmteil nie errreicht werden kann.
Grüße
bastla
Hallo DerArne!
Trotz der weiterhin überflüssigen Zeilen 2 und 98ff sowie der genauso unnötigen Einrückungen sollte das eigentlich passen - wobei die jeweils exaktere Abfrage nicht auf das Vorhandensein des Ordners, sondern darin enthalterner Dateien so aussehen könnte:
Zur Kontrolle könntst Du ja zwischendurch Zeilen der Art
einstreuen - dann kannst Du genau kontrollieren, was der jeweilige Ordner enthält ...
Grüße
bastla
Trotz der weiterhin überflüssigen Zeilen 2 und 98ff sowie der genauso unnötigen Einrückungen sollte das eigentlich passen - wobei die jeweils exaktere Abfrage nicht auf das Vorhandensein des Ordners, sondern darin enthalterner Dateien so aussehen könnte:
if not exist "C:\Windows\Temp\*.*" (call :nidelWT) else (call :delWT)
dir /a "C:\Windows\Temp"
Grüße
bastla
moin DerArne,
statt "%userprofile%\AppData\Roaming\..."
kanns Du das etwas Kürzere "%appdata%\..."
verwenden.
bei den vielen "if exist..." und "del ..." solltest Du die vielen fehlenden Backslashes in den Pfadangaben hineinpuzzeln.
(NICHT mit: "Adresse als Text Kopieren" sondern mit: "Adresse kopieren" die Pfadangaben aus der AdressZeile holen)
das wäre Dir aber bestimmt mit "@echo on" und Batchausführung im CMD-Fenster gleich aufgefallen
PS. ist ein System eraser nicht "Deinstallieren von Windows" - aber diese Setup-Routine ist noch nicht eingebaut....
Gruß Phil
statt "%userprofile%\AppData\Roaming\..."
kanns Du das etwas Kürzere "%appdata%\..."
verwenden.
bei den vielen "if exist..." und "del ..." solltest Du die vielen fehlenden Backslashes in den Pfadangaben hineinpuzzeln.
(NICHT mit: "Adresse als Text Kopieren" sondern mit: "Adresse kopieren" die Pfadangaben aus der AdressZeile holen)
das wäre Dir aber bestimmt mit "@echo on" und Batchausführung im CMD-Fenster gleich aufgefallen
PS. ist ein System eraser nicht "Deinstallieren von Windows" - aber diese Setup-Routine ist noch nicht eingebaut....
Gruß Phil
@ph

Dein erster Hinweis ist etwas deutlicher als mein eher nur angedeuteter Vorschlag mit "
Grüße
bastla
bei den vielen "if exist..." und "del ..." solltest Du die vielen fehlenden Backslashes in den Pfadangaben hineinpuzzeln.
das wäre Dir aber bestimmt mit "@echo on" und Batchausführung im CMD-Fenster gleich aufgefallen
Abgesehen davon, dass ja "das wäre Dir aber bestimmt mit "@echo on" und Batchausführung im CMD-Fenster gleich aufgefallen
echo on
" und ganz viele Pausen verwendet werden, ist die Darstellung hier im Thread nur ein Überbleibsel der kürzlich aufgetretenen Serverprobleme - DerArne hatte die Backslashes beim Testen seines lokal gespeicherten Batches vermutlich ohnehin vollzählig und an passender Stelle (obwohl natürlich seine beschriebenen Symptome den Verdacht trotzdem aufkommen ließen, dass die Pfade nicht ganz korrekt angegeben wären) ... Dein erster Hinweis ist etwas deutlicher als mein eher nur angedeuteter Vorschlag mit "
set a
" weiter oben - dürfte vermutlich auch nötig sein ...Grüße
bastla