gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 09:45:35 28 4
gpt4 key购买 nike

我正在尝试使用逗号分隔值重命名 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$PSScriptRoot\subfolder2\*.pdf

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

编辑:我在 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 block 。如果匹配,则将其分配给变量 $file,然后进入 if block 。

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


相比之下,如果感兴趣的文件可以位于脚本文件夹子树中的任何位置,请使用 Maxime Franchot's helpful answer .

关于powershell - 使用 if() 重命名子文件夹中的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46045626/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com