Come sostituire un testo in un file usando PowerShell
-
Usa
Get-Content
eSet-Content
per Sostituire Ogni Occorrenza di una Stringa in un File con PowerShell -
Usa la Classe
File
per Sostituire Ogni Occorrenza di una Stringa in un File con PowerShell - Sostituisci Ogni Occorrenza di una Stringa in Più File con PowerShell
- Conclusione

PowerShell è uno strumento potente per gestire file e cartelle. Ti consente di creare, copiare, eliminare, spostare, rinominare e visualizzare file e cartelle sul sistema.
Questo tutorial introdurrà diversi metodi per sostituire ogni occorrenza di una stringa in un file con PowerShell.
Usa Get-Content
e Set-Content
per Sostituire Ogni Occorrenza di una Stringa in un File con PowerShell
Il comando 'Get-Content'
recupera il contenuto di un elemento nel percorso fornito, come il testo in un file. Il cmdlet 'Set-Content'
è uno strumento di elaborazione delle stringhe che consente di aggiungere nuovo contenuto a un file o di sostituire contenuti esistenti.
Puoi utilizzare il cmdlet Get-Content
e Set-Content
per sostituire ogni occorrenza di una stringa in un file.
Sintassi:
(Get-Content -Path 'Path\to\Your\File.txt') -Replace 'OldString', 'NewString' | Set-Content -Path 'Path\to\Your\File.txt'
Nella sintassi, sostituiamo 'OldString'
con la stringa che vogliamo sostituire e 'NewString'
con la stringa che vogliamo mettere al suo posto. Assicurati di sostituire 'Path\to\Your\File.txt'
con il percorso effettivo del tuo file.
Facciamo un esempio. Abbiamo un file di testo (test.txt
) nella directory (C:\New
) con il seguente contenuto.
Get-Content C:\New\test.txt
Uscita:
Welcome to Linux tutorials.
Linux is free.
Linux is powerful.
Ora, sostituiamo ogni occorrenza della stringa 'Linux'
con 'PowerShell'
in un file test.txt
con l’aiuto del parametro -Replace
. Le parentesi ()
sono richieste attorno a Get-Content
.
(Get-Content C:\New\test.txt) -Replace 'Linux', 'PowerShell' | Set-Content C:\New\test.txt
Quindi, visualizzare il contenuto di un file test.txt
per verificare le modifiche.
Get-Content C:\New\test.txt
Come puoi vedere, Linux
è stato sostituito con successo con PowerShell
.
Uscita:
Welcome to PowerShell tutorials.
PowerShell is free.
PowerShell is powerful.
Questo metodo utilizza un array di stringhe per trovare e sostituire stringhe in un file perché il cmdlet Get-Content
restituisce un array. È più facile sostituire stringhe se il Get-Content
restituisce una singola stringa.
Possiamo utilizzare il parametro -Raw
come mostrato di seguito. Il parametro -Raw
è utilizzato per garantire che il contenuto di 'C:\New\test.txt'
venga letto come una singola stringa, consentendo un’efficiente sostituzione di 'Linux'
con 'PowerShell'
in tutto il file.
(Get-Content C:\New\test.txt -Raw) -Replace 'Linux', 'PowerShell' | Set-Content C:\New\test.txt
In questo codice, leggiamo il contenuto di un file situato in 'C:\New\test.txt'
come una singola stringa. Poi usiamo l’operatore -Replace
per trovare e sostituire tutte le occorrenze di 'Linux'
con 'PowerShell'
all’interno di quella stringa.
Infine, salviamo il contenuto modificato di nuovo nello stesso file, aggiornandolo effettivamente con il nuovo testo. Questo codice è un modo diretto per eseguire sostituzioni di testo in un file utilizzando PowerShell.
Usa la Classe File
per Sostituire Ogni Occorrenza di una Stringa in un File con PowerShell
La classe File
fornisce metodi statici per operazioni comuni come creare, copiare, spostare, aprire, eliminare e aggiungere a un singolo file. Usa il metodo Replace()
della classe File
per sostituire i contenuti di un file specificato.
Sintassi:
$string = [System.IO.File]::ReadAllText("FilePath")
$string = $string.Replace("OldString", "NewString")
[System.IO.File]::WriteAllText("FilePath", $string)
Parametri:
"FilePath"
: Questo dovrebbe essere sostituito con il percorso effettivo del file."OldString"
: Questa è la stringa che desideri sostituire."NewString"
: Questa è la stringa con cui desideri sostituirla.
Il metodo ReadAllText()
apre un file di testo, legge tutto il testo in quel file e poi chiude il file.
Il metodo WriteAllText()
crea un nuovo file, scrive la stringa specifica nel file e chiude il file. Viene sovrascritto se il file di destinazione esiste già nella posizione.
Facciamo un esempio. Abbiamo un file di testo (python.txt
) nella directory (C:\New
) con il seguente contenuto.
Get-Content C:\New\python.txt
Uscita:
Find the best Python tutorials and learn Python easily from DelftStack.
Ora, sostituiamo ogni occorrenza di una stringa in un file utilizzando il metodo della classe File
.
$string = [System.IO.File]::ReadAllText("C:\New\python.txt").Replace("Python", "JavaScript")
[System.IO.File]::WriteAllText("C:\New\python.txt", $string)
Nel codice sopra, iniziamo creando una variabile chiamata $string
, che memorizzerà il contenuto modificato del file 'C:\New\python.txt'
dopo aver eseguito la sostituzione di testo. Utilizzando [System.IO.File]::ReadAllText("C:\New\python.txt")
, leggiamo il contenuto dell’intero file e lo salviamo in $string
.
Nel passo successivo, utilizziamo il metodo Replace()
per localizzare tutte le istanze di "Python"
all’interno del contenuto e sostituirle con "JavaScript"
, aggiornando efficacemente il testo. Infine, utilizziamo [System.IO.File]::WriteAllText("C:\New\python.txt", $string)
per scrivere il contenuto modificato di nuovo nello stesso file, sovrascrivendo il testo originale e preservando le nostre modifiche.
Verifica le modifiche apportate in C:\New\python.txt
.
Get-Content C:\New\python.txt
Uscita:
Find the best JavaScript tutorials and learn JavaScript easily from DelftStack.
Nell’uscita, possiamo vedere che "Python"
è stato sostituito con la parola "JavaScript"
.
Sostituisci Ogni Occorrenza di una Stringa in Più File con PowerShell
I metodi sopra sostituiscono una stringa in un file singolo. A volte, potrebbe essere necessario sostituire la stessa stringa in più file.
In tal caso, puoi usare il comando qui sotto per sostituire ogni occorrenza di una stringa specificata in più file.
Get-ChildItem 'C:\New\*.txt' | foreach {
(Get-Content $_) | foreach { $_ -Replace 'weekly', 'monthly' } | Set-Content $_
}
Nel codice sopra, iniziamo utilizzando Get-ChildItem
per raccogliere un elenco di file '.txt'
nella directory 'C:\New'
. L’asterisco *
carattere jolly specifica tutti i file con l’estensione del nome file .txt
.
Poi cicliamo attraverso ogni file, leggiamo il suo contenuto con Get-Content
e applichiamo un’operazione di sostituzione, cambiando 'weekly'
in 'monthly'
, usando l’operatore -Replace
. Il contenuto modificato viene quindi scritto di nuovo nello stesso file con Set-Content
.
Questo processo si ripete per ogni file nella directory, sostituendo in modo efficiente 'weekly'
con 'monthly'
in più file.
Possiamo anche usare il parametro -Recurse
per sostituire una stringa in file nella directory specificata e nelle sue sottodirectory.
Get-ChildItem 'C:\New\*.txt' -Recurse | foreach {
(Get-Content $_) | foreach { $_ -Replace 'weekly', 'monthly' } | Set-Content $_
}
In questo codice, iniziamo utilizzando Get-ChildItem
per assemblare un elenco di file '.txt'
all’interno di 'C:\New'
e delle sue sottodirectory. L’opzione -Recurse
assicura che cerchiamo questi file non solo nella directory specificata ma anche nelle sue sottodirectory.
Poi utilizziamo un paio di loop ForEach
per accedere al contenuto di ciascun file. All’interno del loop interno, utilizziamo l’operatore -Replace
per sostituire 'weekly'
con 'monthly'
nel testo.
Infine, salviamo il contenuto modificato di nuovo nello stesso file. Questo processo viene eseguito su tutti i file in 'C:\New'
e nelle sue sottodirectory, permettendoci di sostituire efficacemente 'weekly'
con 'monthly'
in numerosi file e directory nidificate.
Conclusione
In questo articolo, abbiamo esaminato diversi modi per sostituire stringhe in un singolo file utilizzando i cmdlet Get-Content
e Set-Content
, offrendo sia un metodo base che un metodo più efficiente con il parametro -Raw
. Successivamente, abbiamo sfruttato la potenza della classe File
per sostituire testo all’interno dei file, dimostrando una tecnica più avanzata.
Inoltre, abbiamo ampliato le nostre conoscenze sostituendo testo in più file in una directory e nelle sue sottodirectory. Questi metodi rendono facile per le persone modificare il testo nei propri file e mostrano quanto possa essere utile PowerShell per compiti come questo.
Articolo correlato - PowerShell String
- Array di stringhe in PowerShell
- Come controllare se un file contiene una stringa specifica utilizzando PowerShell
- Come controllare se una stringa non è NULL o VUOTA in PowerShell
- Come convertire un oggetto array in una stringa in PowerShell
- Come convertire una stringa sicura in testo normale in PowerShell
- Come estrarre una sottostringa PowerShell da una stringa