我想通过为字符串添加前缀来逐步重命名文件夹中的文件名。我找到了这个只有字符串前缀的Windows PowerShell脚本:
cd C:\Users\strz\Desktop\Data_zMob\processed_\PROD_3Euro_OK\Z_586_20160307_0850
$files=get-childitem
foreach ($file in $files) {
Rename-Item $file.name ("stringToAppend" + $file.name)
}
我根本不熟悉这种脚本语言。所以我尝试了这个:
cd C:\Users\strz\Desktop\Data_zMob\processed_\PROD_3Euro_OK\Z_586_20160307_0850
$files=get-childitem
$lotId=1
foreach ($file in $files) {
Rename-Item $file.name ($lotId + $file.name)
$lotId++
}
当然失败了。我怎样才能做到这一点?
答案 0 :(得分:2)
Cannot convert value "data.csv" to type "System.Int32". Error: "Input string was not in a correct format." At line:5 char:1 + Rename-Item $file.name ($lotId + $file.name) + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidArgument: (:) [], RuntimeException + FullyQualifiedErrorId : InvalidCastFromStringToInteger
你最有可能得到的错误是因为这行
Rename-Item $file.name ($lotId + $file.name)
$lotid
是一个整数,您尝试使用字符串执行数学运算,这在文件名被忽略的情况下是不可能的。要使其工作的最简单的事情是将变量放在引号中,以便在重命名期间将其视为字符串。
Rename-Item $file.name ("$lotId" + $file.name)
因为你知道你正在研究的路径,所以我会回避依赖当前路径作为工作路径。像这样的东西也会做你想要的。完成测试后删除-WhatIf
。
$lotId = 1
$path = "D:\Temp\New folder"
Get-ChildItem $path | Foreach-object{
Rename-Item -Path $_.FullName -NewName ("{0}{1}" -f $lotId++,$_.Name) -WhatIf
}
我们在每次循环传递期间更新$lotId++
,因此不需要单独的行来增加它。还有其他一些片段可以肯定。这是我做的第一个没有做过任何疯狂的事情。