- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在尝试清除一个公共(public)目录,所以当一个项目超过 30 天时,它应该被删除。我使用以下命令设置了一个批处理文件:
forfiles /p "C:\PATH\USERS\PATH\" /s /m *.* /c "cmd /c Del @path /q" /d -30
这很好用。但是,问题是它只会删除路径中文件夹中的项目。
示例:C:\PATH\USERS\PATH\HelloWorld\file.text
已超过 30 天。但该命令仅删除 file.text
,而不删除文件夹。
我是否必须检查文件夹是否为空,然后使用另一个命令删除文件夹?
最佳答案
您正在使用的命令行非常危险(我只是将其复制到此处并重新排序了开关):
forfiles /S /D -30 /P "C:\PATH\USERS\PATH\" /M "*.*" /C "cmd /C del /Q @path"
因为 forfiles
返回文件和目录。假设有一个名为 container
的目录符合搜索条件(最后一次修改是在 30 天前或更早),则执行的 del
命令行为 del "C:\PATH\USERS\PATH\container"/Q
,它会删除其中的所有 文件,即使是那些不满足搜索条件的文件(注意 del\folder
的行为像 del\folder\*
).
要解决此问题,您需要过滤文件或目录,如下所示:
forfiles /S /D -30 /P "C:\PATH\USERS\PATH" /M "*" /C "cmd /C if @isdir==FALSE del @path"
我还将文件掩码从 *.*
更改为 *
,因为 forfiles
与所有内部命令相反,不匹配文件在给出 *.*
的情况下没有扩展名。此外,我从路径中删除了尾随 \
,否则 forfiles
会引发错误:ERROR: The directory name is invalid.
.
但现在是完全不同的事情——您实际问题的答案:
因为 forfiles/S
将返回一个目录before 它返回它的子项,检查目录是否为空是没有意义的命令行,您需要稍后执行此操作。
为此,您可以像这样使用第二个 forfiles
循环(如果您愿意,还可以检查它们的最后修改日期;否则,删除 /D -30
部分):
forfiles /S /D -30 /P "C:\PATH\USERS\PATH" /M "*" /C "cmd /C if @isdir==TRUE rd @path 2> nul"
或者,如果目录修改日期不相关,您可以使用 for/D
循环,这也更快:
for /D %%I in ("C:\PATH\USERS\PATH\*") do rd "%%~fI" 2> nul
关于windows - 使用 forfiles 删除文件夹及其内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39377372/
我正在尝试使用以下命令在 Windows 8 命令窗口中使用 FORFILES 遍历文件: CD "%RODIR%" FORFILES /P "./DarkestHour" /C "cmd /c ec
forfiles 命令旨在枚举目录并对每个项目应用 (a) 某些命令。使用 /S 可以对完整的目录树完成相同的操作。 当枚举目录(树)的内容被 forfiles 命令主体中的命令更改时会发生什么? 假
我正在运行一个批处理文件,其中有一个 forfiles 命令 FORFILES -p%spinputarchrootpath% -m*.csv -d-365 -c"CMD /C DEL @FILE"
我正在尝试在 dos 中运行此命令 FORFILES with params /P C:\Builds\ /M *.chm /S /C "cmd /c copy @file C:\My Brand\"
因此,我尝试使用名为 ImageResizer 的程序和命令 forfiles 一次重新缩放一堆图像。 但是由于我必须对命令本身及其内部的参数使用引号,所以这是行不通的: ERROR: Argumen
我想写一个批处理,在 c:\ 中找到所有小于 50 mb 的文档,并将它们复制到一个文件夹中,但忽略系统目录文档。我更喜欢它甚至不在系统目录中搜索。 这是我的批处理,它在正确的目录中查找并复制小于 5
我正在尝试清除一个公共(public)目录,所以当一个项目超过 30 天时,它应该被删除。我使用以下命令设置了一个批处理文件: forfiles /p "C:\PATH\USERS\PATH\" /s
我需要使用 forfiles 命令从 Windows 命令提示符生成一个 xml。 到目前为止我还没有,但是变量包含引号而且我不想要它...... 这是我当前的命令: %FF_CMD% /c "cmd
以下命令适用于一种类型的文件, forfiles -p "C:abc\del" -s -m *.exe -d -70 -c "cmd /c echo @path" 是否可以过滤多个文件扩展名? *.e
我想对目录中的一堆文件运行命令,并将命令的输出发送到每个 .ts 文件的单独 .csv 文件。 我要运行的命令是: ffprobe -print_format csv -show_packet >
我正在尝试运行一个基本的 forfiles 命令,但无论我使用什么掩码,它总是简单地打印目录的全部内容。没有过滤 *.bat 没有“是批处理文件”,只是 C:\中所有文件的简单列表我正在研究 winX
我正在使用批处理文件从 cmd.exe 运行以下命令。 forfiles /p C:\Users\subhamt\Downloads /m embeddedsection.zip /c "cmd /c
我有一个脚本,我想在其中为目录中的每个文件调用一个函数。使用 forfiles,我已经能够像这样列出它们: forfiles /p "%myPath%" /c "cmd /c echo @path N
我需要使用 ffmpeg 加入几个 mp4 和 wav 文件对。 当我运行指定文件名的命令时,它运行良好:.\ffmpeg.exe -i file01.mp4 -i file01.wav -c:v c
forfiles命令建立了几个变量,由前导 @ 指示,它将有关当前迭代项的数据返回到循环体。 所有与迭代项的路径和名称相关的变量都返回 "" 中的值。 .这些是:@file , @fname , @e
我正在尝试做类似于 Get Visual Studio to run a T4 Template on every build 的事情使用 cmd 的 forfiles 转换 VS2008 中的每个模
我目前正在将一个 DOS 批处理脚本转换为一个 shell 脚本,虽然我有 99% 的工作,但有一部分我不知道如何转换。 在批处理文件中,我有一行看起来像 forfiles -p "t:\jeopar
我想在 cmd 文件中使用 FORFILES,以对给定日期之后到“今天”的所有文件执行操作。我可以使用 forfiles/d +07/10/2013/c "cmd/c echo @fname" 之类的
我正在尝试运行以下命令: forfiles /p ..\Schemas /m *.xsd /c "cmd /c ""C:\Program Files (x86)\Microsoft SDKs\Wind
我有一个场景: FORFILES /P "C:\users\DominiqueGerry\Work Files\" /S /M *.doc /C "cmd /c echo @fsize" 给我一个错误
我是一名优秀的程序员,十分优秀!