derarne
Goto Top

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:

@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]

Content-Key: 161268

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

Printed on: April 20, 2024 at 01:04 o'clock

Member: bastla
bastla Feb 22, 2011 at 06:56:34 (UTC)
Goto Top
Hallo DerArne und willkommen im Forum!

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  
einfacher
if not exist "C:\Users\%username%\AppData\Local\Google\Chrome\User Data\Default\History" (call :nichtloeschen) else (call :loeschen)  
Um die Ausgabe eines Befehles zu unterdrücken, kannst du diese durch ein angefügtes ">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
Member: DerArne
DerArne Feb 22, 2011 at 18:31:21 (UTC)
Goto Top
Hey Bastla,
vielen Dank fuer Deine schnelle Antwort. Ich habe meine Batch mal geaendert und wollte nun wissen,. ob es so ist, wie Du es mir vorgeschlagen hast. (Zum Beispiel ob ich das Prinzip und Einsetzten von "goto "eof" verstanden habe?!)

@echo off
	set pfad=%cd%
 echo System Eraser - Programmed by Arne
 echo.
 echo.
 echo.
 pause
	if not exist "C:Users\%userprofile%AppDataLocalGoogleChromeUser DataDefaultHistory" (call :nichtloeschen) else (call :loeschen)  
	

			if not exist "C:Users\%userprofile%AppDataLocalMicrosoftWindowsTemporary Internet Files" (call :nidelTIF) else (call :delTIF)   
			
				if not exist "C:Users\%userprofile%AppDataRoamingMicrosoftWindowsCookies" (call :nidelCoo) else (call :delCoo)  
				
			
					if not exist "C:Users\%userprofile%AppDataLocalTemp" (call :nidelLTM) else (call :delLTM)  
					
					
						if not exist "C:Users\%userprofile%AppDataLocalMicrosoftWindowsHistory" (call :nidelWHI) else (call :delWHI)  
						
						
							if not exist "C:Users\%userprofile%AppDataRoamingMicrosoftWindowsRecent" (call :nidelWRE) else (call :delWRE)  
							
							
								if not exist "C:WindowsTemp" (call :nidelWT) else (call :delWT)  
								
	:nichtloeschen
	echo Es ist keine zu loeschende Google Chrome History vorhanden!
	pause
	:loeschen
	del "C:Users\%userprofile%AppDataLocalGoogleChromeUser DataDefaultHistory" /s /q /f && echo Loeschen der Google Chrome History war erfolgreich!  
	goto :eof
	pause


			:nidelTIF
			echo Es sind keine zu loeschenden Temporary Internet Files vorhanden!
			pause
			:delTIF
			del "C:Users\%userprofile%AppDataLocalMicrosoftWindowsTemporary Internet Files" && echo Loeschen der Temporary Internet Files war erfolgreich!  
			goto :eof
			pause
		
				:nidelCoo
				echo Es sind keine zu loeschenden Cookies vorhanden!
				pause
				:delCoo
				del "C:Users\%userprofile%AppDataRoamingMicrosoftWindowsCookies" /s /q /f && echo Loeschen der Cookies war erfolgreich!  
				goto :eof
				pause
			
					:nidelLTM
					echo Es sind keine zu loeschenden Temporaeren Dateien vorhanden!
					pause
					:delLTM
					del "C:Users\%userprofile%AppDataLocalTemp" /s /q /f && echo Loeschen der Temporaeren Dateien war erfolgreich!  
					goto :eof
					pause
					
						:nidelWHI
						echo Es ist keine zu loeschende Windows History vorhanden!
						pause
						:delWHI
						del "C:Users\%userprofile%AppDataLocalMicrosoftWindowsHistory" /s /q /f && echo Loeschen der Windows History war erfolgreich!  
						goto :eof
						pause
						
							:nidelWRE
							echo Es sind keine zu loeschenden Zuletzt verwendeten Dateien vorhanden!
							pause
							:delWRE
							del "C:Users\%userprofile%AppDataRoamingMicrosoftWindowsRecent" /s /q /f && echo Loeschen der Zuletzt verwendeten Dateien war erfolgreich!  
							goto :eof
							pause
							
								:nidelWT
								echo Es sind keine zu loeschenden Windows Temp Dateien vorhanden!
								pause
								:delWT
								del "C:WindowsTemp" /s /q /f && echo Loeschen der Windows Temp Dateien war erfolgreich  
								goto :eof
								pause
								
 @echo off
 echo.
 echo.
 echo.
 echo System Eraser - Programmed by Arne
 pause

Gruss,
Arne =)

PS: Die 2. Zeile wird noch Sinn ergeben, ich werde noch etwas dazufuegen, jetzt geht es mir aber erst einmal um die eigentliche Funktion, die von der Batch ausgehen soll : )
Member: bastla
bastla Feb 22, 2011 at 20:33:23 (UTC)
Goto Top
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 ...
C:\Users\%userprofile%
hat ein "C:\Users" zuviel - in "%userprofile%" ist das ohnehin schon enthalten; darf ich daher nochmals auf die Möglichkeit hinweisen, per
set
alle verfügbaren (System-)Variablen anzeigen zu lassen? Mit zB "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. face-wink

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
Member: DerArne
DerArne Feb 23, 2011 at 02:12:38 (UTC)
Goto Top
Hallo Bastla =)
Ich habe menie Batch noch einmal überarbeitet. Jedoch kommen jetzt immer nur die "Es sind keine zu loeschenden..........vorhanden!". - Hab ich da immer noch etwas versaubeutelt?

 @echo on
 set pfad=%cd%
 echo System Eraser - Programmed by Arne
 echo.
 echo.
 echo.
 pause
	if not exist "%userprofile%\AppDataLocalGoogleChromeUser DataDefaultHistory" (call :nichtloeschen) else (call :loeschen)  
	

			if not exist "%userprofile%\AppDataLocalMicrosoftWindowsTemporary Internet Files" (call :nidelTIF) else (call :delTIF)   
			
				if not exist "%userprofile%\AppDataRoamingMicrosoftWindowsCookies" (call :nidelCoo) else (call :delCoo)  
				
			
					if not exist "%userprofile%\AppDataLocalTemp" (call :nidelLTM) else (call :delLTM)  
					
					
						if not exist "%userprofile%\AppDataLocalMicrosoftWindowsHistory" (call :nidelWHI) else (call :delWHI)  
						
						
							if not exist "%userprofile%\AppDataRoamingMicrosoftWindowsRecent" (call :nidelWRE) else (call :delWRE)  
							
							
								if not exist "C:WindowsTemp" (call :nidelWT) else (call :delWT)  
								goto :eof 
								
	:nichtloeschen
	echo Es ist keine zu loeschende Google Chrome History vorhanden!
	pause
	goto :eof
	:loeschen
	del "%userprofile%\AppDataLocalGoogleChromeUser DataDefaultHistory" /s /q /f && echo Loeschen der Google Chrome History war erfolgreich!  
	pause
	goto :eof
	


			:nidelTIF
			echo Es sind keine zu loeschenden Temporary Internet Files vorhanden!
			pause
			goto :eof
			:delTIF
			del "%userprofile%\AppDataLocalMicrosoftWindowsTemporary Internet Files" && echo Loeschen der Temporary Internet Files war erfolgreich!  
			pause
			goto :eof
			
		
				:nidelCoo
				echo Es sind keine zu loeschenden Cookies vorhanden!
				pause
				goto :eof
				:delCoo
				del "%userprofile%\AppDataRoamingMicrosoftWindowsCookies" /s /q /f && echo Loeschen der Cookies war erfolgreich!  
				pause
				goto :eof
				
					:nidelLTM
					echo Es sind keine zu loeschenden Temporaeren Dateien vorhanden!
					pause
					goto :eof
					:delLTM
					del "%userprofile%\AppDataLocalTemp" /s /q /f && echo Loeschen der Temporaeren Dateien war erfolgreich!  
					pause
					goto :eof
					
					
						:nidelWHI
						echo Es ist keine zu loeschende Windows History vorhanden!
						pause
						goto :eof
						:delWHI
						del "%userprofile%\AppDataLocalMicrosoftWindowsHistory" /s /q /f && echo Loeschen der Windows History war erfolgreich!  
						pause
						goto :eof
						
						
							:nidelWRE
							echo Es sind keine zu loeschenden Zuletzt verwendeten Dateien vorhanden!
							pause
							goto :eof
							:delWRE
							del "%userprofile%\AppDataRoamingMicrosoftWindowsRecent" /s /q /f && echo Loeschen der Zuletzt verwendeten Dateien war erfolgreich!  
							pause
							goto :eof
							
							
								:nidelWT
								echo Es sind keine zu loeschenden Windows Temp Dateien vorhanden!
								pause
								goto :eof
								:delWT
								del "C:WindowsTemp" /s /q /f && echo Loeschen der Windows Temp Dateien war erfolgreich!  
								pause
								goto :eof
								
								
 @echo off
 echo.
 echo.
 echo.
 echo System Eraser - Programmed by Arne
 pause

Gruß, Arne =)
Member: bastla
bastla Feb 23, 2011 at 15:37:01 (UTC)
Goto Top
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:
if not exist "C:\Windows\Temp\*.*" (call :nidelWT) else (call :delWT)
Zur Kontrolle könntst Du ja zwischendurch Zeilen der Art
dir /a "C:\Windows\Temp"
einstreuen - dann kannst Du genau kontrollieren, was der jeweilige Ordner enthält ...

Grüße
bastla
Member: pieh-ejdsch
pieh-ejdsch Feb 23, 2011 at 22:50:52 (UTC)
Goto Top
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
Member: bastla
bastla Feb 23, 2011 at 23:01:44 (UTC)
Goto Top
@ph
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 "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) ... face-wink
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