1

Я делаю пакетный скрипт, который будет автоматически удалять ненужные файлы из окон. За исключением файлов, которые будут использоваться, скрипт не удалит файлы в некоторых местах, таких как %WinDir%\Logs . Вот сценарий, который я имею до сих пор:

@ECHO OFF
Color 1F
TITLE Windows Cleaner
ECHO.
:choice
set /P c=Do you want to run Windows Cleaner? Enter Y to run or C to cancel.
if /I "%c%" EQU "Y" goto :choice_yes
if /I "%c%" EQU "C" goto :choice_cancel
goto :choice
:choice_yes
for %%a in ("%TEMP%") do rd /s /q "%%~a"
for %%a in ("%AppData%\Microsoft\Windows\Cookies") do rd /s /q "%%~a"
for %%a in ("%LocalAppData%\CrashDumps") do rd /s /q "%%~a"
for %%a in ("%LocalAppData%\Microsoft\Feeds Cache") do rd /s /q "%%~a"
for %%a in ("%LocalAppData%\Microsoft\Internet Explorer\DOMStore") do rd /s /q "%%~a"
for %%a in ("%LocalAppData%\Microsoft\Windows\Caches") do rd /s /q "%%~a"
for %%a in ("%LocalAppData%\Microsoft\Windows\Explorer") do rd /s /q "%%~a"
for %%a in ("%LocalAppData%\Microsoft\Windows\History") do rd /s /q "%%~a"
for %%a in ("%LocalAppData%\Microsoft\Windows\INetCache\IE") do rd /s /q "%%~a"
for %%a in ("%LocalAppData%\Microsoft\Windows\INetCache\Low\IE") do rd /s /q "%%~a"
for %%a in ("%LocalAppData%\Microsoft\Windows\INetCache\Virtualized") do rd /s /q "%%~a"
for %%a in ("%LocalAppData%\Microsoft\Windows\INetCookies") do rd /s /q "%%~a"
takeown /F "%WinDir%\Log"* /R /A
icacls "%WinDir%\Log"*.* /T /grant administrators:Fy
for %%a in (%WinDir%\Log") do rd /s /q "%%~a"
takeown /F "%WinDir%\Logs"* /R /A
icacls "%WinDir%\Logs"*.* /T /grant administrators:Fy
for %%a in (%WinDir%\Logs") do rd /s /q "%%~a"
takeown /F "%WinDir%\Temp"* /R /A
icacls "%WinDir%\Temp"*.* /T /grant administrators:Fy
for %%a in ("%WinDir%\Temp") do rd /s /q "%%~a"
:choice_cancel
echo Cleaning has been cancelled.
pause
exit
@ECHO OFF

Если я правильно понимаю, мне нужно использовать takeown для системных файлов и папок, прежде чем мой скрипт сможет удалить их содержимое. Я также запускаю скрипт с повышенными привилегиями. Что мне здесь не хватает?

1 ответ1

2

Синтаксис вашего командного файла неверен. Рассмотрим следующие строки:

for %%a in (%WinDir%\Log") do rd /s /q "%%~a"
...
for %%a in (%WinDir%\Logs") do rd /s /q "%%~a"

В обеих этих строках вы пропускаете двойную кавычку перед %WinDir% . Правильный синтаксис:

for %%a in ("%WinDir%\Log") do rd /s /q "%%~a"
...
for %%a in ("%WinDir%\Logs") do rd /s /q "%%~a"

Поскольку по умолчанию группа «Администраторы» имеет полный доступ к папке «Журналы», нет необходимости вступать во владение ею, прежде чем пытаться удалить содержащиеся в ней файлы.

Как примечание, каталог %WinDir%\Log является нестандартным каталогом.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .