首页 > 解决方案 > Windows批处理文件:查找名称中带有空格的最新文件

问题描述

这有效,除非有空间

for /f %%i in ('dir /b/a-d/od/t:c') do set LAST=%%i

如果有空间有办法吗?

标签: windowsbatch-file

解决方案


您需要处理分隔符,因为默认分隔符是 the                                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使用每个文件的名称定义变量name,直到所有文件都被迭代,set每个文件都被迭代并覆盖前一个。如果您在(在这种情况下为当前)目录中有大量文件,您也可以反转您的排序方法(而不是/O:Duse /O:-D,定义第一个值,然后跳出循环:

For /F "EOL=| Delims=" %%I In ('Dir /B /A:-D /O:-D /T:C') Do (
    Set "LAST=%%I"
    GoTo Done
)
:Done

推荐阅读