如何递归文件夹并显示相对文件夹路径?

2024-04-11

这是一个简单的脚本:

$srcpth = "C:\Users\Mark\Desktop\dummy\"
$files = Get-ChildItem -Path $srcpth -File -Recurse 

foreach ($f in $files) {
    $filen = $f.Name
    $filesize = $f.Length
    Write-Output "$filen $filesize"
    }

这将正确循环遍历所有子文件夹C:\Users\Mark\Desktop\dummy并输出文件名和文件大小,但不会显示相对路径。如何解析相对路径?谢谢。

编辑:添加如下以澄清所需的输出:

例如,在C:\Users\Mark\Desktop\dummy是包含文件的子文件夹

C:\Users\Mark\Desktop\dummy\file00.txt
C:\Users\Mark\Desktop\dummy\folder01\file01_01.txt
C:\Users\Mark\Desktop\dummy\folder01\file01_02.txt
C:\Users\Mark\Desktop\dummy\folder01\file01_03.txt

C:\Users\Mark\Desktop\dummy\folder02\file02_01.txt
C:\Users\Mark\Desktop\dummy\folder02\file02_01.txt

C:\Users\Mark\Desktop\dummy\folder03\file03_01.txt
C:\Users\Mark\Desktop\dummy\folder03\file03_02.txt
C:\Users\Mark\Desktop\dummy\folder03\file03_03.txt
C:\Users\Mark\Desktop\dummy\folder03\file03_04.txt

上述代码的输出产生:

file00.txt 9
file01_01.txt 10
file01_02.txt 12
file01_03.txt 12
file02_01.txt 15
file02_01.txt 14
file03_01.txt 11
file03_02.txt 15
file03_03.txt 13
file03_04.txt 12

但我想要的是:

file00.txt 9
\folder01\file01_01.txt 10
\folder01\file01_02.txt 12
\folder01\file01_03.txt 12
\folder02\file02_01.txt 15
\folder02\file02_01.txt 14
\folder03\file03_01.txt 11
\folder03\file03_02.txt 15
\folder03\file03_03.txt 13
\folder03\file03_04.txt 12

\,没有斜线,或者.\很好。


我建议你输出objects https://learn.microsoft.com/en-us/powershell/scripting/learn/deep-dives/everything-about-pscustomobject?view=powershell-7.2在任何情况下,您都可以使用以下方式获取相对路径,而不是像您现在所做的那样.SubString(..) https://learn.microsoft.com/en-us/dotnet/api/system.string.substring?view=net-6.0:

foreach ($f in Get-ChildItem -Path $srcpth -File -Recurse) {
    [pscustomobject]@{
        FileName     = $f.Name
        FileSize     = $f.Length
        RelativePath = $f.FullName.Substring($srcpth.Length + 1)
    }
}

或者如果你正在使用PowerShell核心,您可以访问.NET APIPath.GetRelativePath(String, String) https://learn.microsoft.com/en-us/dotnet/api/system.io.path.getrelativepath?view=net-6.0#system-io-path-getrelativepath(system-string-system-string):

foreach ($f in Get-ChildItem -Path $srcpth -File -Recurse) {
    [pscustomobject]@{
        FileName     = $f.Name
        FileSize     = $f.Length
        RelativePath = [IO.Path]::GetRelativePath($srcpth, $f.FullName)
    }
}

还有PathIntrinsics.NormalizeRelativePath(String, String) Method https://learn.microsoft.com/en-us/dotnet/api/system.management.automation.pathintrinsics.normalizerelativepath?view=powershellsdk-7.0.0Windows PowerShell 和 PowerShell Core 都可用,尽管这似乎有点矫枉过正:

$ExecutionContext.SessionState.Path.NormalizeRelativePath($f.FullName, $srcpth)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何递归文件夹并显示相对文件夹路径? 的相关文章

  • 通过将密码与命令一起传递,使用 powerShell 脚本进行 ssh

    如果我输入 我可以从 PowerShell ssh 到服务器 ssh 用户名 主机 这会提示输入密码 我输入有效的密码 但我试图编写一个脚本 通过 ssh 进入服务器执行一些脚本并返回 所以我必须传递密码和命令我该怎么做 关于 shell
  • 如何使用 Python 与窗口的 GUI 交互?

    假设您想打开myapp exe 打开第三个菜单 然后选择第二个菜单项 即像用户使用键盘或鼠标一样 然后在对话框窗口中选择第二个按钮 pyahk https pyahk readthedocs io en latest and pyautog
  • 我如何移动粘性/捕捉 wpf 窗口

    当我移动 主 窗口时 我想移动两个或更多粘性窗口 我想做这样的事情 private void MainWindow PreviewMouseMove object sender MouseEventArgs e if e LeftButto
  • 如何在 Visual C++ 中宣传 Bonjour 服务

    我试图弄清楚这是否可能 但是通过 Visual C 宣传 Bonjour 服务的最简单方法是什么 您可以使用DNS服务发现客户 dns sd Windows Bonjour 安装程序把它放进去C Windows system32 dns s
  • Powershell 添加的字符串类型的 ParameterizedProperty Chars 属性是什么?

    请注意 C gt Get Member MemberType eq ParameterizedProperty TypeName System String Name MemberType Definition Chars Paramete
  • 64 位大型 malloc

    malloc 失败的原因是什么 尤其是在 64 位中 我的具体问题是尝试在 64 位系统上分配一大块 10GB RAM 该机器有 12GB RAM 和 32GB 交换空间 是的 malloc 是极端的 但是为什么它会成为一个问题呢 这是在带
  • Node.js + Socket.io + Windows 7 / 8?

    我一直在到处寻找 但似乎找不到解决方案 是否可以在 Windows 7 上的 Node js 上安装 Socket io 如果没有 是否有某种替代方案 或者您知道未来有任何 Windows 支持吗 通常使用 Node js 包管理器 但是我
  • 使用 mingw32 在 Windows 上构建 glew 时“DllMainCRTStartup@12”的多个定义

    我关注了这个主题 使用 mingw 使建筑物在 Windows 上闪闪发光 https stackoverflow com questions 6005076 building glew on windows with mingw 6005
  • 如何使用 .NET 4 运行时运行 PowerShell?

    我正在更新管理一些 NET 程序集的 PowerShell 脚本 该脚本是为针对 NET 2 与 PowerShell 运行的框架版本相同 构建的程序集编写的 但现在需要使用 NET 4 程序集以及 NET 2 程序集 由于 NET 4 支
  • 为什么此 PowerShell 脚本无法正确执行此外部命令?

    以下代码将输出我希望运行的命令字符串 string SourceRepo C inetpub wwwroot Spyda string Repo C inetpub wwwroot BranchClone string revstring
  • fprintf() 线程安全吗?

    我正在为野人就餐问题的某些变量编写一个 C 解决方案 现在 我创建线程 每个线程都将 FILE 获取到同一个调试文件 在线程内我正在使用 fprintf 进行一些打印 打印的语句不受任何类型的互斥锁等保护 我没有在调试文件中观察到任何交错行
  • 如何在子 shell 中运行 cmd.exe 批处理文件

    我有一个批处理文件 通常像这样调用 longjob cmd gt result txt 2 gt 1 这工作正常 但脚本在执行过程中更改了目录 将我的 shell 留在该目录中 这很麻烦 有没有办法在子 shell 中运行命令 同时仍然允许
  • Pip 无法在 Windows 上安装 Twisted

    我正在尝试在 Windows 8 计算机上安装 Twisted 在 Twisted 官方网站上 只有一个 Windows 版的 Wheel 文件 https twistedmatrix com trac wiki Downloads htt
  • 使用 BitmapEncoder 生成时如何使 GIF 循环重复

    我能够使用 BitmapEncoder C WinRT 创建动画 gif 但是 我一直无法弄清楚如何让GIF循环回来并从头开始 没有尝试太多 因为我不确定要尝试什么 搜索了更多要在 GIF 上设置的属性 但找不到任何相关内容 好吧 终于能弄
  • PostgreSql“运行安装后步骤...数据库集群初始化失败”

    我是一名 Windows 用户 我花了几个小时不断地安装和卸载 然后才使其正常工作 前 10 次左右才看到标题中的错误消息 我将其作为一个自我回答的问题放在这里 以防止其他人在安装时可能遇到同样的问题 并为像我这样第一次使用 Postgre
  • 如何使用 python 在 Windows 中禁用/启用特定 USB 端口? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我想在图形窗口中创建一个切换开关 可以使用 python 禁用 启用 Windows 中的特定 USB 端口 我可以使用哪个外部命令或
  • Import-Csv - 成员已存在问题

    我必须将多个 CSV 文件合并为一个文件 每个 CSV 都有一个标题 其中一列标题是相同的 理想情况下 最终文件 all out csv 必须有一个标头 我运行 PowerShell 代码 Import Csv out 1 result c
  • 开发者可以在 Windows 应用程序中使用 iCloud 吗?

    开发人员可以使用 Apple 的 iCloud API 在 Mac OS X 和 iOS 上的不同版本的应用程序之间同步应用程序数据 如果开发人员拥有 Windows 版本的应用程序 该版本是否也可以使用 iCloud 将应用程序数据与 M
  • 提取证书中主题属性的所有值

    我目前正在使用CertGetNameString http msdn microsoft com en us library windows desktop aa376086 28v vs 85 29 aspx提取每个主题属性的值 如下所示
  • 如何从 -WhatIf 处理中排除块?

    我正在编写一个 Powershell cmdlet 它需要执行命令并将其 stderr 输出存储到临时文件中以供以后处理 此输出列出了 cmdlet 稍后可能使用的 COM 端口 mostly side effect free inform

随机推荐