我使用以下命令从目录递归转储完整的文件列表。
dir / b / s c:\ myfolder> C:\ mylist.txt
这样可以正常工作,但它也会显示完整路径的结果,因为我在结果上使用正则表达式,我需要它们只显示文件名。
任何想法?
答案 0 :(得分:5)
有点老问题,但是如果有人偶然发现这个希望得到答案的话,也许这会帮助他们。
从Windows命令行(CMD.exe)运行此命令,使用:
setlocal enabledelayedexpansion
for /f "delims=" %a in ('dir /b /s c:\myfolder"') do (@echo %~nxa >>c:\mylist.txt)
endlocal
从Windows .BAT脚本运行此命令:
setlocal enabledelayedexpansion
for /f "delims=" %%a in ('dir /b /s c:\myfolder"') do (@echo %%~nxa >>c:\mylist.txt)
endlocal
输出可能看起来像这样,具体取决于您运行代码的文件夹中的文件:
file1.fil
file2.fil
file3.fil
了解代码的作用
for / f
dir /b /s
命令运行文件循环,以帮助从目录(文件夹)和子目录(子文件夹)中获取这些文件名。如问题中所述,这将为您提供文件的完整路径。因此,您将获得C:\ folder \ file.txt。“delims =”
%a(CMD.exe)%% a(.BAT)
dir /b /s
找到一个新的文件名变量
%% a更改文件名。dir / b / s
是打印目录(文件夹)文件的命令。通过
使用/b
和/s
提问者正在添加其他条件。
命令dir
不仅打印出文件和目录
(文件夹)在该目录(文件夹)中还有一些额外的
有关目录的信息。
/b
告诉命令dir它不想要额外的
信息..只是文件名。/s
告诉命令dir包含所有文件和
该文件夹中的子目录(子文件夹)。做
(@echo %%~nxa >>c:\mylist.txt)
@echo
@echo %%~nxa
>>c:\mylist.txt
>>
尤为重要。每一次
循环发生它在txt文件中开始一个新行并写入
变量到那一行。如果只指定了一个>
,它将覆盖
每次循环发生时txt文件中的行。哪个会
打败了这个脚本的目的。%~nxa(CMD.exe)%% ~nxa(.BAT)
~
中的%%~nxa
告诉程序您要修改变量
%%一个。在这种情况下,请添加n
和x
。 n
中的%%~nxa
告诉程序要修改变量%% a by
从变量中排除路径。
例如
-variable %%a = C:\folder\filename.fil
-variable %%~na = filename.
- 如果您注意到它将文件名留下扩展名.fil。
x
中的%%~nxa
告诉程序要修改变量%% a
通过从变量中排除路径和文件名,所以你得到的只是文件名的扩展名。
例如
-variable %%a = C:\folder\filename.fil
-variable %%~xa = .fil
所以如果你将两个修饰符n
和x
组合到变量%% a
您将获得包含扩展名的完整文件名。
示例:
-variable %%a = c:\folder\filename.fil
-variable %%~nxa = filename.fil
setlocal enabledelayedexpansion
ENDLOCAL
要获得有关CMD命令的非常有用的解释和参考,我建议您阅读ss64.com以及获得CMD答案的绝佳论坛我建议dostips.com
答案 1 :(得分:2)
更改正则表达式以从整个路径获取文件名。
如果您可以使用PowerShell,请查看Get-ChildItem
。您可以使用它拥有更强大的选项。
答案 2 :(得分:2)
像这样使用
dir /b /s C:\myfolder>C:\temp.txt
echo exit>>C:\temp.txt
goto loop
:loop
set /p _x=<temp.txt
findstr /v /c:"%_x%" temp.txt>temp2.txt
type temp2.txt>temp.txt
set _x=%_x:*\=%
echo %_x%>file.txt
if "%_x%" == "exit" (
del temp.txt
del temp2.txt
exit
)
goto loop
如果您愿意,可以使用for而不是goto,但它基本相同。 抱歉最后一个......
答案 3 :(得分:0)
我知道我有点晚了,但是没有人说要带走/ s
dir /b c:\myfolder > c:\mylist.txt
应该这样做。
答案 4 :(得分:0)
这肯定会奏效,因为它对我有用。
dir D :(文件路径)/ s / b&gt; d:\ filelist.txt
答案 5 :(得分:0)
您可以使用此代码:
dir /b > A_fileslist.txt
在记事本编辑器中复制并保存为“Fileslist.bat”。