an34mem
Goto Top

PowerShell und GetFileNameWithoutExtension

Hallo.

Wie bitte funktioniert das mit PowerShell?
OK -----
egal.exe -import "%~1" "%~dpn1.xyz"
ENDE -----

PowerShell:
Invoke-Expression "egal.exe" -import "$i" "$i.xyz"

Zum Problem:
"$i" = Ist eine Datei / Wert mit den Namen: "test.txt"
"$i.xyz" = Eine Datei auf der FP mit den Namen: "test.xyz", die verwendet werden soll

Führt man den Befehl aus erscheint die Fehlermeldung:
Error opening file test.txt.xyz: Requested URL is not valid or cannot be found

Dies ist nachvollziehbar, da die Extension .txt mit übergeben wurde,
und der Dateiname auf der FP nur "test.xyz" heißt.

Die Möglichkeiten mit:
[System.IO.Path]::GetFileNameWithoutExtension
[System.IO.Path]::GetExtension

habe ich zwar gefunden, aber irgendwie will das nicht funktionieren.

Was ist nicht richtig, bzw. wie wird "%~dpn1" in PowerShell verwendet?

Danke für eure Hilfe.

Content-ID: 640512

Url: https://administrator.de/contentid/640512

Ausgedruckt am: 19.11.2024 um 05:11 Uhr

mbehrens
mbehrens 14.01.2021 um 22:11:45 Uhr
Goto Top
Zitat von @AN34Mem:

Zum Problem:
"$i" = Ist eine Datei / Wert mit den Namen: "test.txt"

$i ist ein String und keine Datei.

Was ist nicht richtig, bzw. wie wird "%~dpn1" in PowerShell verwendet?

Was spricht gegen
[System.IO.Path]::GetFileNameWithoutExtension($i)

oder
$i.Split('\')[-1] -replace '\.\w+$'  

Wenn $i eine Datei wäre, könnte auch
$i.BaseName

zielführend sein.
rubberman
rubberman 14.01.2021 aktualisiert um 23:19:58 Uhr
Goto Top
Wenn nur die Dateiendung weggeschnitten werden soll, der Pfad aber erhalten bleiben soll (analog ~dpn), dann vielleicht so:
$fullname = "C:\foo\bar.ext"  
$dpn = [System.IO.Path]::ChangeExtension($fullname,[NullString]::Value)
Das sieht jetzt logischerweise noch eher C#-like aus ... ¯\_(ツ)_/¯ Bin aber kein PowerShell Profi, vielleicht gibt's auch eine schönere Lösung.
Kannst da statt [NullString]::Valueauch gleich die neue Dateiendung reinhängen face-wink

Steffen
AN34Mem
AN34Mem 15.01.2021 um 12:13:56 Uhr
Goto Top
Danke euch beiden (mbehrens + rubberman) für die jeweiligen Tipps,

Wahrscheinlich gibt es mehrere Lösungswege.
In meinem Fall konnte ich das Problem hiermit lösen:

Beispiel:
$string1 = $i.DirectoryName
$string2 = "\"
$string3 = $i.Basename
$string4 = ".xyz"
$ok = "$string1$string2$string3$string4"

Invoke-Expression "egal.exe" -import "$i" "$ok"

Ein größeres Problem war, dass die Text Datei "UCS-2 LE BOM" hatte (nicht darauf geachtet).
Zwingend war UTF-8, oder UTF-8-BOM sonst klappte der Import auch nicht.
Falls jemand auch so ein Problem hat, sollte das zwingend (Empfehlung) überprüft werden.

Gruß an euch ALLEN!