列出具有相对于当前目录的路径的文件/目录的名称

时间:2018-05-25 19:07:20

标签: file batch-file cmd directory

我的问题陈述本身对我实际需要做的事情非常清楚。

现在这适用于我当前目录中的文件。

for /r %%F in (*) do call set files=%%files%% "%%F"
echo %files% >> ..\..\TargetFolder\a\targetfile.config

但我想提升两个文件夹&然后在一个文件夹内挖掘有多个文件夹。我想要所有这些文件夹的名称。

例如就像这样:

for /r %%F in (..\..\TargetFolder\) do call set files=%%files%% "%%F"
echo %files% >> ..\..\TargetFolder\a\targetfile.config

如果您能告诉我是否可以将它们保存在数组中,或者在for循环中逐个打印它们并在每次迭代中执行其他操作,那对我来说将是一个很大的帮助。

2 个答案:

答案 0 :(得分:0)

好的,要为for /R指定除当前目录之外的(绝对或相对)根目录,请执行此操作,例如:

for /R "..\..\TargetFolder" %%F in (*) do echo %%~F

要获取目录而不是文件列表,请添加/D选项:

for /D /R "..\..\TargetFolder" %%F in (*) do echo %%~F

要获取纯文件/目录名称,请使用%%~nxF代替%%~F

要获取位于根目录的直接子节点中的文件,请执行以下操作:

for /D %%D in ("..\..\TargetFolder\*") do for %%F in ("%%~D\*") do echo %%~F

要获取位于此处的目录,请执行以下操作:

for /D %%D in ("..\..\TargetFolder\*") do for /D %%F in ("%%~D\*") do echo %%~F

答案 1 :(得分:0)

这是另一种方式。我很高兴你已经有了解决方案。我担心将所有目录名称放在一个变量中,因为它可能会变得太长。如果有很多,我会按如下方式单独处理它们,或者将列表写入文件以供以后处理。

@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION

FOR /F "tokens=*" %%d IN ('powershell -NoProfile -Command "Get-ChildItem -Path '..\..' -Directory | ForEach-Object { $_.FullName }"') DO (
    SET "THEDIR=%%~d"
    ECHO Do something with "!THEDIR!"
)

如果您想最大化隐藏符号并减少理解,可以使用别名和最小参数名称。

FOR /F "tokens=*" %%d IN ('powershell -nop "ls -Path '..\..' -dir | %%{$_.fullname}"') DO (
    SET "THEDIR=%%~d"
    ECHO Do something with "!THEDIR!"
)