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-Key: 640512

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

Printed on: April 19, 2024 at 09:04 o'clock

Member: mbehrens
mbehrens Jan 14, 2021 at 21:11:45 (UTC)
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.
Member: rubberman
rubberman Jan 14, 2021 updated at 22:19:58 (UTC)
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
Member: AN34Mem
AN34Mem Jan 15, 2021 at 11:13:56 (UTC)
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!