Jump to content

PowerShell Dateiname vergleichen und umbenennen


Go to solution Solved by awe,
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Recommended Posts

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

Link to post

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

Link to post

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

 

Edited by awe
Link to post

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?

 

Link to post

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,...

Edited by Dukel
Link to post

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

Edited by awe
Link to post
  • Solution

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

  • Like 1
Link to post
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.

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

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...