Jump to content

PowerShell Dateiname vergleichen und umbenennen


Direkt zur Lösung Gelöst von awe,
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

Geschrieben

Hallo zusammen

ich bin dabei mir ein PowerShell skript zu basteln welches prüft ob Dateien in einem Ordner die Zeichenfolge "20200720" vorangestellt haben, falls nicht sollte dies vorangestellt werden, also der Dateiname sollte dann "20200720_datei.ods" aussehen. Das Thema PowerShell skript ist für mich noch relativ neu und ich habe mir jetzt mittels viel Nachlese und codebeispielen folgenden Code zusammengebastelt: 

 

$filename Get-ChildItem -Name 

if($filename -ne "20200720*" 
{
rni $_.ToString("20200720") + "_" + $_.Name
}

wenn ich das Script ausführe rührt sich gar nichts - da komme ich jetzt nicht weiter....

Passt der Vergleichsoperator -ne hier nicht, oder mag der keine Wildcats?

 

Vielleicht hat jemand einen Hinweis für mich

 

thx

Geschrieben

Hi,

 

da fehlt einiges und am meisten wohl Grundlagen in Scripting/Programmierung bzw. PowerShell.

 

Schau dir doch als erstes einmal an was ein "Get-ChildItem -Name" liefert und prüfe, ob da neben Dateien auch Ordner bei sind. Da du scheinbar nur *.ods Files möchtest, könntest du dir den "-Filter" Parameter ansehen. Ebenfalls wirst du am "Where" Statement nicht vorbeikommen, um Ordner auszuschließen bzw. mit der "StartsWith()" Funktion den Anfang des Dateinamens zu prüfen.

 

Sobald du die passende Code-Zeile hast, schauen wir weiter ;).

 

Gruß

Jan

Geschrieben (bearbeitet)

Danke für die Tipps, ich habe den code nun wiefolgt umgebaut:

 

$filename Get-ChildItem -Filter *.ods -Recurse 
$auswahl Where-Object -NotLike $filename.StartsWith("20200720")

rni $auswahl.ToString("20200720") + "_" + $_.Name

Meine Überlegung:

mit Zeile 1 selektiere ich alle .ods files (auch in den Unterordnern) und speichere diese in der Variable $filename

die Variable $auswahl soll dann aus der Variable $filename alle dateinamen speichern die nicht mit 20200720 beginnen

diesen Dateinamen würde ich dann 20200720_ voranstellen

 

bearbeitet von awe
Geschrieben

sorry, da gabs jetzt irgendein anderes Problem.

Natürlich kommt ein Fehler:

Unerwartetes Token "Get-ChildItem" in Ausdruck oder Anweisung.
In C:\Users\xxxx\ren_script_5.ps1:2 Zeichen:10
+ $auswahl Where-Object -NotLike $filename.StartsWith("20200720")
+          ~~~~~~~~~~~~
Unerwartetes Token "Where-Object" in Ausdruck oder Anweisung.
    + CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException
    + FullyQualifiedErrorId : UnexpectedToken

was sagt das "unerwartete token" aus?

 

Geschrieben (bearbeitet)

Da fehlt mindestens ein gleichzeichen.

$filename = ...

Und eine Pipe.

$auswahl | ...

 

Außerdem hat $filename nichts mit $Auswahl zu tun. Was soll den wo stehen?

 

Du solltest dir mal die Grundlagen aneignen. Pipes, Variablen,...

bearbeitet von Dukel
Geschrieben (bearbeitet)

ui ja danke - habs gleich korrigiert

jetzt kommt

Fehler beim Aufrufen der Methode, da [System.IO.FileInfo] keine Methode mit dem Namen "startswith" enthält.
In C:\Users\ren_script_5.ps1:2 Zeichen:1
+ $auswahl = Where-Object -NotLike $filename.StartsWith("20200720")
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
    + FullyQualifiedErrorId : MethodNotFound
 
Es ist nicht möglich, eine Methode für einen Ausdruck aufzurufen, der den NULL hat.
In C:\Users\ren_script_5.ps1:4 Zeichen:1
+ rni $auswahl.ToString("20200720") + "_" + $_.Name
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
    + FullyQualifiedErrorId : InvokeMethodOnNull

OK danke - ich lese mich da nochmal mal ein

bearbeitet von awe
  • Beste Lösung
Geschrieben

Hallo

der vollständigkeit halber möchte ich hier noch meine funktionierende Lösung welche ich nun zusammengebastelt habe teilen: 

Get-ChildItem -Path C:\Users\xxxxxx -Recurse -Exclude [0-9]* -Filter *.ods |
    foreach { Rename-Item $_.FullName ($_.CreationTime.ToString("yyyy-MM-dd") + "_" + $_.Name)}

Vielen Dank für eure Tipps

Geschrieben
vor 15 Stunden schrieb awe:

Hallo

der vollständigkeit halber möchte ich hier noch meine funktionierende Lösung welche ich nun zusammengebastelt habe teilen: 


Get-ChildItem -Path C:\Users\xxxxxx -Recurse -Exclude [0-9]* -Filter *.ods |
    foreach { Rename-Item $_.FullName ($_.CreationTime.ToString("yyyy-MM-dd") + "_" + $_.Name)}

Vielen Dank für eure Tipps

Theoretisch, bzw. wenn ich es richtig verstanden habe, schließt du hier zu viel aus. Eine Datei "1Test.ods" würde bspw. durchrutschen.

Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...