尝试获取文件夹中的最后一个 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
环境:
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