2015-02-12 2 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, в вашем примере кода указан экземпляр-элемент. Не могли бы вы уточнить свой существующий код? – Trondh

+0

Возможно, вы хотите ['Move-Item -Force'] (http://stackoverflow.com/questions/21194093/rename-file-by-replacing-character-and-overwrite) –

ответ

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

Должно оказать желаемый эффект.

Проблема заключается в том, что вы хотите переименовать файл после его перемещения или копирования, а другой файл существует с новым именем. Этого не может быть, вы получите эту ошибку. То, что указано выше, переименовывает файл во время транзита. Это означает, что файл, который записывается в папку назначения, представляет собой файл с новым расширением, поэтому здесь вы можете перезаписать существующие.