2016-05-18 7 views
3

Ich arbeite an einem Skript, das ein XML-Dokument für die weitere Automatisierung erstellen wird. Unter anderem sollten die dropDir und fileName Parameter sein. Aber da diese beide benötigt werden und die Datei wird immer in der dropDir sein.Parsing eines Dateinamens und Verzeichnisses von einem einzigen Parameter

Ich frage mich, ob es eine Möglichkeit gibt, dass ich diese beiden Parameter in einem einzigen Parameter kombinieren kann, und dann einfach die Datei aus der einzelnen Zeichenfolge analysieren?

So würde zum Beispiel der Benutzer das Skript aufrufen:

.\iAmAScript.ps1 -path C:\prodfiles\settings.xml

intern in iAmAScript, würde es die folgenden Aktionen logisch nehmen:

If (![System.IO.File]::Exists($path)){ 
    New-Item $path -type file 
    $dropLoc = $path.<some method returning C:\prodfiles\> 
    $fileName = $path.<some method returning settings.xml> 
} 

Ich bin nur nicht ganz sicher, Wie dies im Zusammenhang mit Powershell zu tun ist, ist der beste Weg zu versuchen, einen Weg zu finden, um die LastIndexOf Methode innerhalb Powershell zu verwenden, um alles links von der letzten abzuschneiden?

Antwort

2

Sie Split-Path verwenden können, um diese Komponenten zu erhalten:

$file = $path | Split-Path -Leaf 
$dir = $path | Split-Path -Parent 

Die .NET-Methoden sind wie folgt:

$file = [System.IO.Path]::GetFileName($path) 
$dir = [System.IO.Path]::GetDirectoryName($path) 

Sie auch das Einzelteil erhalten könnte und seine Eigenschaften verwenden:

$item = Get-Item -Path $path 
$item.Name   # the file 
$item.DirectoryName #the directory 

Dieses Objekt kann an die meisten Cmdlets übergeben werden, die Dateiparameter akzeptieren, und es stellt das Hinzufügen zur Verfügung Methoden. Um dies zu tun, muss die Datei jedoch zuerst existieren, also müssen Sie sie erstellen und dann das Element holen, aber das könnte später in Ihrem Skript nützlich sein.

+0

Heiliger Mist, der viel zu einfach ist. –

Verwandte Themen