gpt4 book ai didi

windows - 使用 Powershell 使用查找文件递归重命名目录

转载 作者:可可西里 更新时间:2023-11-01 11:22:37 25 4
gpt4 key购买 nike

我需要重命名很多目录及其子目录。

我有一个 csv 文件,其中包含旧目录名称和所需的新名称。

1,blah,old_name1,new_name2,wibble
2,foo,old_name2,new_name2,bar
3,john,old_name3,new_name3,paul
4,george,old_name4,new_name4,ringo

注意有些目录名是

old_name1-morestuffhere 

需要重命名为

 new_name1-morestuffhere

我大致知道如何在 bash 中执行此操作:

mv -r `cat file.csv | awk -F, '{print $3* $4*}'`

..但我已经完全迷失了 powershell。

编辑:这是我到目前为止所得到的。这很近吗?:

cat .\file.csv | foreach { $oldname = $_.split(",")[2], $newname = $_.split(",")[3], move-item $oldname*, $newname*}

最佳答案

“-morestuffhere”是棘手的部分。 Move-Item 和 Rename-Item 上的路径参数(即源位置)不采用通配符。但这可以通过另一种方式解决。首先,您能否像这样将 CSV header 添加到您的 CSV 文件中:

Index,F2,OldName,NewName,F5
1,blah,old_name1,new_name2,wibble
...

如果是这样,我们可以使用 PowerShell 的 Import-Csv cmdlet。现在下面看起来有点复杂,但它处理了多个 OldName-<differentstuffhere> 的情况。至 NewName-<sameasoldnamestuffhere>重命名。

$names = Import-Csv names.csv | 
Foreach {
$oldDirs=@(Get-ChildItem . -r -filter "$($_.OldName)*" |
?{$_.PSIsContainer} | %{$_.FullName})
Add-Member -in $_ NoteProperty OldDirs $oldDirs -PassThru
}

foreach ($name in $names) {
foreach ($oldDir in $name.oldDirs) {
$dir = Split-Path $oldDir -Parent
$suffix = (Split-Path $oldDir -Leaf).Substring($name.OldName.Length)
$newPath = Join-Path $dir ($name.NewName + $suffix)
Rename-Item $oldDir ($name.NewName + $suffix) -WhatIf -ea 0
}
}

这是手工解释的,因此可能存在错误。当您对结果满意时,删除 -Whatif。

关于windows - 使用 Powershell 使用查找文件递归重命名目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1686443/

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