批处理中如何删除隐藏目录中的文件和文件夹

来源:百度知道 编辑:UC知道 时间:2024/06/24 15:31:22
我打算编写一个批处理删除C:\Documents and Settings\Administrator\Local Settings\Temp中的文件和文件夹,批处理内容如下
@ECHO off
echo 正在清理Local Settings\Temp目录下的所有文件,请稍等......
cd %UserProfile%\Local Settings\Temp
dir /ad/b * >%SystemRoot%\Temp\temp1.txt
for /f "delims=" %%a in (%SystemRoot%\Temp\temp1.txt) do (rd /s/q %%a)
cd %UserProfile%\Local Settings\Temp
del /f /s /q *.*
pause
这个批处理在编写批处理的位置(比如桌面)可以正常删除temp目录中的文件和文件夹,但是我把它移动到另外一个位置后(比如d:\text\),del /f /s /q *.*这句执行的结果就会删除text目录中的文件和temp中的文件夹,无法实现删除temp目录中的文件。如果我直接使用del /f /s /q %UserProfile%\Local Settings\Temp\*.*系统就会提示无效的目录。但是cd %UserProfile%\Local Settings\Temp这句执行的结果是可以跳转到temp目录下的。(注明:Local Settings是个系统隐藏的目录)
这里请哪位大虾解释一下为什么会出现这种情况,如何解决这个问题。

cd %UserProfile%\Local Settings\Temp
这句有问题,要加上一个/d参数:
cd /d %UserProfile%\Local Settings\Temp
否则只能在当前驱动器切换命令行位置,而不能跨驱动器切换,如果你批处理放在D盘,命令行位置就不能切换到C盘或其它盘符,所以你那下面的删除文件命令实际是删除批处理所在位置的文件,加上/d参数就行了,具体用法cmd下输入cd/?查看..

del /f /s /q %UserProfile%\Local Settings\Temp\*.*
这句由于路径中含有空格,必须用引号括起来:(一个*就够了,不用*.*)
del /f /s /q "%UserProfile%\Local Settings\Temp\*"

do (rd /s/q %%a)
这个也要用引号括起来,如果文件夹名含有空格也会出错:(后面的双括号可以省略)
do rd /s/q "%%a"

批处理可以这么写一样的效果:
@echo off
cd /d %UserProfile%\Local Settings\Temp
for /f "delims=" %%a in ('dir/ad/b') do rd /s /q "%%a"
del /f /s /q *
pause

del /f /s /q "%UserProfile%\Local Settings\Temp\*.*"

加引号试试。