0

我尝试在目录中的每个文件夹内放置一个文本列表。假设从最大到最小列出选择的文件扩展名 (*.rst) 以便删除并仅保留最大的文件扩展名。

@For /D %%I In ("c:\Temp\*")Do @(For %%J In ("%%I\*.rts")Do @Echo %%~nxJ)>"%%I\%%~nxI.txt"

它工作到一定程度,但我无法将它从最大到最小列出,因此可以修复它,或者有一种更简单的方法可以删除每个文件夹中除了最大的 *.rst 文件之外的所有文件。谢谢

4

1 回答 1

0

您的代码部分For %%J In ("%%I\*.rts")Do按照文件系统返回文件的顺序返回文件。相反,使用for /F "delims= eol=|" %%J in ('dir /B /A:-D-H-S /O:-S "%%~I\*.rts"') do

@for /D %%I in ("C:\Temp\*") do @(for /F "delims= eol=|" %%J in ('dir /B /A:-D-H-S /O:-S "%%~I\*.rts"') do @echo(%%J) > "%%~I\%%~nxI.txt"

或者以更清晰的风格:

@echo off
for /D %%I in ("C:\Temp\*") do (
    > "%%~I\%%~nxI.txt" (
        for /F "delims= eol=|" %%J in ('
            dir /B /A:-D-H-S /O:-S "%%~I\*.rts"
        ') do (
            rem /* There is no `~nx` modifier necessary since
            rem    `dir /B` anyway returns pure file names: */
            echo(%%J
        )
    )
)

关键是dir命令及其/O:-S按大小降序排序的选项。

于 2021-09-23T20:27:23.293 回答