我尝试在目录中的每个文件夹内放置一个文本列表。假设从最大到最小列出选择的文件扩展名 (*.rst) 以便删除并仅保留最大的文件扩展名。
@For /D %%I In ("c:\Temp\*")Do @(For %%J In ("%%I\*.rts")Do @Echo %%~nxJ)>"%%I\%%~nxI.txt"
它工作到一定程度,但我无法将它从最大到最小列出,因此可以修复它,或者有一种更简单的方法可以删除每个文件夹中除了最大的 *.rst 文件之外的所有文件。谢谢
我尝试在目录中的每个文件夹内放置一个文本列表。假设从最大到最小列出选择的文件扩展名 (*.rst) 以便删除并仅保留最大的文件扩展名。
@For /D %%I In ("c:\Temp\*")Do @(For %%J In ("%%I\*.rts")Do @Echo %%~nxJ)>"%%I\%%~nxI.txt"
它工作到一定程度,但我无法将它从最大到最小列出,因此可以修复它,或者有一种更简单的方法可以删除每个文件夹中除了最大的 *.rst 文件之外的所有文件。谢谢
您的代码部分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按大小降序排序的选项。