获取上次创建的目录批处理命令

enf*_*fix 20 batch-file

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

谢谢

mar*_*pet 51

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

(%i对于Windows 10)

  • /b 适用于裸格式
  • /ad-h 只有目录,但不是隐藏的目录
  • t:c表示使用创建日期进行排序(t:w用于上次写入日期)
  • /od 先排序最早
  • for /F执行该命令,并设置为目录名,最后一个是最新的一个.

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

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

指定目录路径的示例:

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

要防止遍历所有子文件夹,您可以更改排序顺序以获得最新的first(/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%
Run Code Online (Sandbox Code Playgroud)

  • +1要在`dir`之后和`/ b`之前澄清,你需要进入根目录.如果它是批处理的一部分,您也不需要echo.你可以简单地使用`%a%`变量,因为它设置的最后一个值是最新的目录. (4认同)

小智 5

对带空格的目录名称进行了一些改进

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

现在你得到了 a=Application Data 而不是 a=Application
注意:注意“tokens”前面的空格