PowerShell如何将变量插入文件名?拼接变量时出现报错怎么解决?
问题根源
$JobNum为System.IO.DirectoryInfo类型的目录对象,而非字符串类型,两次报错均由类型不匹配导致:
- 第一次报错:
DirectoryInfo类型未实现加法运算符,无法直接与字符串执行+拼接操作,触发op_Addition方法不存在错误 - 第二次报错:将
DirectoryInfo对象隐式转换为字符串时,会输出带路径分隔符(\)的完整目录路径,而文件名不允许包含路径分隔符,因此触发路径/设备名相关报错
解决方案
直接在获取$JobNum时调用目录对象的Name属性,拿到纯目录名字符串即可,修改后的可运行代码如下:
# 获取三级父目录的名称作为字符串类型的作业号 $JobNum = (Get-Item $Path).Parent.Parent.Parent.Name # 批量给pdf文件添加作业号前缀 Get-ChildItem Of*.pdf | Rename-Item -NewName { $JobNum + "_" + $_.Name }
如果想进一步避免类型隐式转换的问题,也可以改用PowerShell字符串插值的写法,逻辑更清晰:
Get-ChildItem Of*.pdf | Rename-Item -NewName { "${JobNum}_$($_.Name)" }
内容的提问来源于stack exchange,提问作者J Web
相关产品推荐
相关产品推荐

