检查文件夹是否存在并删除临时文件

时间:2014-08-31 07:30:29

标签: batch-file scripting

我使用批处理文件命令删除系统中的临时文件。该命令工作正常。

此代码正常运行,但存在缺陷:

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. 另外,请告诉我如何以更好的方式执行记录活动。

4 个答案:

答案 0 :(得分:1)

如果在命令行中指定完整路径,则在初级级别,则无法从其他任何位置删除文件。

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

在发出命令之前,也无需更改目录。

?会禁止提示,询问您是否确定要删除所有文件。

答案 1 :(得分: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命令

答案 2 :(得分:0)

在你的批处理之前,你试试

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

答案 3 :(得分: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,只是因为这样你就可以随时回到原来的位置,而不必知道它在哪里。