【问题标题】:Get Relative paths of all the folders, sub-folders and files in a folder获取文件夹中所有文件夹、子文件夹和文件的相对路径
【发布时间】:2015-05-27 02:07:41
【问题描述】:

我有一个名为 source 的文件夹。它的结构如下。

source\a.jpg
source\b.jpg
source\c.xml
source\d.ps1
source\subdir1\a.xml
source\subdir2\b.png
source\subdir3\subsubdir1\nothing.img

我想在一个文本文件中列出文件夹、子文件夹和文件的所有相对路径,例如 out.txt。对于以上我期望的输出是:

source\a.jpg
source\b.jpg
source\c.xml
source\d.ps1
source\subdir1\a.xml
source\subdir2\b.png
source\subdir3\subsubdir1\nothing.img
source\subdir1
source\subdir2
source\subdir3
source\subdir3\subsubdir1

您可以看到输出也包括单个文件夹和子文件夹。

注意:我位于源文件夹外的文件夹中。我的意思是,例如我在 fold 文件夹中,其中包含源文件夹 -> fold/source 但如果您的解决方案包括将脚本放在源文件夹中,那也可以。两种解决方案都很好。这可能很容易,但我不熟悉 powershell,但如果给定的话,至少可以从中运行脚本。

EDIT1:好的,在“重复问题”中,答案是针对单个文件的相对路径。但我也想要文件夹和子文件夹。

EDIT2:好的,我写了一个命令:

(gci -path source -recurse *.|Resolve-path -relative) -replace "","" | out-file -FilePath output.txt -Encoding ascii

现在,这个命令给了我源内唯一子目录的相对名称(在我的实际源文件夹中,具有不同的名称;源显然是一个虚拟名称!)。我应该在此代码中进行哪些更改以获取源中子目录中的其他文件名称。

【问题讨论】:

  • @BaconBits :不,这不是重复的。该问题将“给定”绝对路径转换为相对路径。我的要求别的东西。
  • 其实,这正是您解决问题所需要的。您只需对所有文件/文件夹循环使用它,并使用Get-ChildItem。我建议从Get-Help Get-ChildItem -Full 开始,然后将一些代码放在一起,如果您有需要帮助的代码,请返回。我们不是来为您编写代码,但如果您有一些引发您不理解的错误,我们将帮助您修复代码。您需要的东西:Get-ChildItemForEachSet-Content,以及来自其他“重复”问题答案的代码。
  • @TheMadTechnician :查看编辑2

标签: powershell relative-path


【解决方案1】:

这是一个干净的单行答案,我没有写循环,这完美地完成了这项工作。我靠运气“玩”了一下。

(gci -Path source -Recurse *.*|Resolve-Path -Relative) -replace "\.","" |
  Out-File -FilePath output.txt -Encoding ascii

【讨论】:

    【解决方案2】:

    不是很干净,但这可能是一个选择。

    (Get-ChildItem -Recurse -Path "C:\ABC\source\").FullName|ForEach{[Regex]::Replace($_,'^C:\\ABC\\','')}
    

    【讨论】:

      【解决方案3】:

      我可能会这样做:

      $source = 'C:\path\to\source'
      
      $parent  = [IO.Path]::GetDirectoryName($source) -replace '\\+$'
      $pattern = '^' + [regex]::Escape($parent) + '\\'
      
      Get-ChildItem -Path $source -Recurse | % { $_.FullName -replace $pattern }
      

      【讨论】:

        猜你喜欢
        • 2023-03-31
        • 2022-12-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-07-13
        • 1970-01-01
        • 2010-12-02
        相关资源
        最近更新 更多