逐步重命名文件名

时间:2016-04-20 10:37:33

标签: windows powershell file-rename batch-rename

我想通过为字符串添加前缀来逐步重命名文件夹中的文件名。我找到了这个只有字符串前缀的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++
    } 

当然失败了。我怎样才能做到这一点?

1 个答案:

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