【问题标题】:Rename Folders matching pattern using foreach loop使用 foreach 循环重命名文件夹匹配模式
【发布时间】:2019-02-09 07:16:51
【问题描述】:

我正在构建一个简单的 Powershell 脚本,它递归地循环遍历一个目录并从特定文件夹中删除“我的”前缀,但我似乎无法让它工作。 我可以列出目录就好了,但 Rename-Item 没有影响。

任何帮助将不胜感激!

Clear-Host
pushd
$homeDrivesDir = 'E:\test\users'
$reportmode = $false

                foreach($homeFolder in (Get-ChildItem -Recurse $homeDrivesDir | Where {$_.psIsContainer -eq $true} | Where-Object {($_.Name.contains("My Documents") -or $_.Name.contains("My Music") -or $_.Name.contains("My Pictures") -or $_.Name.contains("My Videos"))})){
                        if ($reportMode -eq $true) {
                            # reportmode is on, don't do anything
                            Write-Host "Directories To be Renamed" $homeFolder.Name -backgroundcolor red -foregroundcolor white
                        } else {
                            # reportmode is off, fix the permissions
                            Write-Host "Renaming Directories" $homeFolder.Name -foregroundcolor white -backgroundcolor red

                            try {
                                Write-Host $homeFolder
                                Rename-Item $_ -NewName $_.Name.Replace('My ', '')
                            } catch {

                            }
                        } #/if
                    } #/if
popd

【问题讨论】:

    标签: powershell foreach rename


    【解决方案1】:

    Write-Host 正确输出文件夹名称$homeFolder

    您应该在 rename-item 命令中使用相同的变量,而不是 $_

    Rename-Item $homeFolder -NewName $homeFolder.Name.Replace('My ', '')
    

    但是,这仅在您当前的工作目录与您要重命名的文件夹的位置相同时才有效。否则,使用

    Rename-Item $homeFolder.FullName -NewName $homeFolder.Name.Replace('My ', '')
    

    【讨论】:

      猜你喜欢
      • 2021-10-23
      • 2021-09-20
      • 2014-10-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多