Синтаксическая ошибка в цикле FOR в пакетном скрипте очистки браузера

244
Robert Burik

Я пытаюсь создать пакетный скрипт очистки кэша браузера, который может запускаться администратором на сервере для очистки кэша браузера всех пользователей по требованию или по расписанию.

Однако я довольно застрял в основной цикл. Выдает ошибку «Синтаксис команды неверен».

Я искал ответы по всему, и я обнаружил, что проблема, скорее всего, с переменными, но я не мог заставить его работать.

Вот код, который я вернул туда, где впервые получил ошибку, так что, возможно, вы можете помочь мне исправить это.

Спасибо за вашу большую помощь!

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
Как насчет того, чтобы сказать нам, где ошибки в вашей стене кода? DavidPostill 7 лет назад 0
Вам также следует прочитать [Отладка ваших пакетных файлов] (http://www.robvanderwoude.com/battech_debugging.php). Удаление `echo off` и просмотр выходных данных, вероятно, определят вашу первую ошибку. DavidPostill 7 лет назад 0
Не используйте `goto` и`: label` внутри выражений в скобках (например, для циклов for или блоков if). Посмотрите [пакетный файл Windows с командой goto не работающей] (https://stackoverflow.com/a/4006006) для хорошего объяснения, почему бы не сделать это. DavidPostill 7 лет назад 0
Спасибо @DavidPostill! Маркировка была проблемой. Я должен был использовать легальную вторичную маркировку с подкладкой. Robert Burik 7 лет назад 0

1 ответ на вопрос

1
Robert Burik

Спасибо за все, это пришло к рабочему решению. Не стесняйтесь использовать этот скрипт для очистки кэша браузера для всех пользователей:

@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 
К вашему сведению ... Вместо использования `SET UsrDir =% 1` и` SET UsrDir =% UsrDir: "=%` для анализа двойной кавычки, вы можете просто использовать `SET UsrDir =% ~ 1` ТОЛЬКО для добавления тильды для значение первого аргумента для этого ... Кроме того, команде `DIR` для создания списка пользователей, скорее всего, не нужен ключ` / R`, а подпрограмме `: ENDOFSCRIPT`, скорее всего, не нужен ключ` / S` для удаления. этот файл ... Это просто быстрые вещи, которые я заметил, я хотел сказать вам только как к сведению. Pimp Juice IT 7 лет назад 0
Hey @Homey_D_Clown_IT! Thank you for your thoughts! I appreciate all help and hints and tips! ;) Robert Burik 7 лет назад 0