Batch verschieben von Dateien deren Namen einen von vielen Strings (aus Datei) enthält

IvyN

Newbie
Registriert
Mai 2019
Beiträge
4
Hallo zusammen,

ich versuche eine Batch zu schreiben, aber da ich hier keine Erfahrung habe, komme ich jetzt nicht weiter.
Ausgangszustand:
Ich habe ein Verzeichnis (f:\temp) mit vielen Dateien, die ungefähr so benannt sind:
xxx-yyy_Apfel_zzzz.pdf
aaa-bbb_Birne_ccc.pdf
qqq-www_Kiwi_eee.pdf

Nun habe ich eine Datei, die mir vorgibt, welche dieser Dateien in ein anderes Verzeichnis verschoben werden sollen.
Die Datei (Test.txt) enthält
Apfel
Birne

Also sollten die ersten zwei Dateien verschoben werden und die Kiwi-Datei nicht.

Wenn meine Dateien nur Apfel, Birne und Kiwi heißen würden, dann könnte ich das glaub ich erreichen mittels
for /f %%a in (Test.txt) do move "%%a" "f:\temp\Zielverzeichnis"

Aber wie krieg ich das hin, wenn Apfel doch nur ein Teil des Dateinamens ist?
Gibt's da irgendwelche Wildcard-Zeichen, die man verwenden kann? Und wenn ja, dann wie?

Sorry für die vielleicht blöde Frage, aber ich brauche sowas zum ersten (und wahrscheinlich einzigen) Mal und hab wenig Zeit, um das richtig zu lernen.

Wäre ganz toll, wenn mir jemand helfen könnte.
Ganz lieben Dank im Voraus
Ivy
 
Beginnt der gesuchte Teilstring immer an Position 9 oder ist die Position variabel? Ist der erste Unterstrich immer vor dem gesuchten Teilstring und der nächste dahinter?

Je nach den Antworten kann man einen Teilstring vergleichen, mit Token arbeiten oder findstr verwenden ... (wobei findstr natürlich unabhängig von den Antworten immer geht)
 
Das geht imho am besten mit der eingebauten bash von Windows 10 in der WSL (Windows Subsystem für Linux).
$> cd /mnt/c/users/Ivyn/Documents $> for i in $(cat Test.txt) ; do mv *${i}* /anderes/unterverzeichnis; done
oder so ähnlich (pseudo).
 
Hallo und erstmal vielen Dank für die Antworten.

Jetzt muss ich zunächst mal gestehen, dass ich überhaupt nicht auf die Idee gekommen bin, dass die Position oder die Anzahl der Unterstriche von Bedeutung sein könnten und dass deshalb sind die Dateinamen nur beispielhaft von mir gewählt worden. Den ganz genauen Aufbau der Dateinamen weiß ich aktuell nicht, weil sie ziemlich lang sind und aus vielen Teilen bestehen, kann ich aber am Montag bei der Arbeit nachschauen und würde mich dann gerne nochmal melden.
Teilstring hört sich gut an, Token sagt mir leider nichts und findstr klingt auch gut für mich, das werde ich auf jeden Fall mal googeln, wenn das unabhängig von Position und Anzahl geht.

Cygwin soll was für Linux-Experten sein und das bin ich beim besten Willen nicht, nicht mal Linux-Anfänger.

Zum Thema Hausaufgaben: Aus dem Alter bin ich (leider) schon sehr lange raus und PowerShell sagt mir (vermutlich deshalb) gar nichts. DOS kenne ich noch aus meiner Jugend, das war die Zeit vor den Smartphones, vor dem Internet und sogar vor Windows.
Ich möchte mir gerne die Arbeit vereinfachen, indem ich eine große Anzahl von pdf-Dateien anhand einer Eingabedatei mit Mitgliedsnummern (Im Beispiel Apfel, Birne usw.) auseinander sortieren möchte.

Ich suche eine einfache schnelle Lösung, bin gerne bereit selbst zu googeln und auch ordentlich was zu lesen, möchte aber keine Programmiersprache vollständig lernen, um das zu erreichen.

Ich wünsche Euch ein schönes Wochenende!
 
  • Gefällt mir
Reaktionen: tony_mont4n4
Keinen Kumpel, der ITler ist und programmieren kann? Der macht Dir das für eine Einladung zum leckeren Essen in ein paar Minuten. ;)

Ach so, bevor Du irgendwie mit den Dateien rummachst, immer vorher Backups machen!
 
  • Gefällt mir
Reaktionen: tony_mont4n4
PowerShell:
$content = Get-Content "c:\content.txt"

foreach ($eintrag in $content) {
    Move-Item "c:\tmp\*$eintrag*" "c:\testziel" -Force
            }
Die Pfade musst du natürlich selber anpassen aber dieses Script tut genau das was du willst.
Aber Vorsicht es gibt keine Rückfrage oder Rückgängig, sprich wenns läuft dann wird verschoben.

Also am besten erstmal mit einem Testordner probieren.
 
  • Gefällt mir
Reaktionen: tony_mont4n4
Hallo PHuV, na klar, ich kenne sogar ne Menge ITler, aber die können alle nur Java oder COBOL...

Hallo sikarr, ganz lieben Dank! :-) Nachdem ich jetzt viel gegoogelt habe und herausbekommen habe, wie ich die Powershell starte, wie ich einstelle, dass Skripte überhaupt ausgeführt werden dürfen und wie man sie aufruft, habe ich es ausprobiert, aber es hat nicht funktioniert.
Lustigerweise habe ich jetzt entdeckt, dass es dann geht, wenn ich in meiner Liste in der Text-Datei vor und nach Apfel und Birne einen * mache. Auf die Idee kam ich durch den Stern in Deinem Skript. Und dann funktioniert sogar mein ursprüngliches Dos-Skript :-)
Warum der Stern innerhalb des Skripts nicht genommen wurde weiß ich nicht und verstehe es auch nicht, weil es für mich eigentlich wie das gleiche aussieht, ob der Stern in der Datei oder im Skript steht.
Für mich ist jetzt das Problem gelöst, denn es macht mir nichts aus in meiner Datei Sterne einzufügen, weil ich es ja nur einmal machen muss und sie dann immer wieder so verwenden kann. Ich dachte nur ich erzähle es Dir, falls Deine Neugier geweckt ist und Du das mit dem Stern vielleicht aus purem Interesse untersuchen möchtest.

Eure Warnungen hab ich natürlich berücksichtigt und es erst mal in meinem Test-Verzeichnis mit den Apfel und Birne-Dateien ausprobiert :-)

Ganz lieben Dank und viele Grüße
Ivy
 
  • Gefällt mir
Reaktionen: tony_mont4n4
Noch ein kleiner aber feiner Tipp von mir zu der Geschichte. Man kann in PowerShell einen Vorgang vorab simulieren. Damit kann man testen, ob eine Aktion funktioniert und man richtet keinen Schaden an, falls etwas nicht stimmig sein sollte. Mit -WhatIf macht man das und so könnte das aussehen:

PowerShell:
$content = Get-Content "c:\content.txt"

foreach ($eintrag in $content) {
    Move-Item "c:\tmp\*$eintrag*" "c:\testziel" -Force -WhatIf
            }
 
  • Gefällt mir
Reaktionen: tony_mont4n4
Oh, das klingt ja super praktisch. Das werde ich diese Woche mal noch ausprobieren, vielleicht zeigt mir WhatIf dann an, warum es die Dateien nicht moved, wenn die Sterne nicht auch noch in der Datei drin sind.
 
  • Gefällt mir
Reaktionen: tony_mont4n4
Zurück
Oben