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

Batch file 检查文件夹是否存在并删除临时文件,batch-file,scripting,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\$PatchC

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

此代码正常工作,但存在一个缺陷:

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
下的一半文件

  • 我想在删除任何内容之前更改目录后添加一个
    IF
    命令

  • 另外,请告诉我如何更好地进行日志记录活动

  • 对于列表中的每个文件夹,更改为该文件夹,如果命令没有失败,则删除当前文件夹(这将删除内容,而不是文件夹,因为它是当前文件夹)


    rmdir命令只会回显。如果输出(在日志文件中)是正确的,请删除前缀为
    rmdir

    echo
    命令,然后在当前的批处理之前,尝试

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

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

    del /F /s /q "c:\temp\*.*?"
    
    在发出命令之前,也不需要更改目录


    会抑制一个提示,询问您是否确实要删除所有文件。

    我的首选方法是使用
    %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
    ,因为这样你就可以随时回到你所在的位置,而不必知道它在哪里

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