使用 if() 重命名子文件夹中的文件

2024-03-03

我正在尝试使用逗号分隔值重命名 PDF 文件。当我的所有 PDF 都位于一个文件夹中时,以下脚本有效:

$myHeader = echo fileName newName

Import-Csv $PSScriptRoot\list_names.txt -Header $myHeader | foreach {
    if (Test-Path -Path $PSScriptRoot\*.pdf) {
        Rename-Item $_.fileName $_.newName
    }
}

但是,将 PDF 重新组织到子文件夹后,该脚本不再起作用,因为 PDF 文件的路径现在是$PSScriptRoot\subfolder1\*.pdf or $PSScriptRoot\subfolder2\*.pdf, etc.

Test-Path不适用于子文件夹,我也尝试使用更改脚本Get-ChildItem和其他命令无济于事。我不确定如何修复此脚本以使用子文件夹。

Edit:我只有 CSV 中的文件名。它只有两列:



"oldfilename.pdf","newfilename.pdf"
  

如果您知道所有感兴趣的文件都直接位于脚本文件夹的直接子文件夹中,则可以使用Resolve-Path找到每个感兴趣的文件:

$myHeader= 'fileName', 'newName'

Import-Csv $PSScriptRoot\list_names.txt -Header $myHeader | ForEach-Object { 
  if ($file = Resolve-Path "$PSScriptRoot\*\$($_.filename)") { 
    Rename-Item $file $_.newName -WhatIf
  } 
}

如果在任何直接子文件夹中都没有找到匹配的文件,Resolve-Path调用没有输出任何内容,并且if块未输入。如果存在匹配,则将其分配给变量$file,以及if进入块。

The -WhatIf之前的重命名操作;删除它以执行实际的重命名。


相比之下,如果感兴趣的文件可以位于脚本文件夹子树中的任何位置,请使用Maxime Franchot 的有用回答 https://stackoverflow.com/a/46046334/45375.

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

使用 if() 重命名子文件夹中的文件 的相关文章

随机推荐