Hallo,
ich habe einen Haufen an Dateien in einem Ordner, genau genommen 623 Bilddateien und 623 dazu passende PDF-Dateien. Da mir das ganze aber "etwas" unübersichtlich geworden ist, würde ich nun gerne eine Dateiliste erstellen, und anhand dieser Liste eine Ordnerstruktur aufbauen und die entsprechenden Dateien dahinein kopieren lassen.
Beispiel:
1.png
1.pdf
2.png
2.pdf
3.png
3.pdf
Nun würde ich zuerst eine Dateiliste erstellen, die alle *.pdf enthält und davon würde ich dann gerne eine Ordnerstruktur haben, also:
{Ordner 1}
{Ordner 2}
{Ordner 3}
jeweils den Dateinamen des PDFs, aber ohne die Erweiterung.
Anschließend sollte nun noch folgendes passieren, das eben die Dateien
1.png
1.pdf
in den Ordner
{Ordner 1}
kopiert werden.
Ist so etwas möglich? Und wenn ja, wie realisiere ich das?
Programmieren - alles kontrollieren 4.941 Themen, 20.708 Beiträge
Batchdatei mit FOR (zum Interieren über die Dateiliste) und SET? (zum Extrahieren von Teilstrings aus dem Dateinamen). Beide Befehle geben mit dem Parameter /? eine Hilfe zurück.
Hilft Dir das schon weiter? ;-)
Gruß
Borlander
Jaha, hilft mir weiter! Allerdings den Kopf vor die Wand zu schlagen!!! :-)
Aber zwei Sachen habe ich sehr wohl verstanden:
Batchdatei
/?
OMG die Hilfe zu den beiden Befehlen ist ja mal "kurz"... *dummguck*
Ich glaub das check ich nich, kannst du mir vielleicht mit einem kleinen Beispiel dienen?
Klar kann dir hier jemand eine fertige Batchdatei/Anweisung schreiben, bringt dir aber nicht viel, wenn du diese nicht verstehen tust.
Spätestens wenn du mal ne kleine Änderung brauchst oder sie schnell mal auf andere Dateien/Ordner umtexten willst, wirds eng.
Kannst mal hier dich ein wenig einlesen/schauen und dann nochmal hier vorbei schauen.
Das sollte helfen ;-)
Ich habe auch nicht geschrieben, das mir jemand eine ganze batch schreiben soll, ein wenig kenn ich mich schon aus, und bisher konnte ich eigentlich viele Batches die ich so gesehen habe auch ein wenig anpassen.
Sorry, hier brauchst Du nur FOR.
Wird damit meine Idee klar?
for %f in (*) do echo md ordner_%~nf
for %f in (*) do echo move %f ordner_%~nf\%f
In der Hilfe von FOR wäre sollte in Deinem Fall die erste und die letzte Seite ausreichen ;-)
Gruß
Borlander
Hallo!
Batch Syntax sieht immer scheußlich aus...
Wie währe es denn mit etwas Python scripting:
Das Script muss in dem zu verarbeitenden Verzeichnis stehen.
Den Interpreter gibt es hier:
http://www.python.org/download/releases/2.5.4/
Gruss
ChrE
Hallo!
Sorry, das war wohl nichts...
Doofe Formatierung oder, wie gebe ich Quelltext aus...
Gruss
ChrE
Hallo!
So, hier habe ich den Quelltext mal hochgeladen:
http://codeviewer.org/view/code:72d
Ich hoffe, er bleibt eine Weile erhalten.
Fehler: Im Quelltext steht 'jpg' statt 'png'
Gruss
ChrE
So, habe das ganze nun eingesetzt, wenn das Script auf das von Borlander
angesprochene Problem stößt, dann stoppt es, dann greife ich manuell ein
und lasse das Script wieder los.
Funzte nun 623 mal ganz gut, bis halt auf den kleinen Makel mit den Punkten,
auch an manchen Sonderzeichen scheint es mal gestoppt zu haben, einmal war
es z.B. eine (-Klammer.
Für die schnelle Lösung war es aber dennoch genial! Vielen Dank dafür!!! *thumbsup*
Ich werde mich aber mit Borlanders Hilfe genauer in die Batch einarbeiten,
vielleicht geht es dann auch standalone und Sonderzeichen-sicher, und vielleicht
lerne ich sogar noch was und noch vielleichterer schaffe ich vielleicht eine
funzende Batch zu schreiben. :-)
Halte ich für eine gefährliche Annahme! Dateinamen können deutlich mehr als einen Punkt enthalten (bei mir tun sie das so gar relativ oft)...
Und wozu 12 Zeilen und ein zusätzlicher Interpreter, wenns Hausmittel universeller in zwei (wenn man will sicher auch in einer) Zeilen lösen können?
Gruß
Borlander
Hallo!
> deutlich mehr als einen Punkt enthalten
Stimmt, ich habe mich an das einfache Schema "name.ext" gehalten.
Man kann natürlich auch die letzten 4 Zeichen abschneiden -> purename=fname[:-4]
Sonderzeichen sind evtl. ein Encodingproblem. Da muss ich noch mal
schauen.
> Und wozu 12 Zeilen und ein zusätzlicher Interpreter
1. weils besser zu lesen ist und evtl. zu verstehen ist?
2. weil man mit dem Interpreter und ein paar Zeilen Quelltext
noch viele andere Aufgaben lösen kann...
Gruss
ChrE
Also das Dateinamensschema 8+3 ist seit bald 15 Jahren nicht mehr aktuell. Abschneiden der letzten 4 Zeichen ist genauso gefährlich! Dateiendungen mit 4 und mehr Zeichen sind wahrlich nix exotisches mehr. Mit Prominenten Vertretern wie z.B. .html ;-)
Gruß
Borlander
Hallo!
Ach, sei doch nicht so kleinlich.
Hier gabs doch gar keine HTML-Dateien zu bearbeiten... ;-)
Ich habe das Programm eben nur für diesen Anwendungsfall
zurechtgebastelt.
Das mit dem Encoding ist ärgerlich.
Ich muss noch mal schauen.
Gruss
ChrE
Als kleines Bash Script (Linux) könnte man diese folgeneermaßen schnell realisieren!
#!/bin/sh
sourcedir="quelle"
targetdir="ziel"
ls -l ~/$sourcedir/*.pdf > ~/zzahl.$$
zeilenzahl=$(cat -n ~/zzahl.$$ |tail -n1 | awk '{print $1}')
zahl=1
while [ $zahl -le $zeilenzahl ]; do
mkdir ~/$targetdir/ordner$zahl
cp ~/$sourcedir/$zahl.pdf ~/$targetdir/ordner$zahl/$zahl.pdf
cp ~/$sourcedir/$zahl.jpg ~/$targetdir/ordner$zahl/$zahl.jpg
zahl=$[$zahl + 1]
done
rm ~/zzahl.$$
Leider geht die Struktur wieder etwas verloren, glaube aber, dass man es so auch lesen kann.
Man könnte das jetzt noch ausbauen, um es für wiederholte Läufe zu verwenden, indem man z.B. abfragt, ob das Zielverezeichniss schon existiert um einen Fehler bei der Wiederanlage zu vermeiden.
Statt dem cp Befehl könnte man auch den mv Befehl nutzen, dann werden die Dateien im Quellverzeichniss gelöscht.
Auch lassen sich für cp bzw. mv diverse Schalter aktivieren, mit denen man überschreiben kann oder nur Dateien gleichen Namens aber neueren Datums ersetzt usw...
zeilenzahl=$(cat -n ~/zzahl.$$ |tail -n1 | awk '{print $1}')
Die Anzahl der Dateien (um die geht es Dir ja wahrscheinlich?) kann man auch einfach mit `ls | wc -l` ermitteln ;-)
Die Zeilenzahl von ls -l ist übrigens um 1 größer als die Dateianzahl (so zumindest auf meinem System).
Bei nicht fortlaufender Nummerierung würde das Skript übrigens einige leere Ordner liefer und die letzten Dateien nicht mehr kopieren...
Gruß
bor
Stimmt , ist noch einfacher! Bei mir kommt als Zeilenzahl immer die gleiche Zahl raus, wie Dateien im Verzeichnis sind. Mit unterbrochener Zahlenfolge habe ich es nicht probiert, ob dann der Script abbricht, wenn cp oder mv von der Quelle her ins Leere greifen? Man könnte ja über eine Abfrage, ob die jeweilige Datei existiert diesen Fehler ggf. auch noch abfangen!