我使用批处理文件命令删除系统中的临时文件。该命令工作正常。
此代码正常运行,但存在缺陷:
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
下的一半文件。
我想在删除任何内容之前更改DIR后添加IF
命令。
另外,请告诉我如何以更好的方式执行记录活动。
答案 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
,只是因为这样你就可以随时回到原来的位置,而不必知道它在哪里。