尝试获取文件夹中的最后一个 created/modified 子文件夹

Trying to get the last created/modified subfolder in folder

环境:
Windows 2016 服务器标准版
Windows 命令提示符和批处理文件

我正在尝试按 DateCreated 或 DateModified 对子文件夹进行排序并获取最新的文件夹名称。

for %%i in ('DIR /AD /OD /B') do echo %%i

我原以为这会给我集合中最后一个文件夹的名称。我测试了 DIR 命令并验证了最后一个子文件夹确实是我正在寻找的。相反,我得到以下结果:

C:\ProgramData\UPS\install\wpf>
'DIR
/AD
/OD
/B'

编辑

@aschipfl 所述,delims= 也可以,usebackq 对于这种情况有点矫枉过正。并且最好使用 echo %%i & goto :EOF 而不是 (echo %%i & goto :EOF) 以避免不必要的尾随 space。因此,结合评论中提到的补充,可以使用以下内容:

for /F "delims=" %%i in ('DIR /AD /OD /B') do echo %%i & goto :EOF

为了完整起见,这里是 delims=

的文档

delims=xxx - specifies a delimiter set. This replaces the default delimiter set of space and tab.


初始答案

您正在寻找的附加选项(使用 /F 标志)是“usebackq”

usebackq - specifies that the new semantics are in force, where a back quoted string is executed as a command and a single quoted string is a literal string command and allows the use of double quotes to quote file names in file-set.

所以更新后的命令是

for /F "usebackq" %%i in (`DIR /AD /OD /B`) do echo %%i

请注意,单引号已替换为“反引号”(尽管我一直称它们为“重音符号”或“反引号”)。这使得for执行命令in-between他们。

这给出了最后写入日期和目录的完全限定路径。它在 windows cmd batch-file 运行 中工作。这需要 5 年前发布的最新 Windows PowerShell 5.1。它还 运行 在 PowerShell Core https://github.com/PowerShell/PowerShell

powershell -NoLogo -NoProfile -Command ^
    "Get-ChildItem -Directory -Recurse | Sort-Object -Property LastWriteTime | Select-Object -Property LastWriteTime,FullName"

如果您可以使用 PowerShell 控制台,那就更简单了。

Get-ChildItem -Directory -Recurse | Sort-Object -Property LastWriteTime | Select-Object -Property LastWriteTime,FullName

并且仍然可以使用别名来缩短打字时间。不应将别名写入脚本文件。

gci -dir -re | sort LastWriteTime | select LastWriteTime,FullName