Powershell - рекурсивно изменять путь, содержащий значение - PullRequest
0 голосов
/ 29 марта 2012

Я недавно начал использовать PowerShell, потому что я считаю его очень полезным и мощным:)

Итак, это сценарий: У клиента есть структура папок, в которой раньше были запятые. Из-за их последнего добавления программы это не удается из-за запятых. По сути, они просто хотят заменить запятые, например, "-"

Это то, что у меня есть ... И это работает, но я чувствую, что это неэффективно. Сценарий делает то, что должен, но как только один путь будет изменен, оставшийся не получится, потому что первоначальный путь был изменен, вы меня следите? :)

    $folderpath = "C:\pathcontainingcomma"
foreach ($i in get-childitem $folderpath -Recurse) {
   $name = $i.name.replace(","," - ")
   Rename-Item -Path $i.fullname -NewName $name -Force -Verbose
}

Надеюсь, я объяснил достаточно хорошо, пожалуйста, задавайте вопросы, если у вас есть:)

Ответы [ 2 ]

1 голос
/ 29 марта 2012

Попробуйте это:

Get-ChildItem $folderPath -r '*,*' -name | foreach {
$p = "$folderPath\$_"; rename-item $p ($p -replace ',',' - ') -whatif }

Параметр -Name удобен здесь, потому что порядок вывода с помощью -Name позволит вам сначала переименовать каталоги более высокого уровня, а замена исправит все элементы пути, по мере того как вы будете проходить через выход.

1 голос
/ 29 марта 2012

Вам нужно будет переименовать изнутри, чтобы избежать изменения путей, которые вам еще нужно обработать, поэтому я думаю, что должно работать следующее:

$folderpath = 'C:\pathcontainingcomma'
$items = Get-ChildItem -Recurse $folderpath
[Array]::Reverse($items)
$items | ForEach-Object { Rename-Item -Path $_ -NewName ($_ -replace ',', '-') -Force -Verbose }
...