Come dividere i percorsi con il comando Split-Path di PowerShell

Hai bisogno di dividere i percorsi per ottenere parti specifiche di essi? Se sì, allora il comando PowerShell Split-Path è l’amico su cui puoi contare. Quando lavori con file, certificati e registro, noterai che i percorsi rappresentano le loro posizioni.

E in qualche momento, potresti aver bisogno di filtrare quale parte di un percorso restituire, magari quando fai automazione. Fortunatamente per te, questo tutorial ti insegnerà modi per utilizzare il comando PowerShell Split-Path per farlo.

Dai, continua a leggere e vediamo di darti una nuova arma per il tuo arsenale di PowerShell!

Prerequisiti

Se hai intenzione di seguire gli esempi in questo tutorial pratico, avrai bisogno di un computer con qualsiasi versione moderna di Windows che abbia PowerShell 5.1 o superiore. Questo tutorial userà Windows 10 20H2 con PowerShell 7.1.1.

Cos’è un Percorso?

Prima di addentrarci nel comando PowerShell Split-Path, assicuriamoci che tu abbia chiaro cos’è un percorso. Un percorso determina la posizione di un elemento che segue un formato specifico.

Ad esempio, il percorso di un file potrebbe essere C:\demo\sottocartella1\TestFile_11.txt. Se separi questo percorso in parti, il percorso include quanto segue:

  • C: is the drive or the qualifier, or the specified path. The qualifier is the part of the path from the left up to the colon (:) character.
  • \demo\sottocartella1\è la cartella e la/i sottocartella/e o contenitore/i.
  • TestFile_11.txtè il nome del file o la foglia. La foglia è l’ultimo elemento o parte di un percorso.

Tieni presente, però, che i percorsi non sono esclusivi per file e cartelle. Altri percorsi validi possono includere:

  • Certificato (ad esempio, Cert:\CurrentUser\My)
  • Registro (ad esempio, HKCU:\Software)
  • Funzione (ad esempio, Function:\New-Guid)
  • Variabile (ad esempio, Variable:\PSEdition)
  • Active Directory (ad esempio, AD:\CN=Users,DC=Constoso,DC=com)

I parametri di Split-Path di PowerShell

Come ogni cmdlet, Split-Path è dotato di un insieme di parametri che manipolano il comportamento del cmdlet e restituiscono il suo output. E questi parametri sono ciò che costituisce la sintassi di Split-Path di PowerShell.

  • -Path – Questo parametro accetta una o più stringhe di percorso che si desidera dividere. Questo parametro accetta anche input da pipeline. I caratteri jolly nei percorsi sono anche accettabili.
  • -LiteralPath – Come il parametro -Path, il parametro -LiteralPath accetta anche percorsi da dividere. Ma questo parametro tratterà solo il percorso così come è scritto. Significa che il comando non interpreterà i caratteri jolly se si utilizza questo parametro per specificare i percorsi.
  • -Resolve – Questo parametro dice al cmdlet Split-Path di risolvere i file o gli elementi che sono referenziati dal percorso fornito. A causa della sua natura letterale, non è possibile utilizzare questo parametro insieme al parametro -LiteralPath.
  • -IsAbsolute – Questo parametro restituisce un valore booleano per determinare se il percorso specificato è un percorso assoluto o meno.

Il cmdlet PowerShell Split-Path ha anche un parametro chiamato -Credential, che teoricamente accetta un oggetto PSCredential. Ma secondo Microsoft, questo parametro non è supportato da nessuno dei provider PowerShell predefiniti e genera un errore quando viene utilizzato.

I seguenti parametri sono chiamati Parametri di Suddivisione della Posizione. Questi parametri indicano al cmdlet PowerShell Split-Path quale elemento o parte di un percorso restituire. Poiché il cmdlet può restituire solo un elemento di un percorso, è possibile utilizzare solo uno di questi parametri alla volta.

  • -Parent – Restituisce la posizione genitore (senza l’elemento o il nome file) del percorso specificato. Questo parametro è anche il parametro predefinito della posizione di divisione, il che significa che è possibile omettere questo parametro e ottenere comunque la posizione genitore come risultato.
  • -Leaf – Restituisce solo l’ultimo elemento del percorso o il leaf.
  • -LeafBase – Restituisce solo l’ultimo elemento del percorso o il leaf senza l’estensione. Questo parametro è disponibile solo in PowerShell 6.0 e versioni successive.
  • -Estensione – Restituisce solo l’estensione del file (dal punto finale “.” all’ultimo carattere del percorso). Questo parametro è disponibile solo in PowerShell 6.0 e versioni successive.
  • -Qualificatore – Restituisce solo il drive o il qualificatore del percorso.
  • -NoQualificatore – Rimuove il drive o il qualificatore dal resto del percorso.

Utilizzando il cmdlet PowerShell Split-Path (Esempi)

Il cmdlet PowerShell Split-Path consente di dividere e dissezionare parti di un percorso. Dopo averlo fatto, è possibile specificare quale parte di un percorso restituire. A seconda delle esigenze di output, è possibile scegliere di restituire il qualificatore, il percorso senza qualificatore e il nome del file (o dei file).

Ottenere la cartella genitore di un percorso

Per restituire la cartella genitore del percorso, eseguire il cmdlet PowerShell Split-Path e aggiungere il parametro -Parent.

Split-Path -Path C:\demo\subfolder1\TestFile_11.txt -Parent

Il risultato qui sotto mostra che il comando restituisce il percorso della cartella genitore.

Returning the parent containers of the Item

Suggerimento: Eseguire il cmdlet PowerShell Split-Path senza parametri restituirà la cartella genitore per impostazione predefinita, lo stesso comportamento dell’utilizzo del parametro -Parent.

Suggerimento: Il parametro -Path accetta percorsi multipli, il che consente di dividere valori di stringhe di percorsi multipli in un singolo comando.

e.g., Split-Path -Path 'c:\folder1','c:\folder2'

Visualizzazione di un percorso senza il qualificatore

Immagina di creare uno script che duplica la struttura a albero di una cartella da un’unità all’altra (ad esempio, C:\demo\subfolder1 a D:\demo\subfolder1). Potresti voler che il tuo codice divida il percorso di origine e ottenga solo la struttura delle cartelle senza la lettera dell’unità.

Per ottenere il percorso senza il qualificatore, esegui il cmdlet PowerShell Split-Path con il parametro -NoQualifier come il comando qui sotto. Questo comando suddivide il percorso e omette la lettera dell’unità nel risultato.

Split-Path -Path C:\demo\subfolder1 -NoQualifier

Come puoi vedere dal risultato qui sotto, utilizzando il parametro noQualifier si ottiene il percorso ma senza la stringa di qualificazione.

Returning the Path Without the Qualifier

Ottenere l’unità o il qualificatore di un percorso

A volte potresti aver bisogno di restituire solo il qualificatore o la lettera dell’unità. Ad esempio, quando vuoi che il tuo script riassuma i risultati in base alle lettere dell’unità.

E per farlo, esegui il comando PowerShell Split-Path qui sotto con il parametro -Qualifier. Questo comando dividerà il percorso e restituirà solo la stringa di qualificazione come risultato.

Split-Path -Path C:\demo\subfolder1\TestFile_11.txt -Qualifier
Returning the Path’s Drive or Qualifier

Visualizzazione del nome di un file, directory o elemento

Pensa a un percorso come a un albero. Il qualificatore potrebbe essere l’albero stesso, le cartelle sono i rami, e alla fine troverai il foglio. Un foglio è qualsiasi stringa di lunghezza non zero alla fine del percorso.

Quando hai bisogno di dividere un percorso per ottenere il foglio, esegui il comando Split-Path qui sotto e aggiungi il parametro -Leaf.

Split-Path -Path C:\demo\subfolder1\TestFile_11.txt -Leaf

Come risultato, l’immagine qui sotto mostra che il comando ha restituito solo il nome del file dal percorso specificato.

Returning the Path’s Leaf

Dividere il Nome File dall’Estensione (≥PowerShell 6.0)

Nota: Questa sezione si applica a PowerShell 6.0 e versioni successive.

Quindi hai diviso il percorso e restituito l’elemento. E l’elemento, in questo caso, è un nome file (TestFile_11.txt), che ha due parti: la base e l’estensione. Il cmdlet Split-Path di PowerShell ti consente di suddividere ulteriormente il leaf in queste due parti con i parametri -LeafBase e -Extension.

Per ottenere la base e l’estensione di un nome file, esegui i comandi seguenti.

Se il percorso non ha un’estensione, il parametro Extension restituirà una stringa vuota.

Split-Path -Path C:\demo\subfolder1\TestFile_11.txt -LeafBase
Split-Path -Path C:\demo\subfolder1\TestFile_11.txt -Extension
Splitting the Leaf’s Base and Extension

Dividere il Nome File dall’Estensione (≤ Windows PowerShell 5.1)

Sfortunatamente, i parametri -LeafBase e -Extension non sono disponibili in Windows PowerShell 5.1 e nelle versioni precedenti. Non preoccuparti, con un po’ di magia di PowerShell, puoi replicare l’output di questi parametri anche se hai solo Windows PowerShell 5.1.

Ma invece del cmdlet Split-Path, userai la prossima cosa migliore: la combinazione del metodo split() e dell’operatore -replace.

A PowerShell string object, such as the path, contains a split() method. This method allows you to split a string into multiple elements based on a delimiter character that you provide. And in the case of paths, the delimiter is the (\\) back-slash character.

D’altra parte, l’operatore -replace ti consente di sostituire le stringhe usando le espressioni regolari (RegEx).

Per imitare i risultati del parametro -LeafBase, esegui il comando seguente in PowerShell.

# Suddividi il percorso ('C:\demo\subfolder1\TestFile_11.txt') utilizzando '\' come delimitatore.
# Seleziona l'ultimo elemento '[-1]' dopo la suddivisione (TestFile_11.txt)
# Cerca la stringa che corrisponde a questo modello --> '\.[^.]*$'
# ^ questo modello corrisponderà all'ultimo punto "." nel percorso E a ogni altro carattere dopo di esso.
# Sostituisci quindi la corrispondenza con nulla/valore vuoto ''.
('C:\demo\subfolder1\TestFile_11.txt').split('\')[-1] -replace '\.[^.]*$',''

Come risultato, la schermata sottostante mostra che il comando restituisce solo il nome di base del file.

Getting the file base in PowerShell 5.1

Ora, per ottenere solo l’estensione del file, esegui il comando seguente in PowerShell.

# Suddividi il percorso ('C:\demo\subfolder1\TestFile_11.txt') utilizzando '.' come delimitatore.
# Seleziona l'ultimo elemento '[-1]' dopo la suddivisione (txt)
('C:\demo\subfolder1\TestFile_11.txt').split('.')[-1]

Il risultato sottostante mostra che il comando restituisce solo l’estensione del file – txt.

Getting the file extension in PowerShell ≤ 5.1

Determinare se il percorso è assoluto

Come amministratore di sistema, incontrerai due tipi di percorsi –assolutoe relativo. Ma qual è la differenza? Un percorso assoluto inizia con un qualificatore, come C:\demo o HKCU:\Software. Al contrario, un percorso relativo non ha un qualificatore, come .\demo o \folder1\folder2.

Il cmdlet Split-Path di PowerShell può aiutarti a identificare un percorso assoluto utilizzando il parametro -IsAbsolute. Per farlo, esegui i comandi seguenti per determinare se il percorso è assoluto.

# Questo percorso è assoluto
Split-Path -Path C:\demo\subfolder1\TestFile_11.txt -IsAbsolute
# Questo percorso è relativo
Split-Path -Path .\demo\subfolder1\TestFile_11.txt -IsAbsolute

Come puoi vedere qui sotto, il parametro -isAbsolute restituisce un valore booleano per indicare se il percorso è assoluto (TRUE) o relativo (FALSE).

Determining if the Path is Absolute

Divisione e Risoluzione dei Percorsi con Caratteri Jolly

Fino a questo punto, i percorsi che hai diviso con il cmdlet Split-Path non devono essere necessariamente esistenti. Che il percorso esista o meno, questo cmdlet lo dividerà e ti darà il risultato.

Ma il cmdlet Split-Path di PowerShell ha un altro parametro chiamato -Resolve. Questo parametro ti consente di risolvere gli elementi che sono referenziati da caratteri jolly. E se utilizzerai questo parametro, il percorso che dividerai e gli elementi al suo interno devono già esistere.

Ad esempio, per restituire gli elementi corrispondenti all’estensione del file *.txt, esegui il comando seguente. Il parametro -Leaf assicura che il cmdlet restituisca solo gli elementi e non i contenitori genitori.

Il carattere jolly (*) rappresenta uno o più caratteri da corrispondere, mentre (?) rappresenta un singolo carattere jolly.

Split-Path -Path C:\demo\subfolder1\*.txt -Leaf -Resolve

Il risultato qui sotto elenca i file TestFile_11.txt fino a TestFile_20.txt. Questi file hanno tutti corrisposto all’estensione del nome file .txt.

Resolving matching filenames

Per risolvere una corrispondenza di singoli caratteri, sostituisci l’asterisco (`*`) con il jolly (`?`), come nel comando seguente.

Split-Path -Path C:\demo\subfolder1\TestFile_2?.txt -Resolve -Leaf

L’output qui sotto mostra solo il file TestFile_20.txt perché questo è l’unico file che corrispondeva.

Resolving matching single character

Se il percorso contiene un carattere di escape, come l’accento grave (“`”), racchiudi il percorso tra virgolette singole per risolvere il percorso. Ad esempio, il comando sotto suddivide e risolve un percorso contenente un carattere di escape.

Split-Path -Path 'C:\demo\subfolder1\dir`n\TestFile_2?.txt' -Leaf -Resolve
Splitting and Resolving a Path with Escape Characters

Come prova di concetto, se non racchiudi quel percorso tra virgolette singole, il comando restituirà un errore che il percorso non esiste. Lo stesso errore si verifica se si utilizzano virgolette doppie al suo posto.

Split-Path -Path C:\demo\subfolder1\dir`n\TestFile_2?.txt -Leaf -Resolve
Split-Path -Path "C:\demo\subfolder1\dir`n\TestFile_2?.txt" -Leaf -Resolve
Resolving a Path without enclosing single quotation marks

Conclusione

Il cmdlet PowerShell Split-Path è uno strumento indispensabile per gli amministratori di sistema e gli utenti. Questo tutorial mirava a insegnarti come il cmdlet Split-Path possa suddividere qualsiasi percorso dato e restituire elementi specifici in base al parametro utilizzato.

Hai mai utilizzato Split-Path nei tuoi compiti? In caso contrario, questo tutorial ti ha convinto ad utilizzarlo nei tuoi compiti manuali o di automazione? O conosci un altro modo per suddividere i percorsi meglio di quanto PowerShell Split-Path possa fare?

Source:
https://adamtheautomator.com/powershell-split-path/