Jump to content

Dateien mit gleichen Buchstaben am Anfang in neu zu erzeugenden Ordner verschieben


Recommended Posts

Hallo,

 

ich möchte Dateien die am Namensanfang gleich sind in einen neu zu erzeugenden Ordner verschieben.

Beispiel:

Auto1

Auto2

Auto3

Sollen alle in Ordner Auto verschoben werden und dieser automatisch neu erzeugt werden.

 

Mit den Scripten kriege ich es nicht hin da ich ja keine Buchstaben löschen will.

Wahrscheinlich mache ich bei der Anpassung etwas verkehrt.

Wie würde das aussehen wenn der Ursprungsordner d:\Test heißt und die neuen Ordner in diesem Ordner erzeugt werden sollen?

 

Vielen Dank.

Link to post

Ich denke ich sollte meine Angaben noch etwas genauer machen.

 

Es handelt sich um Dateien die am Anfang geich sind und dann zb noch -bla oder - okay im weiteren Namen führen.

Außerdem sind es unterschiedliche Dateitypen wie .ts, .nfo, .jpg etc.

 

Man müßte also festlegen können bis zu welchem Buchstaben sie geprüft und dann zusammen in den sleben Ordner verschoben werden.

Dieser Ordner muss natürlich noch angelegt werden mit dem Namen der bei allen Dateien identisch ist.

 

Link to post

Was gefällt Dir denn nicht an dem Script-Beispiel im anderen Thread? Wenn Du die Anzahl der benutzten Stellen des Dateinamens variabel machen möchtest, machst Du aus der dort fest vergebenen Zahl (ich meine die "19") eine Variable und füllst diese vorher, wie Du das für richtig hältst.

 

Edit: Ich beziehe mich übrigens auf Jans Powershell-Script-Beispiel.  ;-) 

Edited by BOfH_666
Link to post

Da ich nicht viel Ahnung habe, hbe ich es versucht umzuschreiben, aber es funktioniert nicht.

Sah so aus.

 

foreach ( $Test in Get-ChildItem -Path D:\Test -File ) { if (!(Test-Path -Path $Test.FullName.Substring(0,7))) { New-Item -ItemType Directory -Path $Test.FullName.Substring(0,7) } Move-Item $Test.FullName $Rechnung.FullName.Substring(0,7) }

Link to post

OK, bitte Code als Code formatieren.

 

Was ich meinte war, statt die "7" überall direkt hinzuschreiben, eine Variable zu benutzen  ... etwa so:

$AnzahlZeichen = 7
foreach ( $Test in Get-ChildItem -Path D:\Test -File ) { 
    if (!(Test-Path -Path $Test.FullName.Substring(0, $AnzahlZeichen ))) { 
        New-Item -ItemType Directory -Path $Test.FullName.Substring(0, $AnzahlZeichen ) 
    } 
    Move-Item -Path $Test.FullName -Destination $Test.FullName.Substring(0, $AnzahlZeichen ) 
}

Dann brauchst Du, wenn Du eine andere Anzahl an Zeichen benutzen möchtest, den Code nur an einer Stelle zu ändern.

vor 18 Minuten schrieb LEDZEPPELIN:

aber es funktioniert nicht.

... ist keine valide Beschreibung. Was funktioniert nicht? 

 

Edit:  ... und ist mir jetz grad erst aufgefallen ... Du hast beim Move-Item Befehl als -Destination $Rechnung benutzt, obwohl Du in Deinem Code $Rechnung in $Test geändert hattest!!!  ;-) 

Edited by BOfH_666
Link to post
PS C:\Windows\system32> $AnzahlZeichen = 7
foreach ( $Test in Get-ChildItem -Path D:\Test -File ) { 
    if (!(Test-Path -Path $Test.FullName.Substring(0, $AnzahlZeichen ))) { 
        New-Item -ItemType Directory -Path $Test.FullName.Substring(0, $AnzahlZeichen ) 
    } 
    Move-Item -Path $Test.FullName -Destination $Rechnung.FullName.Substring(0, $AnzahlZeichen ) 
}
Es ist nicht möglich, eine Methode für einen Ausdruck aufzurufen, der den NULL hat.
In Zeile:6 Zeichen:5
+     Move-Item -Path $Test.FullName -Destination $Rechnung.FullName.Su ...
+     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
    + FullyQualifiedErrorId : InvokeMethodOnNull
 
Es ist nicht möglich, eine Methode für einen Ausdruck aufzurufen, der den NULL hat.
In Zeile:6 Zeichen:5
+     Move-Item -Path $Test.FullName -Destination $Rechnung.FullName.Su ...
+     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
    + FullyQualifiedErrorId : InvokeMethodOnNull
 
Es ist nicht möglich, eine Methode für einen Ausdruck aufzurufen, der den NULL hat.
In Zeile:6 Zeichen:5
+     Move-Item -Path $Test.FullName -Destination $Rechnung.FullName.Su ...
+     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
    + FullyQualifiedErrorId : InvokeMethodOnNull
 
Es ist nicht möglich, eine Methode für einen Ausdruck aufzurufen, der den NULL hat.
In Zeile:6 Zeichen:5
+     Move-Item -Path $Test.FullName -Destination $Rechnung.FullName.Su ...
+     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
    + FullyQualifiedErrorId : InvokeMethodOnNull
 
Es ist nicht möglich, eine Methode für einen Ausdruck aufzurufen, der den NULL hat.
In Zeile:6 Zeichen:5
+     Move-Item -Path $Test.FullName -Destination $Rechnung.FullName.Su ...
+     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
    + FullyQualifiedErrorId : InvokeMethodOnNull
 

 

Das war das Ergebnis gerade.

Link to post
vor 1 Minute schrieb LEDZEPPELIN:

Es ist nicht möglich, eine Methode für einen Ausdruck aufzurufen, der den NULL hat.
In Zeile:6 Zeichen:5
+     Move-Item -Path $Test.FullName -Destination $Rechnung.FullName.Su ...
+     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
    + FullyQualifiedErrorId : InvokeMethodOnNull
 

 

.... siehe meine Antwort von oben ....  Du musst $Rechnung in $Test ändern!!! 

 

... und übrigens, wenn Du 5 gleiche Fehlermeldungen erhältst, genügt es, wenn Du eine davon postest.  ;-) 

Edited by BOfH_666
Link to post

Das war das Ergebnis gerade.

PS C:\Windows\system32> $AnzahlZeichen = 7
foreach ( $Test in Get-ChildItem -Path D:\Test -File ) { 
    if (!(Test-Path -Path $Test.FullName.Substring(0, $AnzahlZeichen ))) { 
        New-Item -ItemType Directory -Path $Test.FullName.Substring(0, $AnzahlZeichen ) 
    } 
    Move-Item -Path $Test.FullName -Destination $Test.FullName.Substring(0, $AnzahlZeichen ) 
}

PS C:\Windows\system32> 

Aber im Ordner ist alles geblieben wie vorher.

Was mache ich falsch?

Link to post

Mit $AnzahlZeichen = 7 und dem Start-Ordner D:\Test kann da auch nicht viel passieren. ;-)  

 

Lass Dir doch einfach mal die Werte ausgeben, mit denen das Script arbeitet. Bestimmt fällt es Dir dann auf.  

$AnzahlZeichen = 7
$StartFolder = 'D:\Test'

foreach ( $Test in Get-ChildItem -Path $StartFolder  -File ) { 
    $Test.FullName
    $Test.FullName.Substring(0, $AnzahlZeichen ) 
}

 

Link to post

Und was sagt mir das?

PS C:\Windows\system32> $AnzahlZeichen = 7
$StartFolder = 'D:\Test'

foreach ( $Test in Get-ChildItem -Path $StartFolder  -File ) { 
    $Test.FullName
    $Test.FullName.Substring(0, $AnzahlZeichen ) 
}
D:\Test\Dateienverschieben.bat
D:\Test
D:\Test\Dateienverschieben.txt
D:\Test
D:\Test\Neues Textdokument (2).txt
D:\Test
D:\Test\Neues Textdokument (3).nfo
D:\Test
D:\Test\Neues Textdokument.txt
D:\Test

PS C:\Windows\system32> 

 

Link to post
vor 3 Stunden schrieb LEDZEPPELIN:

Das war das Ergebnis gerade.


PS C:\Windows\system32> $AnzahlZeichen = 7
foreach ( $Test in Get-ChildItem -Path D:\Test -File ) { 
    if (!(Test-Path -Path $Test.FullName.Substring(0, $AnzahlZeichen ))) { 
        New-Item -ItemType Directory -Path $Test.FullName.Substring(0, $AnzahlZeichen ) 
    } 
    Move-Item -Path $Test.FullName -Destination $Test.FullName.Substring(0, $AnzahlZeichen ) 
}

PS C:\Windows\system32> 

Aber im Ordner ist alles geblieben wie vorher.

Was mache ich falsch?

Wohin sollte das denn auch verschoben werden? $Test.Fullname fängt immer mit C:\Test an, und da liegen die ja schon... Schwerer Denkfehler in der Logik, scheint mir :-)

Nachtrag: Vielleicht hilft es, wenn Du mal erzählst, was das EIGENTLICHE Ziel ist. Du hast oben nicht das Ziel formuliert, sondern schon eine Teillösung, die möglicherweise ungeeignet ist...

Link to post
vor 40 Minuten schrieb LEDZEPPELIN:

Und was sagt mir das?


PS C:\Windows\system32> $AnzahlZeichen = 7
$StartFolder = 'D:\Test'

foreach ( $Test in Get-ChildItem -Path $StartFolder  -File ) { 
    $Test.FullName
    $Test.FullName.Substring(0, $AnzahlZeichen ) 
}
D:\Test\Dateienverschieben.bat
D:\Test

 

Schade. Ich hatte gehofft, dass Du es so erkennen kannst.

 

Du hast also im Ordner "D:\Test" Dateien, deren 7 Anfangsbuchstaben, Du für die Erstellung eines neuen Ordners benutzen möchtest. Die erste Datei ist offenbar "Dateienverschieben.bat" der komplette Pfad der Datei ist "D:\Test\Dateienverschieben.bat". Und von diesem kompletten Pfad - von $Test.FullName, benutzt Du die ersten 7 Zeichen!!!!  Was sind die ersten 7 Zeichen vom kompletten Pfad? :hmmm: Richtig - "D:\Test".  :achtung: Und das ist der Grund, warum nicht das passiert, was Du erwartest.  ;-)

Edited by BOfH_666
Link to post

Also zum Ziel:

 

Ich habe einen Ordner in dem verschiedenen Dattypen mit ähnlichen Namen liegen.

Ziel ist es jetzt Dateien mit x Übereinstimmungen am Anfang des Namens in neu zu erstellende Ordner zu verschieben.

 

Das der Pfad zu den Zeichen dazugehört wußte ich nicht.

 

Mal sehen wie es aussieht wenn ich aus der 7 eine 12 mache.

Hat funktioniert.

Vielen Dank.

 

 

Nur löst es dads Problem leider doch nicht ganz.

Ist aber wahrscheinlich auch nicht machbar.

Ich müßte die Dateien jetz nämlich erst mal vorsortieren nach Länge des Namens den die Ordner haben sollen, also alle Dateien mit gleichem Namen mit einer Länge bis 10 Buchstaben, bis 8 Buchstaben etc.

Diese mwürde ich dann in Extra Ordner legen und dann das Skript mit angepasster Variabler drüberlaufenlassen.

Das ist wahrswcheinlich nicht machbar oder?

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