我正在尝试列出硬盘驱动器上具有特定扩展名的所有文件的路径。
我正在使用
dir *.txt /s /b
,这是我的输出:
C:\Path\To\File\1.txt
C:\Path\To\File\2.txt
C:\Path\To\File\3.txt
C:\Path2\To\File\1.txt
但我只需要这些文件的路径,没有重复项和文件名。所以在那个演员阵容中它将是:
C:\Path\To\File\
C:\Path2\To\File\
欢迎任何帮助
由 Windows 命令处理器
cmd.exe
处理的批处理文件,用于列出系统驱动器上至少包含一个文件扩展名 .txt
的文件的所有目录是:
@echo off
setlocal EnableExtensions DisableDelayedExpansion
set "PreviousDirectory="
for /F "delims=" %%I in ('dir %SystemDrive%\*.txt /A-D-L /B /S 2^>nul') do (
set "CurrentDirectory=%%~dpI"
setlocal EnableDelayedExpansion
if not "!PreviousDirectory!" == "!CurrentDirectory!" (
endlocal
echo %%~dpI
set "PreviousDirectory=%%~dpI"
) else endlocal
)
endlocal
在后台启动了另一个命令进程来运行命令DIR,其输出由正在处理批处理文件的命令进程捕获。因此,在显示任何输出之前可能需要几秒钟甚至几分钟的时间,因为在命令处理文件名列表之前,首先会在整个系统驱动器中搜索文件扩展名为
.txt
的所有文件,这些文件不是链接为了。
还可以使用带有以下命令行的批处理文件:
@echo off
setlocal EnableExtensions DisableDelayedExpansion
if exist "%SystemDrive%\*.txt" echo %SystemDrive%\
for /D /R "%SystemDrive%\" %%I in (*) do if exist "%%I\*.txt" echo %%I\
endlocal
在搜索整个系统驱动器时输出目录路径。但如果目录包含名称以
.txt
结尾的目录或链接,则可能会导致误报。此解决方案也不会输出具有隐藏属性集且包含文件扩展名 .txt
的文件的目录。因此第一个解决方案更好。
要了解所使用的命令及其工作原理,请打开命令提示符窗口,执行以下命令,并完整、仔细地阅读每个命令显示的帮助页面。
dir /?
echo /?
endlocal /?
for /?
if /?
set /?
setlocal /?