Я использую этот сценарий для очистки истории, файлов cookie и кеша (временных файлов Интернета) для всех пользователей, И он также должен очистить временный каталог, НО, похоже, что-то не так.
Я думаю, что смешиваются две вещи: переменная %temp%
(= D:\TEMP в моей среде) И временный каталог пользователей в каталоге %userprofile%
.
:: Works on Win XP -and- on Win 7
@echo off
Set "RegKey=HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList"
set "regkey2=HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\shell folders"
call:getspecialfolders "Cache, History, Cookies"
For /f "tokens=*" %%? in (
'Reg.exe QUERY "%RegKey%" ^|findstr /ric:"\S-1-5-21-[0-9]*-[0-9]*-[0-9]*-[0-9]*$"'
) do (
For /f "tokens=2,*" %%A in (
'Reg.exe QUERY "%%?" /v ProfileImagePath ^|find /i "ProfileImagePath"'
) do call:Go %%B
)
start ""/w "%windir%\system32\RunDll32.exe" InetCpl.cpl,ClearMyTracksByProcess 255
:end ***
goto:EOF
:Go
call Set "Target=%*"
If EXIST "%Target%" call:Clear "%Target%"
exit /b 0
:Clear
REM echo.&echo.%~1\%$$Cache%
pushD "%~1\%$$Cache%" &&(
rmdir /S /Q .
popD)2>C:\test1_TEMP_IE.txt
REM echo.&echo.%~1\%$$History%\History.IE5
REM pushD "%~1\%$$History%\History.IE5" &&(
REM rmdir /S /Q .
REM popD)2>C:\test1_History_IE.txt
REM echo.&echo.%~1\%$$History%
pushD "%~1\%$$History%" &&(
rmdir /S /Q .
popD)2>C:\test1_History.txt
REM echo.&echo.%~1\%$$Cookies%
pushD "%~1\%$$Cookies%" &&(
rmdir /S /Q .
popD)2>C:\test1_Cookies.txt
ECHO.&echo.%~1\%$$temp%
pushD "%~1\%$$temp%" &&(
rmdir /S /Q .
popD)2>C:\test1_Temp.txt
exit /b 0
:getspecialfolders
Set "FoldersToClear=%~1"
For %%* in (%FoldersToClear%) Do (
For /f "tokens=2,*" %%A in (
'reg.exe query "%regkey2%" /v %%* ^|find /i "%%~*"'
) do Call:sf1 "%%~B" "%%~*"
)
Call:sf2 "%temp%" "temp" "%userprofile%"
exit /b 0
:sf1
Call set "sf=%~1"
Call set "$$%~2=%%sf:%userprofile%\=%%"
exit /b 0
:sf2
Call set "sf=%~1"
call Set "usr=%~dpns3"
Call set "$$%~2=%%sf:%usr%\=%%"
exit /b 0
НО почему-то я не могу заставить последнюю «временную часть» работать, поэтому она очищает% temp% (D: \ Temp в моей среде), а также находит все «temp dir's» в% userprofile%.
т.е. это, например, работает для %temp%:
PushD "%Temp%" && (
ATTRIB -S -H -R -A /D /S & (
For /f "Tokens=*" %%* in ('dir "%Temp%" /B') Do (
RD "%Temp%\%%*" /S /Q || Del /F /S /Q "%Temp%\%%*"))&PopD)2>c:\test0b_TEMP.txt
и это, т.е. работает для "временных пользователей":
::Set Search directory to "Documents and Settings" folder
(Set Target=%AllUsersProfile:~0,-10%)
title,Finding the Temp subfolders in %Target%&COLOR 9E
If EXIST "%Target%",(
For /f "Tokens=*" %%* in ('dir "%Target%" /B') Do (
cd/D "%target%\%%*\Local Settings\Temp" && (
ATTRIB -S -H -R -A /D /S >nul & (
For /f "Tokens=*" %%* in ('dir /B') Do (
RD "%%*" /S /Q ||Del /F "%%*" )))>nul)
)
Я надеюсь, что кто-нибудь может помочь мне исправить скрипт, я думаю, что он находится в: sf2 и / или в сочетании с частью% temp%, теперь как-то смешиваются две вещи ("users temp" и "environment temp") .
rmdir /S /Q .
, то она возникает не только на пустых каталогах, а каждый раз (на Win 7 по крайней мере).rmdir
пытается удалить текущую директорию (.
) со всем ее содержимым и жалуется, что не может этого сделать (удалить текущую директорию), что вполне справедливо, так как система запрещает удалять активную (текущую) папку. 12.09.2011>NUL
, а стандартный вывод с помощью2>NUL
. 13.09.2011cannot find the path
может быть вызвана некоторыми командами PUSHD, если есть попытка переключиться на несуществующий каталог. Тогда хорошо, что есть&&
, который связываетPUSHD
со следующим блоком и не позволяет ему выполняться, когдаPUSHD
терпит неудачу. 13.09.2011