2015-02-12 182 views
0

我想将几个文件的扩展名从.cap改为.zip。我写在PowerShell中下面的代码:我想重新命名扩展名为powershell的扩展名为

Copy-Item $sourceFileLocation\*.cap $Temp -Force 

但是,如果与.zip扩展名相同的文件已经存在呢? 它提供了以下错误控制台上:

Rename-Item : Cannot create a file when that file already exists. 
At E:\ExtractHashId.ps1:32 char:23 
+  dir $Temp\*.cap | Rename-Item -NewName{$_.Name -replace ".cap", ".zip"} 
+      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    + CategoryInfo   : WriteError: (C:\Users\v-kamo...News_Locals.cap:String) [Rename-Item], IOException 
    + FullyQualifiedErrorId : RenameItemIOError,Microsoft.PowerShell.Commands.RenameItemCommand 

所以我需要做什么来覆盖这些文件是什么?

+3

错误来自Rename-Item cmdlet,您的代码示例显示复制项目。你能澄清你现有的代码吗? – Trondh 2015-02-12 06:30:38

+0

你可能想要['Move-Item -Force'](http://stackoverflow.com/questions/21194093/rename-file-by-replacing-character-and-overwrite) – 2015-02-12 09:23:17

回答

0
$SourceFile = "X:\Source\Folder\*.cap" 
$Dest = "X:\Destination\Folder" 
Get-ChildItem $SourceFile | Foreach {Copy-item $_ "$Dest\$($_.Name -replace ".cap", ".zip")" -Force} 

应该给你想要的效果。

问题在于,您想要在移动或复制文件后重新命名文件,而另一个文件则以新名称存在时重命名该文件。这不会发生,你会得到这个错误。上面所做的是在传输过程中重命名文件。这意味着正在写入目标文件夹的文件是具有新扩展名的文件,因此您可以从这里覆盖现有文件。