批处理文件结果排序

3

我有一个批处理文件,其中包含以下内容:

for /D %%A IN (*) DO echo %%A>> output.txt

我希望结果按字母顺序排列,但实际上它似乎是按日期排序的。有人能建议如何实现吗?

有趣。在我的系统中,FOR /D(以及简单的FOR)似乎按字母顺序返回项目。当我需要不同的排序时,我必须使用类似于@rene答案中的内容。如果可以自定义FOR/FOR /D返回的项目排序,那么知道如何实现将是很好的事情。 - Andriy M
1
@AndriyM FOR 返回文件系统中的项目顺序。对于FAT文件系统,该顺序未指定,但大致上是按照创建顺序排列的。对于NTFS文件系统,这是根据格式化驱动器的计算机的排序规则来确定的。 - Neil
@Neil:谢谢。我理解你不能改变(默认)顺序了。 - Andriy M
2个回答

4
你可���使用dir命令对文件夹进行排序,然后使用echo命令将它们输出...
for /f "delims=" %%a in ( 'dir /b /ad /oN') do echo %%a  >> output.txt

如果你只想回显目录名

dir /b /ad /oN >> output.txt

就足够了...

在命令提示符下,help forhelp dir非常有用...


不确定是我的系统的问题,但此解决方案会导致文件夹名称一旦包含空格就被截断。 - Jonny
你需要关闭默认的 delims 来处理带有空格的名称。 - Neil

3

只需使用sort命令即可。

for /D %%A IN (*) DO echo %%A>> output.txt
sort output.txt > sorted_output.txt

您可以通过调用 sort /? 或者点击 此链接 来了解更多关于该命令的信息。
如您在命令的帮助文档中所读到的那样,您可以使用参数 /O 将输出重定向到文件而不是标准输出。这样,您就可以避免使用两个文件了。
for /D %%A IN (*) DO echo %%A>> output.txt
sort output.txt /O output.txt

编辑:一个漂亮的一行代码可以是:

(for /D %%A IN (*) DO echo %%A) | sort > output.txt

此外,它的速度更快,因为它只在最后一次写出输出。


这是一个很好的解决方案,有没有办法让它不创建两个文件? - Jonny
就我个人而言,我更喜欢 @rene 在这种情况下的答案,但你的回答对我来说很有用,提醒了我这个很棒的“sort”实用程序。 - Andriy M

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接