我有一个目录中的文件夹列表,我需要将所有文件夹名称复制到一个文件中,并且该文件应该在一行中,并用分隔符分隔。有人可以在批处理文件中帮助我吗?
谢谢
答案1
批量处理时你可以这样做:
@echo off
setlocal EnableDelayedExpansion
for /D %%f in (*.*) do set n=!n!;%%f
if defined n echo %n:~1% > list.txt
endlocal
要递归到子文件夹,请/D
用替换/R
,并*.*
用 替换.
。
for /R %%f in (.) do set n=!n!;%%f
通过向循环变量添加限定符,您可以指定是否只需要文件夹的名称(%%~nxf
)或完整路径(%%~dpnxf
)。
答案2
没有单个批处理文件命令可以完成您想要的任务,但您可以使用批处理文件来完成任务并call
自行完成。Ansgar Wiechers 的回答有正确的基本想法(我看到在我发布我的版本后他修复了他的版本)。
无论如何,这是一个版本,它将在当前目录或作为参数传递给它的目录中生成一个以分号分隔的第一级子文件夹列表。我选择使用分号分隔符而不是逗号,因为它永远不可能成为有效文件名的一部分(逗号可以,尽管这并不常见)。
如果给定的文件夹名称中有空格,则必须像这样用引号引起来(否则引用文件夹的目录路径是可选的):
subdirs "C:\Documents and Settings"
请注意,它仅将列表打印到控制台(stdout),因此如果您想将其保存在文件中,则需要> filename.ext
在脚本文件名(和任何文件夹名称)后附加一个以将输出重定向到您选择的文件中:
subdirs C:\Windows > dirlist.txt
== 子目录.bat ==
@echo off
setlocal EnableDelayedExpansion
pushd %1
for /D %%d in (*.*) do set n=!n!;%%d
if defined n echo %n:~1%
popd
endlocal
如果您想要生成每个文件夹名称的完整路径,您可以在循环行中将set n=!n!;%%d
其更改为。set n=!n!;%%~fd
for