Möchte nur den Dateinamen - ohne Endung

markKostmann

Newbie
Registriert
Nov. 2022
Beiträge
6
Hallo zusammen,

ich arbeite auf einem Windows System und lasse mit einer Schleife alle Bild-Dateien aus einem Folder anzeigen. Nun brauche ich aber nur den Namen der Datei, weil ich mit den Dateien weiter arbeiten möchte.

Habe folgendes gemacht:
foreach ($file in (gci c:/images/* )) {echo "${file}"};
Nun wäre es toll, wenn ich nur die Namen ohne die Datei-Dendungen bekommen würde. Habe auch schon folgendes
ausprobiert - allerdings ohne Erfolg.

Vielen Dank

LG Mark
 
Je nach Datei solltest du am ersten gefundenen Punkt splitten, z.B. für foo.tar.gz.
Wenn du allerdings Punkte im Dateinamen (nicht Endung) selbst hast, wird's schwierig.

Hier gibt's eine Reihe von Beispielen in Batch: https://stackoverflow.com/a/54963037
(In den anderen Antworten gibt's auch was für PowerShell)
 
Ich habe nur ".jpeg" und ".png" Dateien. Auf stackoverflow gab es für mich keine Lösungen
 
System.IO.FileInfo hat BaseName als Property. Einfach mal mit Get-Member bei Objekten arbeiten.
 
  • Gefällt mir
Reaktionen: Iqra und Korben2206
nur als Hinweis, wie ich das in Perl (sowas mache ich i.d.R. immer in Perl ;) ) machen würde:
den String per split() mit "." als Trennzeichen in ein Array aufteilen und dann kannst du ganz einfach das letzte Element des Arrays "weglassen".

ich gehe mal davon aus, dass man das auf ähnliche Weise auch in PS, VBA oder sonstwas machen kann
 
  • Gefällt mir
Reaktionen: JUK-Bavaria
Du musst dich daran gewöhnen das Powershell objektorientiert ist, d.h. alles was man Werten zurückbekommt sind Objekte mit Eigenschaften (Properties) und Methoden. Mit dem von @Yuuri erwähnten Befehl Get-Member kann man sich das für jedes Objekt anschauen.
z.B. über
PowerShell:
$file | Get-Member
oder
PowerShell:
Get-member -InputObject $file

PowerShell:
PS C:\> get-member -InputObject $file

   TypeName: System.IO.FileInfo

Name                      MemberType     Definition
----                      ----------     ----------
Target                    AliasProperty  Target = LinkTarget
LinkType                  CodeProperty   System.String LinkType{get=GetLinkType;}
Mode                      CodeProperty   System.String Mode{get=Mode;}
ModeWithoutHardLink       CodeProperty   System.String ModeWithoutHardLink{get=ModeWithoutHardLink;}
AppendText                Method         System.IO.StreamWriter AppendText()
CopyTo                    Method         System.IO.FileInfo CopyTo(string destFileName), System.IO.FileInfo CopyTo(str…
Create                    Method         System.IO.FileStream Create()
CreateAsSymbolicLink      Method         void CreateAsSymbolicLink(string pathToTarget)
CreateText                Method         System.IO.StreamWriter CreateText()
Decrypt                   Method         void Decrypt()
Delete                    Method         void Delete()
Encrypt                   Method         void Encrypt()
Equals                    Method         bool Equals(System.Object obj)
GetHashCode               Method         int GetHashCode()
GetLifetimeService        Method         System.Object GetLifetimeService()
GetObjectData             Method         void GetObjectData(System.Runtime.Serialization.SerializationInfo info, Syste…
GetType                   Method         type GetType()
InitializeLifetimeService Method         System.Object InitializeLifetimeService()
MoveTo                    Method         void MoveTo(string destFileName), void MoveTo(string destFileName, bool overw…
Open                      Method         System.IO.FileStream Open(System.IO.FileMode mode), System.IO.FileStream Open…
OpenRead                  Method         System.IO.FileStream OpenRead()
OpenText                  Method         System.IO.StreamReader OpenText()
OpenWrite                 Method         System.IO.FileStream OpenWrite()
Refresh                   Method         void Refresh()
Replace                   Method         System.IO.FileInfo Replace(string destinationFileName, string destinationBack…
ResolveLinkTarget         Method         System.IO.FileSystemInfo ResolveLinkTarget(bool returnFinalTarget)
ToString                  Method         string ToString()
PSChildName               NoteProperty   string PSChildName=VdhCoAppSetup-1.6.3.exe
PSDrive                   NoteProperty   PSDriveInfo PSDrive=D
PSIsContainer             NoteProperty   bool PSIsContainer=False
PSParentPath              NoteProperty   string PSParentPath=Microsoft.PowerShell.Core\FileSystem::D:\temp
PSPath                    NoteProperty   string PSPath=Microsoft.PowerShell.Core\FileSystem::D:\temp\VdhCoAppSetup-1.6…
PSProvider                NoteProperty   ProviderInfo PSProvider=Microsoft.PowerShell.Core\FileSystem
Attributes                Property       System.IO.FileAttributes Attributes {get;set;}
CreationTime              Property       datetime CreationTime {get;set;}
CreationTimeUtc           Property       datetime CreationTimeUtc {get;set;}
Directory                 Property       System.IO.DirectoryInfo Directory {get;}
DirectoryName             Property       string DirectoryName {get;}
Exists                    Property       bool Exists {get;}
Extension                 Property       string Extension {get;}
FullName                  Property       string FullName {get;}
IsReadOnly                Property       bool IsReadOnly {get;set;}
LastAccessTime            Property       datetime LastAccessTime {get;set;}
LastAccessTimeUtc         Property       datetime LastAccessTimeUtc {get;set;}
LastWriteTime             Property       datetime LastWriteTime {get;set;}
LastWriteTimeUtc          Property       datetime LastWriteTimeUtc {get;set;}
Length                    Property       long Length {get;}
LinkTarget                Property       string LinkTarget {get;}
Name                      Property       string Name {get;}
BaseName                  ScriptProperty System.Object BaseName {get=if ($this.Extension.Length -gt 0){$this.Name.Remo…
VersionInfo               ScriptProperty System.Object VersionInfo {get=[System.Diagnostics.FileVersionInfo]::GetVersi…
 
Lösung

Hallo zusammen, hier möchte ich meine Lösung präsentieren. Mein Ziel war es alle Bilder in das neue Google webp Format zu wandeln. Zuerst hatte ich ein Programm geladen, mit dem die Umwandlung der Bilder realisiert werden kann:


Dort war ich in der Liste ganz nach unten gescrollt und hatte mir die aktuellste Windows Version herunter geladen. Mit dem (Windows)Terminal war ich dann in den entsprechenden bin-folder gegangen. Dort hatte ich dann den Befehl:

foreach ($file in (gci c:/images/* )) {.\cwebp -q 1 "$file" -o "${file}.webp"; }

ausgeführt, der alle Bilder in das entsprechende Format umgewandelt hatte. Den basename brauchte ich dann doch nicht. Die Bilder sind jetzt um den Faktor 3,3 kleiner.



LG Mark
 
  • Gefällt mir
Reaktionen: Korben2206 und SR388
Zurück
Oben