Ganzen Ordner via MS-Dos verarbeiten

Begonnen von Hilflos-im-Code, Montag, 30. Juli 2018, 15:59

« vorheriges - nächstes »

Hilflos-im-Code

Was ich in die Kommondazeile schreiben muss, damit eine einzelen Lilyponddatei zu einem PDF konvertiert wird, weiß ich.

Aber was muss ich eingeben damit alle Lilyponddateien in einem Ordner zu PDF umgewandelt werden?

Malte

Unter Linux und Mac:lilypond *.lyIch meine, so ähnlich sollte es auch unter Windows gehen.

Hilflos-im-Code

Danke. Also so etwas ist von der Plattform abhängig und nicht von Lilypond.

Malte

#3
Das ist mir absolut klar. Ich hatte es aber so ähnlich auch für Windows in Erinnerung. Hast du es denn ausprobiert?

Edit: Zumindest Stackoverflow (Google-Suche nach ,,windows cmd wildcard") gibt mir recht.
2. Edit: Und der entsprechende Abschnitt in der LilyPond-Doku sagt auch nichts anderes; später im selben Abschnitt wird dann doch ein Unterschied gezeigt zwischen Linux/Mac und Windows: aber das betrifft nur Fälle, in denen auch Unterordner zu durchsuchen sind.

Arnold

Hallo,

nicht immer klappt es, mehrere Dateien mit einem einzigen Lilypond-Aufruf zu kompilieren.
In diesen Fällen nimmt man eine FOR-Schleife dazu, um nacheinander alle Aufrufe zu starten.
In Windows, in der Eingabeaufforderung z. Bsp.:for %k in ( *.ly ) do lilypond %k
In einer BAT-Datei abgelegt muß man die Prozentzeichen verdoppeln! Diese Handicap hätte Unix nicht.

Vielleicht hast du dir bereits eine eigene BAT-Datei zum kompilieren erstellt (z. Bsp. lily.bat). Ich stelle damit unter anderem einen weitern Suchpfad für LILYPOND-Dateien ein, damit meine persönlichen Ergänzungen mit dem \include gefunden werden.
Außerdem habe ich mir mit einem C-Compiler noch ein paar Hilfsprogramme geschrieben, welche mir unter WIN-DOS manches erlauben was sonst mit UNIX-Standardprogrammen möglich wäre. Das wichtigste in diesem Zusammenhang ist ein »ps«-Kommando, mit dem ich auch nachprüfen kann wieviele LILYPOND-Prozesse derzeit gleichzeitig laufen, und ab einer bestimmten Anzahl warte, bis diese Zahl sich wieder verringert hat. Mit dessen Hilfe führe ich die Kompilierungen eines »Projekts« parallel aus. Aus meiner Erfahrung mit 4-Kern-Prozessor (8 werden durch Hyperthreading angezeigt) tritt dort über 4 Prozessen gleichzeitig eine spürbare Verlangsamung der einzelnen Übersetzungsprozesse ein, so daß 8 parallele Prozesse etwa gleich schnell bleiben wie 4 parallele Prozesse.

Wenn Du interesse hast, wie ich das mache, dann frage nochmal nach.
Wenn es nur so viele LY-Dateien sind wie der Taskmanager Prozessorkerne anzeigt, dann genügt es, das Kommando »start« in die Befehlszeile einzufügen, und später alle neu geöffneten CMD-Fenster wieder zu schließen.for %k in ( *.ly ) do start lilypond %k
Nochmal die Warnung: Nicht zu viele Prozesse gemeinsam starten, sonst dauert es noch länger als alle sequentiell abzuarbeiten. Und natürlich sollte auch der RAM-Speicher nicht knapp werden!

Arnold

Hilflos-im-Code

Zitat von: Malte am Dienstag, 31. Juli 2018, 09:12
Das ist mir absolut klar. Ich hatte es aber so ähnlich auch für Windows in Erinnerung.
Ich habe ein Fragezeichen vergessen. Es war nicht als Belehrung gedacht, sondern als Frage, ob es für solche DInge es eine Lilypondsystematik gibt oder die der ausführenden Plattform gilt.

Malte

#6
Achso, habe mich schon gewundert ;) Ja, es ist von der Plattform abhängig, bzw. genauer gesagt von der Konsole/Shell. Unter Windows ist cmd.exe als Konsole der Standard, es gibt aber auch andere. Für die meisten Linux-Distributionen und – soweit ich weiß – auch für Mac OS ist der Standard bash (,,bourne again shell").

Sowohl bash als auch cmd.exe erweitern * (Asterisk/Sternchen) in Dateinamen zu beliebigen Strings, d. h. *.ly sind alle Strings, die auf .ly enden. Wenn also in einem Ordner die Dateiena.ly
b.ly
c.jpg
d.ly
liegen, wirdlilypond *.lyzulilypond a.ly b.ly d.lyerweitert und LilyPond nimmt diese drei Argumente (a.ly, b.ly, d.ly) an und übersetzt alle drei.

Der einzige Unterschied, der mir gerade noch einfällt: Unter Windows dürfte LilyPond nicht als lilypond, sondern lilypond.exe gestartet werden, oder? Siehe dazu auch deine Frage in diesem Thread; Linux setzt nicht so viel auf Dateinamensendungen wie .exe und üblicherweise haben Programme da gar keine Erweiterung.

Arnold

Hallo Malte,

auch unter Windows genügt es, in der Kommandozeile »lilypond« (ohne ».exe«) einzugeben. Letztlich gibt es im Windows eine Liste von Dateiendungen welche als mögliches Anhängsel an den Dateinamen bei der Suche nach einem ausführbaren Programm getestet werden.
Allerdings muß das Verzeichnis, in welchem »lilypond.exe« liegt auch im Suchpfad aufgenommen sein, was meines Wissens der Windows-Installer aber nicht automatisch macht. Deshalb habe auch ich den Stuchpfad ( LILYPOND_INSTALLATIONSVERZEICHNIS\usr\bin ) in die Umgebungsvariable PATH aufgenommen.
Da aber die UNIX-Welt und Liilypond mit UTF-8-Konsolenausgaben nicht umbedingt von Windows (vor allem WIN7, WIN10 soll sich schon gebessert haben) gern gesehen ist, kann es Probleme bei der Anzeige von Kompilierungsmeldungen im Kommandozeilenfenster geben. Da kenn ich natürlich auch schon die Tricks, daß es bei mir gut aussieht.

Und bei point-and-click ist's noch ein wenig aufwändiger als unter Unix. Da muß man nicht nur dem PDF-Betrachter beibringen, daß der textedit-Link vertrauenswürdig ist, sondern eventuell auch noch die Umgebungsvariable GUILE_LOAD_PATH mit dem Wert LILYPOND_INSTALLATIONSVERZEICHNIS\usr\share\lilypond\current definieren (gilt für Lilypond Version 2.19.8x, in Version 2.18.2 war noch mehr zu tun).

Arnold

P.S. Kommt bitte nicht auf die Idee, einfach LILYPOND_INSTALLATIONSVERSZEICHNIS abzutippen, sondern setzt da euren Installationspfad von Lilypond ein. Und sollte der ein Leerzeichen beinhalten, dann viel Spaß beim Probieren, wo noch Anführungszeichen (»"«) zu setzen sind. Ich weiß schon, warum ich einen Extrapfad ohne Lehrzeichen angelegt habe.

Malte

Zitat von: Arnold am Dienstag, 31. Juli 2018, 16:45
Hallo Malte,

auch unter Windows genügt es, in der Kommandozeile »lilypond« (ohne ».exe«) einzugeben.
Oh, ok, dann hatte ich das falsch in Erinnerung ... Windows macht also da ne Vervollständigung mehr als Linux (abgesehn von der Pfadvervollständigung bzw. dem Suchpfad, den ja beide haben).