Finden von (fast) gleichen Dateinamen, Ändern von Dateinamen
Ich habe leider mal wieder eine etwas knifflige Sache.
Aktuell suche ich in Verzeichnissen nach Dateien mit gleichen Namen und erstelle daraus eine neue Datei.
In meinem Fall suche ich nach _used.dat Dateien die vom Dateinamen genauso sind, wie xlsb-Dateien.
Nun kommt aber folgendes Problem dazu, dass in den neuen .used-dat Dateien Änderungen hinzugekommen sind, die aber nun wieder entsprechend angepasst werden sollen, damit am Ende wieder das (wie bisher) selbe Ergebnis bei rauskommt.
Mit anderen Worten.
Bisher gibt es z.B. in einem Verzeichnis 2 Dateien:
output_2 (file 2) (2238269xxx) (2_3d) (19270250)_USED.DAT
output_2 (file 2) (2238269xxx) (2_3d) (19270250).xlsb
In dem Code unten sucht er nach den Dateien, vergleicht diese und wenn beide denselben Namen haben, wird entsprechend daraus eine (neue) xlsb-Datei gemacht.
Nun aber hat sich die Ausgabe geändert. Die Dateien sehen nun so aus:
output-2 (file 2) (2238269xxx) (2-3d) (19270250) (05282014)_USED.DAT
output_2 (file 2) (2238269xxx) (2_3d) (19270250).xlsb
Wie man sieht, unterscheiden sich die beiden Dateien nun soweit, dass in der neuen "dat-Datei" das (-)-Zeichen gegen einen (_) getauschen werden muss und dazu die letzte Klammer mit der Zahl wieder raus muss.
Da die Zahl in der Klammer sich ändert, wäre eine Löschung vor dem "_used.dat" bis zum Ende der nächsten Klammer perfekt.
Kann mir hier jemand helfen ?
Aktuell suche ich in Verzeichnissen nach Dateien mit gleichen Namen und erstelle daraus eine neue Datei.
In meinem Fall suche ich nach _used.dat Dateien die vom Dateinamen genauso sind, wie xlsb-Dateien.
Nun kommt aber folgendes Problem dazu, dass in den neuen .used-dat Dateien Änderungen hinzugekommen sind, die aber nun wieder entsprechend angepasst werden sollen, damit am Ende wieder das (wie bisher) selbe Ergebnis bei rauskommt.
Mit anderen Worten.
Bisher gibt es z.B. in einem Verzeichnis 2 Dateien:
output_2 (file 2) (2238269xxx) (2_3d) (19270250)_USED.DAT
output_2 (file 2) (2238269xxx) (2_3d) (19270250).xlsb
In dem Code unten sucht er nach den Dateien, vergleicht diese und wenn beide denselben Namen haben, wird entsprechend daraus eine (neue) xlsb-Datei gemacht.
Nun aber hat sich die Ausgabe geändert. Die Dateien sehen nun so aus:
output-2 (file 2) (2238269xxx) (2-3d) (19270250) (05282014)_USED.DAT
output_2 (file 2) (2238269xxx) (2_3d) (19270250).xlsb
Wie man sieht, unterscheiden sich die beiden Dateien nun soweit, dass in der neuen "dat-Datei" das (-)-Zeichen gegen einen (_) getauschen werden muss und dazu die letzte Klammer mit der Zahl wieder raus muss.
Da die Zahl in der Klammer sich ändert, wäre eine Löschung vor dem "_used.dat" bis zum Ende der nächsten Klammer perfekt.
Kann mir hier jemand helfen ?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
$DATDateien = Get-ChildItem -Path $path -include *_USED.DAT -recurse
$XLSBDateien = Get-ChildItem -Path $path -include *.xlsb -recurse
$excelFiles = ForEach ($xls in $DATDateien)
{
ForEach ($xlsb in $XLSBDateien)
{
If ($xls.BaseName -eq $xlsb.BaseName)
{
$xlsb
}
}
}
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 252010
Url: https://administrator.de/forum/finden-von-fast-gleichen-dateinamen-aendern-von-dateinamen-252010.html
Ausgedruckt am: 14.04.2025 um 17:04 Uhr
8 Kommentare
Neuester Kommentar
Hi,
weis nicht ob ich es richtig interpretiert habe aber das ließe sich so machen:
Grüße Uwe
weis nicht ob ich es richtig interpretiert habe aber das ließe sich so machen:
wird entsprechend daraus eine (neue) xlsb-Datei gemacht.
was du damit meinst, ob umbenennen oder kopieren konnte ich nicht interpretieren. denke aber mit unten stehendem Code solltest du dein Problem lösen können.1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
$path = 'c:\deinPfad'
dir $path -Include '*.xlsb' -Recurse | %{
# passende DAT Datei suchen
$dat = dir "$path\$($_.BaseName.Replace('_','-'))*_USED.DAT" -Recurse | select -First 1
# wenn eine zur xlsb-Datei passende DAT-Datei gefunden wurde
if ($dat){
write-host "Für folgende Datei wurde eine USED-DAT gefunden:"$_.FullName
}
}
für mein Script benötigst du nur eine Schleife, nämlich nur über die xlsb-Dateien.
Diese Zeile:
sucht dann dazu die passende DAT zur xlsb heraus. Du machst es bei dir doppelt gemoppelt mit zwei Schleifen, die sind dann überflüssig!
Diese Zeile:
$dat = dir "$path\$($_.BaseName.Replace("_","-"))*_USED.DAT" -Recurse | select -First 1
Zitat von @internet2107:
Wichtig ist also, dass NUR!! die letzte Klammer und deren Inhalt von hinten aus gerechnet entfernt wird.
Nehme ich dein aktuelles Script, wird auch die (routine) oder das (k) mit entfernt???
Nein das tat es nicht Wichtig ist also, dass NUR!! die letzte Klammer und deren Inhalt von hinten aus gerechnet entfernt wird.
Nehme ich dein aktuelles Script, wird auch die (routine) oder das (k) mit entfernt???
Und letztendlich soll nicht die DAT-Datei weiter verarbeitet werden, sondern nur die XLSB.
alle klar, dann sag das doch gleich Ist oben nach deinen Wünschen angepasst ...