逐步重命名文件名
Rename file names incrementally
我想通过在一个字符串前加前缀来逐步重命名文件夹中的文件名。我找到了这个 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++
}
当然失败了。我怎样才能做到这一点?
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++
,因此不需要单独的一行来增加它。还有其他片段肯定会起作用。这是我做的第一个没有做任何疯狂的事情。
我想通过在一个字符串前加前缀来逐步重命名文件夹中的文件名。我找到了这个 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++
}
当然失败了。我怎样才能做到这一点?
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++
,因此不需要单独的一行来增加它。还有其他片段肯定会起作用。这是我做的第一个没有做任何疯狂的事情。