2014-08-31 136 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它,只是因为那时你总是可以回到你所在的位置,而不必知道它在哪里。