LEDZEPPELIN 0 Geschrieben 9. Dezember 2020 Melden Teilen Geschrieben 9. Dezember 2020 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. Zitieren Link zu diesem Kommentar
LEDZEPPELIN 0 Geschrieben 9. Dezember 2020 Autor Melden Teilen Geschrieben 9. Dezember 2020 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. Zitieren Link zu diesem Kommentar
BOfH_666 577 Geschrieben 9. Dezember 2020 Melden Teilen Geschrieben 9. Dezember 2020 (bearbeitet) 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 9. Dezember 2020 von BOfH_666 Zitieren Link zu diesem Kommentar
LEDZEPPELIN 0 Geschrieben 9. Dezember 2020 Autor Melden Teilen Geschrieben 9. Dezember 2020 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) } Zitieren Link zu diesem Kommentar
BOfH_666 577 Geschrieben 9. Dezember 2020 Melden Teilen Geschrieben 9. Dezember 2020 (bearbeitet) 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 9. Dezember 2020 von BOfH_666 Zitieren Link zu diesem Kommentar
LEDZEPPELIN 0 Geschrieben 9. Dezember 2020 Autor Melden Teilen Geschrieben 9. Dezember 2020 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. Zitieren Link zu diesem Kommentar
BOfH_666 577 Geschrieben 9. Dezember 2020 Melden Teilen Geschrieben 9. Dezember 2020 (bearbeitet) 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 9. Dezember 2020 von BOfH_666 Zitieren Link zu diesem Kommentar
testperson 1.707 Geschrieben 9. Dezember 2020 Melden Teilen Geschrieben 9. Dezember 2020 Ein wenig OT: Heutzutage würde ich allerdings aus ... if(!(Test-Path -Path $Test.FullName.Substring(0, $AnzahlZeichen))){ ... ... if(-not (Test-Path -Path $Test.FullName.Substring(0, $AnzahlZeichen) -PathType Container)){ ... machen. :) Zitieren Link zu diesem Kommentar
LEDZEPPELIN 0 Geschrieben 9. Dezember 2020 Autor Melden Teilen Geschrieben 9. Dezember 2020 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? Zitieren Link zu diesem Kommentar
BOfH_666 577 Geschrieben 9. Dezember 2020 Melden Teilen Geschrieben 9. Dezember 2020 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 ) } Zitieren Link zu diesem Kommentar
LEDZEPPELIN 0 Geschrieben 9. Dezember 2020 Autor Melden Teilen Geschrieben 9. Dezember 2020 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> Zitieren Link zu diesem Kommentar
daabm 1.366 Geschrieben 9. Dezember 2020 Melden Teilen Geschrieben 9. Dezember 2020 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... Zitieren Link zu diesem Kommentar
BOfH_666 577 Geschrieben 10. Dezember 2020 Melden Teilen Geschrieben 10. Dezember 2020 (bearbeitet) 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? Richtig - "D:\Test". Und das ist der Grund, warum nicht das passiert, was Du erwartest. bearbeitet 10. Dezember 2020 von BOfH_666 Zitieren Link zu diesem Kommentar
LEDZEPPELIN 0 Geschrieben 10. Dezember 2020 Autor Melden Teilen Geschrieben 10. Dezember 2020 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? Zitieren Link zu diesem Kommentar
Dukel 455 Geschrieben 10. Dezember 2020 Melden Teilen Geschrieben 10. Dezember 2020 Gibt es irgendeinen trenner? Sind immer am Ende Zahlen? Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.