Powershell - 如何将文件名前缀到包含该文件类型的任何路径的文件夹中

Posted

技术标签:

【中文标题】Powershell - 如何将文件名前缀到包含该文件类型的任何路径的文件夹中【英文标题】:Powershell - How to prefix filename into folder for any path containing that file type 【发布时间】:2021-05-05 16:07:26 【问题描述】:

Powershell 脚本需要从目录上带有时间和日期戳的文件夹中的文件类型中提取文件基名,并使用该基名附加这些文件夹。

下面的脚本可以替换下面的路径名,但我需要为文件夹添加前缀。这样可以join-path吗?

Original link for script below

cd C:\Directory
Get-ChildItem *.lsa -File -Recurse | ForEach-Object 
  Rename-Item (Split-Path $_ -Parent) ($_.BaseName)  -WhatIf 

结果:

What if: Performing the operation "Rename Directory" on target "Item: C:\Directory\originalpath 
Destination: C:\Directory\basename".

我想要的是"C:\Directory\basename_originalpath" 或者更好的是"C:\Directory\basename\originalpath"

我认为Join-path 是解决方案,但我是第一次编写脚本,无法链接这两个命令。我还必须指定起始目录,因为第一次尝试在没有它的情况下运行我的整个 c:\ 驱动器。

【问题讨论】:

所以您希望为每个.lsa 文件创建一个新文件夹,名称与文件的BaseName 属性相同,然后将文件移入其中? 这只是我的目标文件。包含文件夹的全部内容需要在新文件夹中。 【参考方案1】:

它不漂亮,但我认为这会起作用:

Get-ChildItem *.lsa -File -Recurse | ForEach-Object 
    if(-Not (Test-Path -Path "$outputDirectory\$($_.BaseName)"))
        New-Item -WhatIf -ItemType Directory -Path "$outputDirectory\$($_.BaseName)"
    

    Move-Item (Split-Path $_ -Parent) "$outputDirectory\$($_.BaseName)\$($_.Directory.BaseName)" -WhatIf

更新代码。

【讨论】:

这很接近。该文件始终位于 C:\Directory\dir1\file.lsa 中,因此删除路径的完整部分会很好 而不是长度,它可以从 C:\Directory\ 之后的右侧拉出所有东西,所以只是 dir1。然后最终将是 C:\Directory\file\dir1 完美。谢谢! 如何从目录文件共享运行它?例如 \\server\share 经过进一步测试。而不是 C:\Directory\file\dir1 它一直到 C:\file\dir1

以上是关于Powershell - 如何将文件名前缀到包含该文件类型的任何路径的文件夹中的主要内容,如果未能解决你的问题,请参考以下文章

Azure(PowerShell)如何向多个现有的网络安全组(源地址前缀字段)添加额外的 IP?

powershell 将帐户(用户和组)复制到其他站点。同时编辑登录的前缀部分。

如何使用PowerShell将文件附加到电子邮件

Powershell仅在包含特定字符串的文件夹名称中移动子目录中的项目

如何使用 PowerShell 或 C# 将网页保存到 HTML 文件中?

如何编写Powershell脚本以提取.iso文件并通过创建文件夹将其复制到文件夹中