【发布时间】:2021-04-20 09:41:43
【问题描述】:
执行以下代码后:
$n = 1
$array = "L1", "L2", "L3", "L4", "L5", "L6", "L7", "L8", "L9"
ls *.pdf | sort lastwritetime | foreach-object {
if ($_.name.substring(0,2) -cnotin $array) {
ren -newname { "L$global:n " + $_.name -f $global:n++ }
} else {
$global:n++
}}
$n = 0
我遇到以下错误:
重命名项目:无法评估参数“NewName”,因为它的参数 被指定为脚本块并且没有输入。一个脚本块 没有输入就无法评估。在 line:3 char:14
- ren -newname { "L$global:n" + $_.name -f $global:n++ }
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- CategoryInfo : MetadataError: (:) [Rename-Item], ParameterBindingException
- FullyQualifiedErrorId : ScriptBlockArgumentNoInput,Microsoft.PowerShell.Commands.RenameItemCommand
我哪里错了?管道具有当前目录中的文件的名称,但仍表示它没有收到任何输入。
【问题讨论】:
-
如错误所示,您没有将任何输入传送到
ren。$_ |ren -newname { ...} -
不是 ""L$global:n " + $_.name -f $global:n++" 输入吗?我该如何解决?
-
您使用的数组只有 9 项。如果
Get-ChildItem(ls) 找到更多文件怎么办?如果$n达到10,它也会匹配L1... -
不是管道输入。通过在
ren之前添加$_ |来修复它,正如我之前的评论所示