Syntaxfehler in der FOR-Schleife im Browsercache, der das Batch-Skript löscht

304
Robert Burik

Ich versuche, ein Batch für ein Browsercache-Clearing zu erstellen, das von einem Administrator auf einem Server ausgeführt werden kann, um den Cache aller Benutzer nach Bedarf oder nach Zeitplan zu löschen.

Ich bin jedoch ziemlich fest in der Hauptschleife. Es wirft den Fehler "Die Syntax des Befehls ist falsch" zurück.

Ich habe überall nach Antworten gesucht und festgestellt, dass das Problem höchstwahrscheinlich mit den Variablen zusammenhängt, aber ich konnte es nicht zum Laufen bringen.

Hier ist der Code, den ich zurückkehrte, wo ich zuerst den Fehler erhalten habe. Vielleicht können Sie mir helfen, dies zu korrigieren.

Vielen Dank für Ihre großartige Hilfe!

REM @echo off CLS SETLOCAL ENABLEDELAYEDEXPANSION  REM @@@@ creating listfile path @@@@ IF NOT EXIST "%SystemDrive%\Temp" MD "%SystemDrive%\Temp" SET UserListFile=%SystemDrive%\Temp\userlist.txt  REM @@@@ DELeting already existing listfile @@@@ IF NOT EXIST %UserListFile% GOTO STARTOFSCRIPT DEL %UserListFile%  :STARTOFSCRIPT  REM @@@@ writing userlist into file @@@@ DIR %SystemDrive%\Users\ /A:D /B /R > %UserListFile%  REM @@@@ start of main FOR loop @@@@ FOR /F "tokens=*" %%A IN (%UserListFile%) DO ( ECHO %%A  REM @@@@ Chrome cleaning part @@@@ IF NOT EXIST "%SystemDrive%\Users\%%A\AppData\Local\Google\Chrome\User Data\Default" GOTO NOCHROMEDEFAULT ECHO Cleaning Chrome ... CD "%SystemDrive%\Users\%%A\AppData\Local\Google\Chrome\User Data\Default" DEL /Q /S /F "Application Cache" DEL /Q /S /F "Cache" DEL /Q /S /F "Media Cache" :NOCHROMEDEFAULT IF NOT EXIST "%SystemDrive%\Users\%%A\AppData\Local\Google\Chrome\User Data\Guest Profile" GOTO NOCHROMEGUEST CD "%SystemDrive%\Users\%%A\AppData\Local\Google\Chrome\User Data\Guest Profile" DEL /Q /S /F "Application Cache" DEL /Q /S /F "Cache" DEL /Q /S /F "Media Cache" :NOCHROMEGUEST SET PROFNUM=0 FOR /L %%G IN (1,1,10) DO ( SET /A PROFNUM+=1 IF NOT EXIST "%SystemDrive%\Users\%%A\AppData\Local\Google\Chrome\User^ Data\Profile^ %PROFNUM%" GOTO NOPROFNUM CD "%SystemDrive%\Users\%%A\AppData\Local\Google\Chrome\User Data\Profile %PROFNUM%" DEL /Q /S /F "Application Cache" DEL /Q /S /F "Cache" DEL /Q /S /F "Media Cache" ) :NOPROFNUM  REM @@@@ Mozilla cleaning part @@@@ IF NOT EXIST "%SystemDrive%\Users\%%A\AppData\Local\Mozilla\Firefox\Profiles" GOTO NOMOZILLA ECHO Cleaning Mozilla ... SET DataDir=%SystemDrive%\Users\%%A\AppData\Local\Mozilla\Firefox\Profiles DEL /Q /S /F "%DataDir%" >NUL 2>&1 RD /S /Q "%DataDir%" >NUL 2>&1 for /d %%X in (%SystemDrive%\Users\%%A\AppData\Roaming\Mozilla\Firefox\Profiles\*) do DEL /Q /S /F %%X\*sqlite >NUL 2>&1 :NOMOZILLA  REM @@@@ Internet Explorer cleaning part @@@@ IF NOT EXIST "%SystemDrive%\Users\%%A\AppData\Local\Microsoft\Intern~1" GOTO NOEXPLR ECHO Cleaning IE ... SET DataDir=%SystemDrive%\Users\%%A\AppData\Local\Microsoft\Intern~1 DEL /Q /S /F "%DataDir%" >NUL 2>&1 RD /S /Q "%DataDir%" >NUL 2>&1 SET History=%SystemDrive%\Users\%%A\AppData\Local\Microsoft\Windows\History DEL /Q /S /F "%History%" >NUL 2>&1 RD /S /Q "%History%" >NUL 2>&1 SET IETemp=%SystemDrive%\Users\%%A\AppData\Local\Microsoft\Windows\Tempor~1 DEL /Q /S /F "%IETemp%" >NUL 2>&1 RD /S /Q "%IETemp%" >NUL 2>&1 SET Cookies=%SystemDrive%\Users\%%A\AppData\Roaming\Microsoft\Windows\Cookies DEL /Q /S /F "%Cookies%" >NUL 2>&1 RD /S /Q "%Cookies%" >NUL 2>&1 :NOEXPLR  REM @@@@ Opera cleaning part @@@@ IF NOT EXIST "%SystemDrive%\Users\%%A\AppData\Local\Opera\Opera" GOTO NOOPERA ECHO Cleaning Opera ... SET DataDir=%SystemDrive%\Users\%%A\AppData\Local\Opera\Opera SET DataDir2=%SystemDrive%\Users\%%A\AppData\Roaming\Opera\Opera DEL /Q /S /F "%DataDir%" >NUL 2>&1 RD /S /Q "%DataDir%" >NUL 2>&1 DEL /Q /S /F "%DataDir2%" >NUL 2>&1 RD /S /Q "%DataDir2%" >NUL 2>&1 :NOOPERA  REM @@@@ Safari cleaning part @@@@ IF NOT EXIST "%SystemDrive%\Users\%%A\AppData\Local\Applec~1\Safari" GOTO NOSAFARI ECHO Cleaning Safari ... SET DataDir=%SystemDrive%\Users\%%A\AppData\Local\Applec~1\Safari SET DataDir2=%SystemDrive%\Users\%%A\AppData\Roaming\Applec~1\Safari DEL /Q /S /F "%DataDir%\History" >NUL 2>&1 RD /S /Q "%DataDir%\History" >NUL 2>&1 DEL /Q /S /F "%DataDir%\Cache.db" >NUL 2>&1 DEL /Q /S /F "%DataDir%\WebpageIcons.db" >NUL 2>&1 DEL /Q /S /F "%DataDir2%" >NUL 2>&1 RD /S /Q "%DataDir2%" >NUL 2>&1 :NOSAFARI   REM @@@@ end of main FOR loop @@@@ )  :ENDOFSCRIPT  DEL /Q /S /F "%UserListFile%" >NUL 2>&1 TIMEOUT /T 5 >NUL 2>&1 
1
Wie wäre es, wenn Sie uns sagen, wo sich die Fehler in Ihrer Codewand befinden? DavidPostill vor 7 Jahren 0
Sie sollten auch [Debuggen Ihrer Batchdateien] (http://www.robvanderwoude.com/battech_debugging.php) lesen. Wenn Sie das "Echo aus" entfernen und auf den Ausgang schauen, wird wahrscheinlich der erste Fehler angezeigt. DavidPostill vor 7 Jahren 0
Verwenden Sie "goto" und ": label" nicht in Klammern (wie for-Loops oder if-Blöcke). Siehe [Windows-Batchdatei mit goto-Befehl funktioniert nicht] (https://stackoverflow.com/a/4006006). Dort finden Sie eine gute Erklärung, warum dies nicht der Fall ist. DavidPostill vor 7 Jahren 0
Vielen Dank @DavidPostill! Die Kennzeichnung war das Problem. Ich musste die gesetzlich vorgeschriebene sekundäre Kennzeichnung verwenden. Robert Burik vor 7 Jahren 0

1 Antwort auf die Frage

1
Robert Burik

Danke für alles, das ist zu einer funktionierenden Lösung gekommen. Fühlen Sie sich frei, dieses Skript zum Bereinigen des Browser-Cache für alle Benutzer zu verwenden:

@echo off CLS SETLOCAL ENABLEDELAYEDEXPANSION  REM @@@@ creating listfile path @@@@ IF NOT EXIST "%SystemDrive%\Temp" MD "%SystemDrive%\Temp" SET "UserListFile=%SystemDrive%\Temp\userlist.txt"  REM @@@@ DELeting already existing listfile @@@@ IF NOT EXIST %UserListFile% GOTO STARTOFSCRIPT DEL %UserListFile%  :STARTOFSCRIPT  REM @@@@ writing userlist into file @@@@ DIR %SystemDrive%\Users\ /A:D /B /R > %UserListFile%  REM @@@@ start of main FOR loop @@@@ FOR /F "tokens=*" %%A IN (%UserListFile%) DO ( REM ECHO %%A CALL :BROWSERCLEAR "%%A" )  GOTO ENDOFSCRIPT  :BROWSERCLEAR SET UsrDir=%1 SET UsrDir=%UsrDir:"=% %SystemDrive%  REM @@@@ Chrome cleaning part @@@@ IF NOT EXIST "%SystemDrive%\Users\%UsrDir%\AppData\Local\Google\Chrome\User Data\Default\" GOTO NOCHROMEDEFAULT ECHO Cleaning Chrome in %UsrDir% ... CD "%SystemDrive%\Users\%UsrDir%\AppData\Local\Google\Chrome\User Data\Default\" DEL /Q /S /F "Application Cache" >NUL 2>&1 DEL /Q /S /F "Cache" >NUL 2>&1 DEL /Q /S /F "Media Cache" >NUL 2>&1 :NOCHROMEDEFAULT :NOCHROMEDEFAULT2 IF NOT EXIST "%SystemDrive%\Users\%UsrDir%\AppData\Local\Google\Chrome\User Data\Guest Profile\" GOTO NOCHROMEGUEST CD "%SystemDrive%\Users\%UsrDir%\AppData\Local\Google\Chrome\User Data\Guest Profile\" DEL /Q /S /F "Application Cache" >NUL 2>&1 DEL /Q /S /F "Cache" >NUL 2>&1 DEL /Q /S /F "Media Cache" >NUL 2>&1 :NOCHROMEGUEST :NOCHROMEGUEST2 FOR /L %%G IN (0,1,10) DO ( IF NOT EXIST "%SystemDrive%\Users\%UsrDir%\AppData\Local\Google\Chrome\User Data\Profile %%G\" GOTO NOPROFNUM CD "%SystemDrive%\Users\%UsrDir%\AppData\Local\Google\Chrome\User Data\Profile %%G\" DEL /Q /S /F "Application Cache" >NUL 2>&1 DEL /Q /S /F "Cache" >NUL 2>&1 DEL /Q /S /F "Media Cache" >NUL 2>&1 :NOPROFNUM :NOPROFNUM2 )  REM @@@@ Mozilla cleaning part @@@@ IF NOT EXIST "%SystemDrive%\Users\%UsrDir%\AppData\Local\Mozilla\Firefox\Profiles\" GOTO NOMOZILLA ECHO Cleaning Mozilla in %UsrDir% ... SET DataDir=%SystemDrive%\Users\%UsrDir%\AppData\Local\Mozilla\Firefox\Profiles\ DEL /Q /S /F "%DataDir%" >NUL 2>&1 RD /S /Q "%DataDir%" >NUL 2>&1 for /d %%X in (%SystemDrive%\Users\%UsrDir%\AppData\Roaming\Mozilla\Firefox\Profiles\*) do DEL /Q /S /F %%X\*sqlite >NUL 2>&1 :NOMOZILLA :NOMOZILLA2  REM @@@@ Internet Explorer cleaning part @@@@ IF NOT EXIST "%SystemDrive%\Users\%UsrDir%\AppData\Local\Microsoft\Intern~1\" GOTO NOEXPLR ECHO Cleaning IE in %UsrDir% ... SET DataDir=%SystemDrive%\Users\%UsrDir%\AppData\Local\Microsoft\Intern~1\ DEL /Q /S /F "%DataDir%" >NUL 2>&1 RD /S /Q "%DataDir%" >NUL 2>&1 SET History=%SystemDrive%\Users\%UsrDir%\AppData\Local\Microsoft\Windows\History\ DEL /Q /S /F "%History%" >NUL 2>&1 RD /S /Q "%History%" >NUL 2>&1 SET IETemp=%SystemDrive%\Users\%UsrDir%\AppData\Local\Microsoft\Windows\Tempor~1\ DEL /Q /S /F "%IETemp%" >NUL 2>&1 RD /S /Q "%IETemp%" >NUL 2>&1 SET Cookies=%SystemDrive%\Users\%UsrDir%\AppData\Roaming\Microsoft\Windows\Cookies\ DEL /Q /S /F "%Cookies%" >NUL 2>&1 RD /S /Q "%Cookies%" >NUL 2>&1 :NOEXPLR :NOEXPLR2  REM @@@@ Opera cleaning part @@@@ IF NOT EXIST "%SystemDrive%\Users\%UsrDir%\AppData\Local\Opera\Opera\" GOTO NOOPERA ECHO Cleaning Opera in %UsrDir% ... SET DataDir=%SystemDrive%\Users\%UsrDir%\AppData\Local\Opera\Opera\ SET DataDir2=%SystemDrive%\Users\%UsrDir%\AppData\Roaming\Opera\Opera\ DEL /Q /S /F "%DataDir%" >NUL 2>&1 RD /S /Q "%DataDir%" >NUL 2>&1 DEL /Q /S /F "%DataDir2%" >NUL 2>&1 RD /S /Q "%DataDir2%" >NUL 2>&1 :NOOPERA :NOOPERA2  REM @@@@ Safari cleaning part @@@@ IF NOT EXIST "%SystemDrive%\Users\%UsrDir%\AppData\Local\Applec~1\Safari\" GOTO NOSAFARI ECHO Cleaning Safari in %UsrDir% ... SET DataDir=%SystemDrive%\Users\%UsrDir%\AppData\Local\Applec~1\Safari\ SET DataDir2=%SystemDrive%\Users\%UsrDir%\AppData\Roaming\Applec~1\Safari\ DEL /Q /S /F "%DataDir%\History" >NUL 2>&1 RD /S /Q "%DataDir%\History" >NUL 2>&1 DEL /Q /S /F "%DataDir%\Cache.db" >NUL 2>&1 DEL /Q /S /F "%DataDir%\WebpageIcons.db" >NUL 2>&1 DEL /Q /S /F "%DataDir2%" >NUL 2>&1 RD /S /Q "%DataDir2%" >NUL 2>&1 :NOSAFARI :NOSAFARI2  :ENDOFSCRIPT DEL /Q /S /F "%UserListFile%" >NUL 2>&1 
FYI ... Anstelle von SET UsrDir =% 1 und SET UsrDir =% UsrDir: "=%", um das doppelte Anführungszeichen zu analysieren, können Sie SETUSrDir =% ~ 1 NUR verwenden, um die Tilde hinzuzufügen der erste Argumentwert dafür ... Außerdem benötigt der `DIR`-Befehl zum Erstellen der Benutzerliste wahrscheinlich nicht den Schalter` / R`, und die Routine `: ENDOFSCRIPT` benötigt wahrscheinlich nicht den Schalter` / S` zum Löschen diese Datei .... Dies sind nur schnelle Dinge, die mir aufgefallen sind. Pimp Juice IT vor 7 Jahren 0
Hey @Homey_D_Clown_IT! Danke für deine Gedanken! Ich freue mich über jede Hilfe und Hinweise und Tipps! ;) Robert Burik vor 7 Jahren 0