2014-08-31 158 views
0

我使用批處理文件命令刪除系統中的臨時文件。該命令正常工作。檢查文件夾的存在並刪除臨時文件

此代碼,工作正常,但有一個缺陷:

FOR /D %%p IN ("C:\Temp\*.*") DO rmdir "%%p" /s /q 

cd c:\temp 
del /F /s /q *.* >c:\DelTempLog.txt 
rd /s /q %systemdrive%\$Recycle.bin >c:\DelTempLog.txt 

FOR /D %%p IN ("C:\Windows\Installer\$PatchCache$\*.*") DO rmdir "%%p" /s /q 

cd C:\Windows\Installer\$PatchCache$ 
del /F /s /q *.* >c:\DelTempLog.txt 

FOR /D %%p IN ("C:\Windows\Temp*.*") DO rmdir "%%p" /s /q 

cd C:\Windows\Temp 
del /F /s /q *.* >c:\DelTempLog.txt 
del /q /s %tmp% >c:\DelTempLog.txt 

今天我面臨着一個例外其中c:\temp文件夾不存在於服務器上。

它刪除了c:\windows\system32下的一半文件。

  1. 我想在刪除任何內容之前更改DIR之後添加IF命令。

  2. 另外,請告訴我該怎麼辦日誌記錄活動更好的方式。

回答

0
@echo off 
    setlocal enableextensions disabledelayedexpansion 

    set "logFile=c:\deltemplog.txt" 

    (for %%a in (
     "c:\temp" "c:\windows\temp" "%temp%" 
     "%systemdrive%\$Recycle.bin" "C:\Windows\Installer\$PatchCache$" 
    ) do if not exist "%%~a\" (
     echo [ ERROR ]: "%%~a" does not exist 
    ) else pushd "%%~a" && (
      echo [ pushd ]: changed to "%%~a" 
      echo rmdir . /s /q 
      popd 
     ) || (
      echo [ ERROR ]: Failed to change to "%%~a" 
     ) 
    ) > "%logFile%" 

對於列表中的每個文件夾,改變它,如果該命令沒有失敗,刪除當前文件夾(這將刪除的內容,而不是文件夾,因爲它是目前的一個) 。

只能回顯rmdir命令。如果輸出(日誌文件)是正確的,去掉echo命令前綴rmdir

0

怎麼樣,你的批次爲-IT-看臺,試圖

md c:\temp 2>nul 
if not exist c:\temp\. echo No c:\temp!&goto :eof 
1

在初級水平,如果前你在命令行上指定完整路徑,那麼它不能從其他地方刪除文件。

del /F /s /q "c:\temp\*.*?" 

在發出命令之前,也不需要更改目錄。

?禁止詢問您是否確定要刪除所有文件。

0

我的選擇是使用%CD%內置的值,然後嘗試移動到文件夾,看看它是否正常工作,如:

set CURDIR=%CD% 
pushd C:\Temp 
if '%CD%'=='%CURDIR%' (
    echo Failed to move to C:\Temp 
) else ( 
    [code to do your deletions] 
) 
popd 

我喜歡推和彈出一個目錄,而不是一個硬CD它,只是因爲那時你總是可以回到你所在的位置,而不必知道它在哪裏。

相關問題