获取最近创建的目录批处理命令

27

如何获取目录中最新的子文件夹?
我需要在MKLINK /D命令中使用它。

谢谢。


https://dev59.com/4HPYa4cB1Zd3GeqPkpf1#20149008 - Farah
2个回答

64
FOR /F "delims=" %%i IN ('dir /b /ad-h /t:c /od') DO SET a=%%i
echo Most recent subfolder: %a%

(%i 适用于 Windows 10)

  • /b 表示裸格式
  • /ad-h 只列出目录,但不包括隐藏的目录
  • t:c 表示按创建日期排序(使用 t:w 表示按最后修改日期排序)
  • /od 表示按最老的文件优先排序
  • for /F 命令执行后将目录名赋值给变量 a,最后一个是最新的。

如果您在命令行中直接执行此命令(而不是在批处理文件中),请使用 % 而不是 %%

这适用于 当前目录 - 正如 @iesou 指出的那样,如果您需要使用其他目录路径,则需要在 dir 后添加目录路径。

指定目录路径的示例:

FOR /F "delims=" %%i IN ('dir "c:\Program Files" /b /ad-h /t:c /od') DO SET a=%%i

为了避免遍历所有子文件夹,您可以更改排序顺序以使最近的文件排在前面(/o-d),并在第一次调用后退出for循环。
@echo off
FOR /F "delims=" %%i IN ('dir /b /ad-h /t:c /o-d') DO (
    SET a=%%i
    GOTO :found
)
echo No subfolder found
goto :eof
:found
echo Most recent subfolder: %a%

4
在输入 dir/b 之后,你需要输入根目录。如果是批处理文件的一部分,则不需要使用 echo 命令。你可以直接使用 %a% 变量,因为它最后一次被设置的值是最新的目录。 - iesou
1
@iesou 没错 - 如果你没有指定目录,就会使用当前目录。我把它加入到答案中,并提供了一个略微修改过的版本。 - marapet
@marapet 我使用了上面的脚本,但是如果文件夹名字中有空格,它就无法工作,我错过了什么吗? - Arthor
1
@Arthor 你说得对,for 命令使用默认选项。你可以将 FOR /F %%i 改为 FOR /F "delims=" %%i 以防止分割目录名称。 - marapet

6

对于有空格的目录名称,有一些改进

FOR /F " tokens=*" %%i IN ('dir /b /ad-h /od') DO (SET a=%%i)  

现在你得到的是a=应用程序数据,而不是a=应用程序。
注意:请注意“tokens”前面的空格。

另一个忽略某些匹配的改进:如果不是“%%i”==“..”,如果不是“%%i”==“.”,则执行SET。 - Thomas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接