为什么我的清理脚本不会删除指定的文件?

为什么我的清理脚本不会删除指定的文件?

我正在编写一个批处理脚本,该脚本会自动从 Windows 中删除垃圾文件。除了正在使用的文件外,该脚本不会删除某些位置的文件,例如%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

您的批处理文件的语法不正确。请考虑以下几行:

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是非标准目录。

相关内容