Рекурсивное переименование файлов в Powershell

Вызов этой команды powershell и получение ошибки. Сводит меня с ума.

Prompt> get-childitem -recurse ./ *NYCSCA* |  where-object { $_.Name -like
 "*NYCSCA*" } |  rename-item $_ -newname $_.Name.Replace(" ","_") -whatif

Вот ответ:

You cannot call a method on a null-valued expression.
At line:1 char:140
+ get-childitem -recurse ./ *NYCSCA* |  where-object { $_.Name -like "*NYCSCA*" } | select FullName | rename-item $_ -n
ewname $_.Name.Replace <<<< (" ","_") -whatif
    + CategoryInfo          : InvalidOperation: (Replace:String) [], RuntimeException
    + FullyQualifiedErrorId : InvokeMethodOnNull

Если я удалю последнюю часть, я получаю список файлов. Какие-нибудь подсказки? Очевидно, я еще не пробовал Powershell.

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

Здесь он сильно упрощен. Я даже не могу заставить работать этот классический пример.

gci  *NYCSCA*  | ren $_ ($_.Name).Replace("foo","bar")

Спасибо @JNK,% сделал это. Решение, которое мне нужно, на случай, если вам интересно:

gci -recurse | where-object{ $_.Name -like "*NYCSCA*"} | %{rename-item $_.FullName $_.FullName.Replace("NYCSCA","SDUSD") }
9
задан Daniel Williams 24 August 2011 в 20:54
поделиться