Я хочу переименовать расширение нескольких файлов с расширением в powershell

Я хочу изменить расширение нескольких файлов с .cap на .zip. Я написал следующий код в 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

Итак, что мне нужно сделать, чтобы перезаписать эти файлы?


person Spidy776    schedule 12.02.2015    source источник
comment
Ошибка связана с командлетом Rename-Item, в вашем примере кода указано copy-item. Не могли бы вы уточнить ваш существующий код?   -  person Trondh    schedule 12.02.2015
comment
Вероятно, вы хотите Move-Item -Force   -  person Mathias R. Jessen    schedule 12.02.2015


Ответы (1)


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

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

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

person Ian    schedule 12.02.2015