Jump to content

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


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

Empfohlene Beiträge

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 zu diesem Kommentar

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 zu diesem Kommentar

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

bearbeitet von BOfH_666
Link zu diesem Kommentar

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 zu diesem Kommentar

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!!!  ;-) 

bearbeitet von BOfH_666
Link zu diesem Kommentar
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 zu diesem Kommentar
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.  ;-) 

bearbeitet von BOfH_666
Link zu diesem Kommentar

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 zu diesem Kommentar

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 zu diesem Kommentar

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 zu diesem Kommentar
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 zu diesem Kommentar
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.  ;-)

bearbeitet von BOfH_666
Link zu diesem Kommentar

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 zu diesem Kommentar
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...