powershell - 使用 rename-item cmdlet 时出现脚本块错误
问题描述
执行以下代码后:
$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”,因为它的参数被指定为脚本块并且没有输入。没有输入就无法评估脚本块。在行:3 字符:14
- ren -newname { "L$global:n" + $_.name -f $global:n++ }
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- CategoryInfo : MetadataError: (:) [Rename-Item], ParameterBindingException
- FullyQualifiedErrorId : ScriptBlockArgumentNoInput,Microsoft.PowerShell.Commands.RenameItemCommand
我哪里错了?管道具有当前目录中的文件的名称,但仍然表示它没有收到任何输入。
解决方案
管道具有当前目录中的文件的名称,但仍然表示它没有收到任何输入。
封闭的管道可以,但嵌套的管道 ( ren -newname { ... }
) 没有任何管道输入,因为您从不通过管道传输任何内容。
改成:
$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{0}{1} " -f $global:n++,$_.name }
} else {
$global:n++
}
}
$n = 0
通过从父管道管道现有项目($_
),我们知道给定ren
/在嵌套管道Rename-Item
中绑定的东西$_
请注意,正如Theo 所提到的,如果目标目录包含超过 9 个文件,您的脚本可能会开始出现一些潜在的意外行为(尽管您没有明确说明您要实现的目标,所以也许这就是您想要的)
推荐阅读
- php - PHP Enqueue Uncaught Enqueue\Rpc\TimeoutException
- python - Pygame rect.colliderect() 不工作,因为没有检测到碰撞
- aspectj - AspectJ 注释在 JAVA maven 项目中不起作用(不是 spring 项目)
- sql - 使用hasura检查sql数据库中是否存在用户句柄
- facebook-messenger-bot - Facebook Messenger 快速回复
- r - R:按组聚合每日到每周的数据
- javascript - Apache Cordova 有本地存储限制吗?
- c++ - unique_ptr 返回带有移动语义的垃圾值
- flutter - 自定义后退按钮颤动
- c - 在 C 中将文本文件另存为字符串