Cache

腳本(搜尋和刪除臨時文件/文件夾)失敗

  • September 29, 2011

我使用此腳本為所有使用者清理歷史記錄、cookie 和記憶體(臨時 Internet 文件),它還應該清理臨時目錄,但似乎有問題。

我認為有兩件事混淆了,%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),並在 %userprofile% 中找到所有“臨時目錄”。

**IE。**例如,這適用於 %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”) .

這似乎是一種解決方法:

代替

ECHO.&echo.%~1\%$$temp%
  pushD "%~1\%$$temp%" &&(
  rmdir /S /Q .
  popD)2>C:\test1_Temp.tx

採用

IF "%$$temp%"=="%$$temp:*:=%" (SET "tmppath=%~1\%$$temp%") ELSE SET "tmppath=%$$temp%"
ECHO.&echo.%tmppath%
  pushD "%tmppath%" &&(
  rmdir /S /Q .
  popD)2>C:\test1_Temp.txt

致謝:Andriy M

引用自:https://serverfault.com/questions/309415