Jump to content
awe

PowerShell Dateiname vergleichen und umbenennen

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

Share this post


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

Share this post


Link to post
vor 1 Minute schrieb awe:

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

 

Microsoft | About Comparison Operators

https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_comparison_operators?view=powershell-7

 

Du musst den Parameter "-like" benutzen, weil dieser für Strings und nicht für Objekte ist.

Share this post


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

Share this post


Link to post

Hast du Zeile 1 oder irgendeine deiner Zeilen mal in die PowerShell getippt und ausgeführt oder bspw. in der PowerShell ISE ausgeführt?

Share this post


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?

 

Share this post


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

Share this post


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

Share this post


Link to post
vor 9 Minuten schrieb awe:

...  ich lese mich da nochmal mal ein

Das halte ich auch für eine sehr gute Idee ...  ;-)   wenn Du ein bissl Zeit hast, kannst Du es Dir ja vom Erfinder erklären lassen.  Getting Started with PowerShell 3.0   ... ist ein bissl älter, aber die Grundlagen sind immernoch die gleichen. 

Share this post


Link to post

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

Share this post


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.

Share this post


Link to post

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.   Restore formatting

  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.


Werbepartner:



×
×
  • Create New...