我正在尝试开发一个批处理文件,以自动删除驱动器D中的空文件夹,如下面的代码:
for /d %%d in (*.*) do (
rmdir %%d
)
但是,在Windows的作业调度程序运行批处理文件时,我发现代码试图将空文件夹删除到另一个驱动器中。那么如何在编码(*.*)
到特定驱动器D:?
答案 0 :(得分:0)
这是因为您的脚本在通过计划任务运行时未在驱动器D:
中执行,但(默认情况下)在执行任务的用户的根文件夹中执行。
在批处理文件的开头添加D:
:
D:
for /d %%d in (*.*) do (
rmdir %%d
)
答案 1 :(得分:0)
for /d %%d in (D:*) do (
注意*
而不是.
如果您愿意,可以使用d:\directoryname\*
启动指定的目录名,或
for /d /r "D:\" %%d in (*) do echo %%d
继续浏览目录树(注意:ECHO
是为了安全起见)
使用" %% d"是个好主意。对于RMDIR
,因为否则directory name containing spaces
将被执行为'删除目录"目录" "名称" "含有"和"空格"`'
答案 2 :(得分:0)
@echo off
setlocal enableextensions disabledelayedexpansion
for /f "delims=" %%a in ('dir d:\ /s /b /ad ^| sort /r') do 2>nul rmdir "%%~fa"
这使用dir
命令检索驱动器d:
根目录下的所有文件夹的列表。此列表按相反顺序排序,因此子文件夹显示在其父项之前。这样,如果移除一个孩子会留下一个空的父母,那么它也将被删除。
使用for /f
命令处理此反向排序列表,该命令尝试删除所有文件夹。默认情况下,rmdir
不允许删除非空文件夹,只删除空文件夹。