调用此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") }
答案 0 :(得分:8)
我认为你需要foreach-object:
get-childitem -recurse ./ *NYCSCA* | where-object { $_.Name -like
"*NYCSCA*" } | % {rename-item $_ -newname $_.Name.Replace(" ","_") -whatif}
管道阵列无法重命名为一组。
答案 1 :(得分:5)
以下是仅重命名文件的简化版
Get-ChildItem -Filter *NYCSCA* -Recurse |
Where-Object {!$_.PSIsContainer} |
Rename-Item -NewName { $_.Name.Replace(' ','_') } -WhatIf
(编辑:为清晰起见添加了换行符)