【问题标题】:List names of files/directories with paths relative to current directory列出文件/目录的名称以及相对于当前目录的路径
【发布时间】:2018-05-25 19:07:19
【问题描述】:

我的问题陈述本身非常清楚我需要做什么。

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

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 循环中一个一个地打印它们并在每次迭代中执行一些其他操作,那对我来说将是一个很大的帮助。

【问题讨论】:

  • 试试for /R "..\.." %%F in (*) dofor /R "..\..\TargetFolder" %%F in (*) do...
  • 谢谢@aschipfl,工作就像一个魅力,唯一的事情是,我想要文件夹/目录,所以我用 (/) 替换了 (*)。它过滤掉了目录。
  • 列出目录做for /D /R而不是for /R...
  • @aschipfl 这很酷。你也可以建议我,我怎样才能分别获得路径中的最后一个目录名称?

标签: file batch-file cmd directory


【解决方案1】:

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

@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!"
)

【讨论】:

  • 我遇到了一个文件路径问题。我将一个路径 ../../TargetFolder 存储在一个变量名 targetFolder set targetFolder = ../../TargetFolder 但是当我试图从中读取值时,%targetFolder% for 循环找不到路径和刚刚退出,但是当我输入完整路径../../targetFolder 时,它工作正常。点亮,@aschipfl
【解决方案2】:

好的,要为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

【讨论】:

  • @GuramritSingh - %%~nxF 在 FOR 命令的帮助输出末尾附近进行了解释。 FOR /?
  • aschipfl & @lit 有没有办法只查看目录的直接子级而不是第一个子文件夹的子级
  • 也许是:for /D %%~F in ("..\..\TargetFolder\*") do echo %%~nxF?
猜你喜欢
  • 2010-09-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-14
  • 1970-01-01
  • 2011-04-25
  • 1970-01-01
相关资源
最近更新 更多