如果文件名存在,则重命名项和覆盖

时间:2015-08-31 12:58:55

标签: powershell powershell-v4.0 foreach-loop-container

我正在尝试使用Rename-Item cmdlet执行以下操作:

我的文件夹包含“ * .txt ”文件。我们说1.txt,2.txt等...

我想复制具有一些前缀的文件,将它们重命名为* .txt并覆盖任何现有文件(如果有的话)。

示例:

  

文件夹:c:\ TEST

     

文件:1.txt,2.txt,3.txt,4.txt,5.txt,index.1.txt,index.2.txt,index.3.txt,index.4.txt,index .5.txt

我想使用rename-item过滤任何 index.*.txt 并将其重命名为 *.txt ,如果存在相同的文件,请替换它

谢谢你们

2 个答案:

答案 0 :(得分:28)

如@lytledw所述,Move-Item -Force非常适合重命名和覆盖文件。

要替换名称的index.部分,您可以使用-replace正则表达式运算符:

Get-ChildItem index.*.txt |ForEach-Object {
    $NewName = $_.Name -replace "^(index\.)(.*)",'$2'
    $Destination = Join-Path -Path $_.Directory.FullName -ChildPath $NewName
    Move-Item -Path $_.FullName -Destination $Destination -Force
}

答案 1 :(得分:5)

我尝试了rename-item -force,但它没有用。但是,我能够做move-item -force并且工作正常