Batch Datei schreiben - Ordner nach Dateinamen benennen

SchnuppiMann

bekommt Übersicht
Hallo Leute,

nach langem Suchen hier im Forum und bei Google weiß ich leider nicht mehr weiter. Ich möchte gerne Folgendes machen:

Ich habe eine Photoshop Batch Datei geschrieben, die mir in einem Rutsch ca. 50 Bilder erstellt. Diese Bilder heißen:

ab-xxx-1.jpg
ab-xxx-2-jpg
..
cd-xxx-1.jpg
cd-xxx-2.jpg
..
ef-xxx-1-jpg
ef-xxx-2-jpg
..
gh-xxx-1.jpg
gh-xxx-2.jpg
..
ij-xxx-1.jpg
ij-xxx-2.jpg
...


Es gibt sozusagen 5 Gruppen von Bildern. Jetzt nehme ich ein Rename Programm, welches das "xxx" durch einen Begriff ersetzt, z.B. "autos".

Photoshop speichert diese Bilder in 5 verschiedenen Ordnern: ab, cd, ef, gh, ij

Jetzt möchte ich eine Batch Datei schreiben, die die Bilder aus diesen Ordnern auf ein Netzlaufwerk kopiert und dort in Ordner, die wie die Bilder heissen. Beispiel:

XCOPY "D:\Bilder\ab\*.*" "Z:\Bilder\"

auf Z wechseln und dort in den Ordner "ab" gehen, dort befinden sich nun Bilder, die "ab-autos-1.jpg" bis "ab-autos-10.jpg" heissen. Es soll nun ein Ordner erstellt werden, der "autos" heisst. Als muss ich irgendwie den Bildnamen einlesen und daraus den Ordner erstellen.

Kopieren usw. kriege ich hin aber wie kann man den Dateinamen als Ordnernamen nehmen?

Ich habe diesen Link hier gefunden aber ich komme damit nicht klar.
http://fryboyter.de/datei-nach-dem-verzeichnisnamen-umbenennen/



Vielen Dank für Eure Hilfe.

Bernd
 
There we go:

Code:
@echo off

set source=D:\DESKTOP\source
set target=D:\DESKTOP\target


cd /D "%source%"

for /f "tokens=1,2 delims=-" %%a in ('dir /b *') do (
	md "%target%\%%a\%%b"
	move "%%a-%%b*" "%target%\%%a\%%b\" 
)
pause

Derzeit ist verschieben aktiv, wenn du nur kopieren willst, dann musst du statt
Code:
move "%%a-%%b*" "%target%\%%a\%%b\"
einfach nur
Code:
copy "%%a-%%b*" "%target%\%%a\%%b\"
einfügen.
 
Super, hat sofort funktioniert. Vielen Dank.

Kurze Nachfrage: kann man auch eine FTP Verbindung aufbauen und die Dateien zusätzlich auf einen FTP kopieren?
 
Ja, aber das geht nur mit dem Umweg über ein externes script dass die ftp-befehle dann abhandelt. Das Script kann aber - falls erforderlich - auch von dem batch-file angelegt werden.
Und zwar mit echo und einem Befehlsumleitungsoperator in eine textdatei.

Eine Zusammenfassung zu FTP-Scripts und Batch findest du hier: DOS Batch - FTP Scripts
 
Also die Seite war sehr hilfreich. Ich kriege alles hin, habe aber noch ein Problem:

Da ich sehr viele Dateien auf den FTP lade, bricht der Server irgendwann ab und verweigert die Verbindung. So wie ich nachgelesen habe, wird wohl für jede datei ein port geöffnet. kann das sein? Wie verhindere ich das? Oder wie kann ich generell viele Dateien hochladen? Müsste ein Debian Server sein...muss ich da die Verbindungsanzahl erhöhen?
 
Also wenn der Server abbricht, würde ich die Verbindungsanzahl eher verringern und die Dateien nacheinander hoch laden. Die Fehlermeldungen die vom Server kommen wenn er abbricht und die Verbindung verweigert wären hilfreich. Vielleicht kann man dir dann besser helfen.
 
Des weiteren das jetzt von dir verwendete Script. vllt. ist ja der Hund dort begraben.

ANM: Beim FTP-Script bitte die Benutzerdaten unkenntlich machen...
 
Hallo,

also meine BAT sieht so aus:

Code:
FTP -s:ftp.txt

und in der TXT datei steht dann:

Code:
open myserver.com
username
password
cd httpdocs
cd images
cd testordner
type binary
prompt
mput D:\Bilder\"\ab 1500\"\*.jpg
mput D:\Bilder\"\cd 1500\"\*.jpg
mput D:\Bilder\"\ef 1500\"\*.jpg
mput D:\Bilder\"\gh 1500\"\*.jpg
mput D:\Bilder\"\ij 1500\"\*.jpg


quit


Als Fehler kommt im Prinzip nur nach dem Upload einiger Bilder: Nicht verbunden.
 
Hast du mal getestet, ob der Fehler immer an der gleichen Stelle auftritt? Also Dateien wieder vom Server gelöscht, und die BAT neu ausgeführt? Kann es sein, dass der Fehler immer auftritt, wenn ein Ordner hochgeladen wurde, und dann der nächste Ordner dran wäre?
 
Hallo,

das ist immer unterschiedlich. So wie ich das sehe, werden zu viele Verbindungen aufgebaut bevor die alten geschlossen werden. Sehr merkwürdig. Das problem muss es doch schon mal öfter gegeben haben, oder?

:(
 
Also für zu viele Verbindungen gibt es eigentlich einen eigenen Fehler "Max connections reached", also nicht einfach nur "Nicht verbunden" wie du meintest.

Ich hatte mal folgendes Phänomen. Bei FTP gibt es ja grob gesagt einen Steuer- und einen Datenkanal. Über den Steuerkanal werden dann die Befehle geschickt das eine Datei hochgeladen werden soll, etc., und das hochladen läuft dann über den Datenkanal. Wenn ich jetzt eine größere Datei hochgeladen hab, bei der es länger gedauert hat, wurde ich vom Steuerkanal getrennt aber der Upload lief durch. Die Verbindung vom Steuerkanal wurde getrennt, weil ich während des Upload keine anderen Befehle mehr an den FTP gesendet hab, und mir der Server dann nach ner Zeit die Verbindung wegen Untätigkeit geschlossen hat. Wenn der Upload fertig war, musste ich mich erst wieder neu einloggen, wenn ich auf dem FTP-Server weiter arbeiten wollte.

Also was du vielleicht noch probieren und schauen könntest. Haben deine Dateien alle ca. die gleiche Größe oder gibt es Ausreißer, bei denen sowas wie ich beschrieben habe auftreten könnte? Oder sind deine Dateien allgemein so groß, dass wenn die Verbindung mal ein bisschen schwankt, du einen Timeout bekommen könntest? Ich weiß nicht, wie der mput-Befehl realisiert ist, ob das ein Befehl ist, oder ob dann automatisch für jede Datei ein put ausgeführt wird. Vielleicht hilft es was, wenn du dir für jeden Ordner ein FTP-Skript erstellst, und die dann in der BAT nacheinander aufrufst. Oder du dich in deinem Skript nach jedem mput mit "bye" ausloggst und wieder neu einloggst. Kommt aber im Prinzip ja aufs Selbe hinaus.
Ansonsten wenn du andere Software verwenden kannst, vielleicht mal einen anderen FTP-Client als den Standard-FTP probieren. Musst du aber natürlich darauf schauen, dass du ihn per Commandline steuern kannst. Spontan würde mir da der "nftp" einfallen, den du probieren könntest.
 
sollte das wirklich der fall sein, dann wär es sinnvoller (je nach anzahl der bilder) zwischen den einzelnen mput-befehlen einfach ein cd ..\testordner zu machen. So kommt aktivität in die Leitung.

PS.: Solch ein Timeout bekomm ich auch immer wieder mal wenn ich mit FileZilla viele Bilder hochlade...
 
Ein Verzeichniswechsel würde nichts bringen, da er dann entweder schon wieder getrennt wurde, und damit wieder den "Nicht verbunden" Fehler bekommen würde, oder wenn er noch verbunden ist, auch der mput-Befehl ein neuer Befehl ist. Ob du davor dann ein "cd" machst ist egal.
Was noch ein Versuch wäre, wäre auch für einen Ordner mehrere mput's zu nehmen. Also z.B. immer 10 Dateien pro mput. Ob das dann in einer BAT auch einfach zu automatisieren ist, weiss ich nicht. Vielleicht hätte Razorblade dafür aber wieder eine Idee? :)

Edit: Als Ansatz würde mir z.B. gerade einfallen, dass man sich das FTP-Skript über die BAT erstellen lässt. Die BAT liest in einer Schleife die einzelnen Dateinamen aus, und schreibt für jede Datei ein "put Datei" in das FTP-Skript, anstatt der mput's. Und dann wird dieses FTP-Skript ausgeführt.
 
Zuletzt bearbeitet:
Hallo,

danke erstmal für die zahlreichen Ideen... ich schaue mir mal nftp an...ich hatte mir den ScriptFTP angeguckt aber der ist leider super langsam und wenn ich das über die Eingabeaufforderung machen will (Shell Modus) dann funktioniert das nicht unter meiner WIN Version. Das Problem ist trotz mühevoller Google Suche nicht behebbar. Daher gucke ich nach einem anderen Skript FTP.

Danke
 
Oben