2015-08-31 15 views
12

Sto cercando di utilizzare il cmdlet Rename-Item per fare la prossima:Rename-Item e sovrascrivere anche se esisto

ho cartella che contiene "* .txt" file (diciamo, 1.txt , 2.txt ecc ...) Voglio copiare i file che hanno un prefisso, rinominarli in * .txt e sovrascrivere eventuali file esistenti se ce ne sono.

esempio:

cartella C: \ TEST file: 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

voglio usare rename-item per filtrare qualsiasi index.*.txt e rinominarli a *.txt, e se esiste stesso file, lo sostituisce .

Grazie ragazzi

+2

Hai provato l'interruttore force? –

+0

@PeterSchneider La forza non funzionerà in questo modo con 'Rinomina-Elemento' come si otterrebbe ancora' Impossibile creare un file quando quel file esiste già. – Matt

+0

È possibile utilizzare [File.IO.File] :: Copia ($ file sorgente, $ targetfile, $ true); - $ true sovrascrive il file esistente ... –

risposta

15

Come notato da @lytledw, Move-Item -Force funziona perfettamente per rinominare e sovrascrivere i file.

per sostituire la parte index. del nome, è possibile utilizzare l'operatore -replace regex:

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 
} 
+0

Con lievi modifiche il "Move-Item" ha fatto il trucco! Saluti ! –

+0

Desideravo rinominare migliaia di file duplicati che risultavano dalla migrazione della mia libreria musicale a un nuovo PC da più percorsi di backup, uno dei quali aggiungeva automaticamente un timbro data ai nomi dei file. Ho usato questa risposta con alcune modifiche, ad esempio: 'C: \ Users \ reyje \ music \ itunes \ itunes media \ music> Get-ChildItem" * (2017_12_14 *. * "-recurse | ForEach-Object { >> $ NewName = $ _. Name -replace "\ (2017_12_14 17_50_59 UTC \)", '' >> $ Destinazione = Join-Path -Path $ _. Directory.FullName -ChildPath $ NewName >> Move-Item -Path $ _.FullName -Destination $ Destination -Force >>} ' – PatentWookiee

+0

L'idea era di sostituire la stringa letterale" (2017_12_14 17_50_59 UTC) "con niente - il" sono due virgolette singole senza nulla tra di loro. la maggior parte dei file, ma per ogni file con parentesi quadre nel suo nome o percorso, ho ricevuto errori come questo: Move-Item: Impossibile recuperare i parametri dinamici per il cmdlet. Il modello di carattere jolly specificato non è valida: 09 09 Old Viola Tin [9% di pura Hea (2017_12_14 17_50_59 UTC) .m4a alla riga: 4 char:. 7 + Move-Item -Path $ _ NomeCompleto -Destination $ Destinazione -Force + – PatentWookiee

3

ho provato il -force Rename-Item e non ha funzionato. Tuttavia, sono stato in grado di spostare-item -force e ha funzionato correttamente

+0

L'op sta chiedendo più di una domanda ma quella è la soluzione per il primo uno. – Matt

Problemi correlati