AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / computer / 问题 / 1441609
Accepted
mrgou
mrgou
Asked: 2019-05-28 00:05:10 +0800 CST2019-05-28 00:05:10 +0800 CST 2019-05-28 00:05:10 +0800 CST

使用相对路径将文件夹和子文件夹内容检索到 CSV

  • 772

我发现这是为了在 CSV 文件中获取文件夹及其子文件夹(仅限文件)的内容:

dir -recurse | Where-Object { !$_.PSIsContainer } | Select FullName |
convertto-csv | out-file "test.csv"

但是,我想获取相对路径(相对于我运行命令的根目录)而不是完整路径。

谁能帮忙?

谢谢!

powershell command-line
  • 2 2 个回答
  • 1784 Views

2 个回答

  • Voted
  1. Best Answer
    LotPings
    2019-05-28T00:45:22+08:002019-05-28T00:45:22+08:00

    获得正确 Csv 文件的一种方法是包装我评论的输出:

    Get-ChildItem -Recurse -Name -File | 
      ForEach-Object -begin {'"RelativePath"'}{'"{0}"' -f $_}|
        Out-File "test.csv"
    

    或者使用计算属性从属性中删除起始目录FullName。

    $StartDir = "$ENV:USERPROFILE\Documents\"
    Get-ChildItem -Path $StartDir -File -Recurse |
      Select-Object @{n='RelativePath';e={$_.FullName -replace [regex]::escape($StartDir)}}|
        Export-Csv 'test.csv' -NoTypeInformation
    
    • 0
  2. postanote
    2019-05-28T01:09:02+08:002019-05-28T01:09:02+08:00

    这个问题给人的印象是您对 PowerShell 还很陌生。因此,至关重要的是,你必须加强它,以限制/避免你肯定会遇到的误解、坏习惯、错误和严重的挫败感。访问 YouTube/MSDN Channel9 并搜索初级、中级、高级 PowerShell,以及 PowerShell 文件系统管理和 PowerShell 文件和文件夹管理。

    在许多情况下,PowerShell 会尝试强制执行某些操作,但它不会尝试弄清楚您想要做什么。你必须告诉它该做什么。好吧,对于任何计算机语言都是如此。

    你的问题是你说...

    (相对于我运行命令的根目录)

    ... 好吧,你可能在从根驱动器开始 X 级深度的路径中,所以,现在你在一个孩子中,推断是你只想从孩子那里得到这个。这就是思维过程的问题。

    将其保存到文本文件中,然后将永远不会有驱动器路径,因此当您返回使用它时,您将必须知道并手动将其放回以便再次使用这些文件。

    所以,我不确定你的用例是什么,为了这个努力,但从逻辑上讲它会回来咬你。

    所以,比方说,我在这里:

    Push-Location -Path 'E:\Temp'
    

    然后我们运行这个

    Get-ChildItem -recurse | 
    Where-Object { !$_.PSIsContainer } | Select-Object -Property  FullName 
    
    # Results
    
    FullName                                                            
    --------                                                            
    E:\Temp\about_ReGet-ChildItemection  Microsoft Docs.url                       
    ...                                     
    E:\Temp\ZipMultiFolder.zip                                          
    E:\Temp\Folder\Log_20190419.txt                                     
    ...                               
    E:\Temp\Reports\NewFiles.zip                                        
    ...  
    

    所以,在这里我们只是获取当前位置......

    Get-ChildItem -recurse | 
    Where-Object { !$_.PSIsContainer } | 
    Select-Object -Property  @{Name = 'RelativePath';Expression = {"\$($pwd.Drive.CurrentLocation)\$($PSItem.Name)"}}
    

    所以,在这里我们只获取我们所在的当前路径,只询问文件名,而不是全名

    # Results
    
    RelativePath 
    ------------                                                            
    \Temp\about_ReGet-ChildItemection  Microsoft Docs.url                       
    ...                                     
    \Temp\ZipMultiFolder.zip                                          
    \Temp\Folder\Log_20190419.txt                                     
    ...                               
    \Temp\Reports\NewFiles.zip                                        
    ... 
    

    如果我们将其输出为 CSV,您将不知道它来自哪个驱动器。因此,现在您必须搜索计算机上的每个驱动器以找到它们,或者记住执行此操作时您所在的位置。

    让孩子失望,同样的事情。当然,你明白了,但它到底在哪里?在您的系统上,或在您映射到的某个网络驱动器上。

    Push-Location -Path 'E:\Temp\Folder'
    

    然后我们运行这个

    Get-ChildItem -recurse | 
    Where-Object { !$_.PSIsContainer } | Select-Object -Property  FullName 
    
    # Results
    
    FullName                                   
    --------                                   
    E:\Temp\Folder\Log_20190419.txt            
    E:\Temp\Folder\New Bitmap Image.bmp        
    E:\Temp\Folder\New Text Document - Copy.txt
    E:\Temp\Folder\New Text Document.txt  
    
    
    Get-ChildItem -recurse | 
    Where-Object { !$_.PSIsContainer } | 
    Select-Object -Property  @{Name = 'RelativePath';Expression = {"\$($pwd.Drive.CurrentLocation)\$($PSItem.Name)"}}
    
    
    RelativePath                             
    ------------                             
    \Temp\Folder\Log_20190419.txt            
    \Temp\Folder\New Bitmap Image.bmp        
    \Temp\Folder\New Text Document - Copy.txt
    \Temp\Folder\New Text Document.txt  
    

    如果你说,在这里,你不想要父根,那么你就把它关掉。

    然而,这意味着,您不仅不知道它来自哪个驱动器,而且您也不知道其中的根父级来自哪个驱动器。

    所以,就说吧。

    顺便说一句,最好在脚本中使用完整的 cmdlet 名称。速记/别名适用于交互式内容。当然,我们都习惯使用'dir',但是get-ChildItem 的简写是'gci',和dir 一样短,但是,你知道的。

    Get-Alias -Definition Get-ChildItem | 
    Format-Table -AutoSize
    
    
    
    CommandType Name                 Version Source
    ----------- ----                 ------- ------
    Alias       dir -> Get-ChildItem               
    Alias       gci -> Get-ChildItem               
    Alias       ls -> Get-ChildItem  
    

    但是,嘿,习惯真的很难打破。;-} --- --- 谨慎的决定是那些对我们有用的决定,不管其他人怎么想。;-}

    好吧,那些跟随你的人会表明立场。因此,成为一名优秀的 PowerShell 公民确实是一件好事。

    顺便说一句,如果您打算在脚本中执行此操作,那么也有一个用于此类操作的自动变量。那么,获取脚本运行的位置,以及与该位置相关的任何内容。

    请参阅这篇文章。

    使用相对文件路径添加脚本灵活性

    • 0

相关问题

  • 将前景颜色添加到 Powershell 配置文件?

  • Python 的“pass”参数的批处理等价物是什么?

  • 禁用后无法启用 Microsoft Print to PDF

  • 我可以让这个 PowerShell 脚本接受逗号吗?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    Windows 照片查看器因为内存不足而无法运行?

    • 5 个回答
  • Marko Smith

    支持结束后如何激活 WindowsXP?

    • 6 个回答
  • Marko Smith

    远程桌面间歇性冻结

    • 7 个回答
  • Marko Smith

    Windows 10 服务称为 AarSvc_70f961。它是什么,我该如何禁用它?

    • 2 个回答
  • Marko Smith

    子网掩码 /32 是什么意思?

    • 6 个回答
  • Marko Smith

    鼠标指针在 Windows 中按下的箭头键上移动?

    • 1 个回答
  • Marko Smith

    VirtualBox 无法以 VERR_NEM_VM_CREATE_FAILED 启动

    • 8 个回答
  • Marko Smith

    应用程序不会出现在 MacBook 的摄像头和麦克风隐私设置中

    • 5 个回答
  • Marko Smith

    ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] 证书验证失败:无法获取本地颁发者证书 (_ssl.c:1056)

    • 4 个回答
  • Marko Smith

    我如何知道 Windows 安装在哪个驱动器上?

    • 6 个回答
  • Martin Hope
    Albin 支持结束后如何激活 WindowsXP? 2019-11-18 03:50:17 +0800 CST
  • Martin Hope
    fixer1234 “HTTPS Everywhere”仍然相关吗? 2019-10-27 18:06:25 +0800 CST
  • Martin Hope
    Kagaratsch Windows 10 删除大量小文件的速度非常慢。有什么办法可以加快速度吗? 2019-09-23 06:05:43 +0800 CST
  • Martin Hope
    andre_ss6 远程桌面间歇性冻结 2019-09-11 12:56:40 +0800 CST
  • Martin Hope
    Riley Carney 为什么在 URL 后面加一个点会删除登录信息? 2019-08-06 10:59:24 +0800 CST
  • Martin Hope
    zdimension 鼠标指针在 Windows 中按下的箭头键上移动? 2019-08-04 06:39:57 +0800 CST
  • Martin Hope
    Inter Sys Ctrl+C 和 Ctrl+V 是如何工作的? 2019-05-15 02:51:21 +0800 CST
  • Martin Hope
    jonsca 我所有的 Firefox 附加组件突然被禁用了,我该如何重新启用它们? 2019-05-04 17:58:52 +0800 CST
  • Martin Hope
    MCK 是否可以使用文本创建二维码? 2019-04-02 06:32:14 +0800 CST
  • Martin Hope
    SoniEx2 更改 git init 默认分支名称 2019-04-01 06:16:56 +0800 CST

热门标签

windows-10 linux windows microsoft-excel networking ubuntu worksheet-function bash command-line hard-drive

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve