我正在使用Windows命令解释器的内部命令来获取当前目录和子目录中的所有文件:
dir /s /b /o:gn > output.txt
它给了我一个输出,如:
C:\ParentDir\CurrentDir\ChilderDir\AnApp.exe
我想要的是输出:
ChilderDir\AnApp.exe
如何获取没有当前目录path的文件和目录列表?
这个批处理代码可以用来获取没有基路径的目录和文件名列表。
@echo off setlocal EnableExtensions EnableDelayedExpansion rem The environment variable CD holds path of current directory without a rem backslash at end, except the current directory is the root directory rem of a drive. This must be taken into account to get current directory rem path with a backslash at end. if "%CD:~-1%" == "\" ( set "CurrentDirectory=%CD%" ) else ( set "CurrentDirectory=%CD%\" ) rem Delete the output file in current directory if already existing. if exist output.txt del /F output.txt rem Get recursive the directory and file names not having system or hidden rem attribute set and remove from each directory and file name the current rem directory path. With DIR parameter /A directories and files with hidden rem or system attribute would be also included in the list. The output file rem output.txt is also in the list. for /F "delims=" %%I in ('dir /B /S /O:GN 2^>nul') do ( set "FileNameWithFullPath=%%I" echo !FileNameWithFullPath:%CurrentDirectory%=!>>output.txt ) endlocal
为了理解使用的命令及其工作方式,请打开命令提示符窗口,在其中执行以下命令,并仔细阅读为每个命令显示的所有帮助页面。
echo /?
endlocal /?
for /?
if /?
rem /?
set /?
setlocal /?
由命令DIR输出的错误信息在没有无隐藏/系统目录或者当前目录中的文件时处理STDERR被重定向到设备NUL以使用2>nul
来禁止它,由此重定向操作符>
必须在这里用^
转义以在执行时被应用而不是被解释为在命令行中的无效位置的命令FOR的重定向,这将导致执行中的语法错误消息。 另请参阅Microsoft文章使用命令重定向操作符 。