Por que meu script de limpeza não exclui os arquivos especificados?

1

Estou fazendo um script em lote que excluirá automaticamente os arquivos indesejados das janelas. Com exceção dos arquivos que estarão em uso, o script não excluirá arquivos em alguns locais, como %WinDir%\Logs . Aqui está o script que eu tenho até agora:

@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

Se eu entendi corretamente, preciso usar takeown nos arquivos e pastas do sistema antes que meu script possa remover o conteúdo deles. Eu também estou executando o script com privilégios elevados. O que eu sinto falta aqui?

    
por Mr. Mendelli 17.02.2018 / 22:35

1 resposta

2

A sintaxe do seu arquivo de lote está incorreta. Considere as seguintes linhas:

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

Em ambas as linhas, você está perdendo a aspa dupla antes de %WinDir% . A sintaxe correta é:

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

Como, por padrão, o grupo Administradores tem acesso total à pasta Logs, não é necessário apropriar-se dele antes de tentar excluir os arquivos que ele contém.

Como nota lateral, o diretório %WinDir%\Log é um diretório não padrão.

    
por 17.02.2018 / 23:34