除了在有空间的情况下,这个方法可以用
for /f %%i in ('dir /b/a-d/od/t:c') do set LAST=%%i
如果有空间,有什么办法吗?
你需要处理定界符,因为默认的定界符是...。 和 TAB. 因此,我的建议是,要么全部使用代币。*
或最好没有分隔符。还应注意的是,行的默认开头。EOL
,是分号。;
因此,一个强大的命令可以防止以该字符开头的名字也从结果中被省略。
使用所有标记,并将行首设置为一个不能作为文件或目录名中第一个字符的字符。
For /F "EOL=? Tokens=*" %%I In ('Dir /B /A:-D /O:D /T:C') Do Set "LAST=%%I"
这个方法有一个非常小但可能的问题,那就是文件名可能以一个或多个空格字符开始,由于这些是默认的定界符,它们会在返回的结果中被消耗和删除。
使用无定界符,并将行首设置为一个不能作为文件或目录名中第一个字符的字符。
For /F "EOL=| Delims=" %%I In ('Dir /B /A:-D /O:D /T:C') Do Set "LAST=%%I"
上面的代码示例将定义一个名为 LAST
,加上每个文件的名称,直到所有的文件都迭代完毕。set
并覆盖之前的. 如果你在,(本例中为当前),目录中有非常多的文件,你可以选择反向排序的方法。(而不是 /O:D
使用 /O:-D
),定义第一个值,然后脱离循环。
For /F "EOL=| Delims=" %%I In ('Dir /B /A:-D /O:-D /T:C') Do (
Set "LAST=%%I"
GoTo Done
)
:Done