逐步重命名文件名

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++,因此不需要单独的一行来增加它。还有其他片段肯定会起作用。这是我做的第一个没有做任何疯狂的事情。