【问题标题】:Get last created directory batch command获取最后创建的目录批处理命令
【发布时间】:2012-05-18 03:54:52
【问题描述】:

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

谢谢

【问题讨论】:

标签: batch-file


【解决方案1】:
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%

【讨论】:

  • +1 要在dir 之后和/b 之前进行澄清,您需要进入根目录。如果它是批处理的一部分,您也不需要回声。您可以简单地使用 %a% 变量,因为它设置的最后一个值是最新的目录。
  • @iesou 没错——如果不指定目录,则使用当前目录。将其添加到答案中,并提供了略微修改的版本。
  • @marapet 我已经使用了上面的脚本,但是如果文件夹中有空格,它就不起作用,我错过了什么吗?
  • @Arthor 你是对的,for 命令使用默认选项。您可以将FOR /F %%i 更改为FOR /F "delims=" %%i 以防止拆分目录名称。
【解决方案2】:

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

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

现在您将获得 a=Application Data 而不是 a=Application
注意:注意“tokens”前面的空格

【讨论】:

  • 另一个忽略某些匹配的改进:如果不是 "%%i"==".." 如果不是 "%%i"=="."。设置
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-12-06
  • 2013-07-27
  • 2015-11-24
  • 2016-12-30
  • 2015-11-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多