PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Problem mit \write18{}



campa
13-10-2010, 15:30
Hallo,

ich habe folgendes Problem. Ich möchte aus TeX heraus einige Kommandozeilenbefehle ausführen. Nach einiger Suche bin ich auf \write18{} gestoßen.
Das Problem ist nun, wie kann ich doch ein Backslash einfügen?
Als Beispiel:
\write18{.\ordner\bat.bat}
Habs mit Doppelbackslash probiert, das geht aber nicht..

Für Hilfe wäre ich dankbar!

Gruß Daniel

/edit
ich hab noch eine weitere Frage zum write18.

Laut Release notes von MikTeX 2.8 ist write18 teilweise schon eingeschaltet. Weiß jemand wo man solche "vertrauenswürdige" Programm hinzufügen kann? Muss ja irgendwo eine Art Ausnahmeliste geben...

rstuby
13-10-2010, 15:41
Werden in LaTeX nicht die Backslashs in Pfadangaben durch "normale" Schrägstriche / ersetzt?

campa
13-10-2010, 15:57
Hm, das geht nicht. Ich glaube das liegt daran, dass er den Text der in den geschweiften Klammern steht direkt in die Kommandozeile überträgt. Wenn ich es aber mit \ mache, will er das als TeX-Befehl interpretieren..

campa
15-10-2010, 14:40
Keiner ne Idee?

rais
16-10-2010, 01:35
Moin moin,

Ich glaube das liegt daran, dass er den Text der in den geschweiften Klammern steht direkt in die Kommandozeile überträgt. Wenn ich es aber mit \ mache, will er das als TeX-Befehl interpretieren..
wenn Du Dir da mal nicht gerade selbst widersprochen hast: _entweder_ wird der Klammerausdruck `direkt in die Kommandozeile übertragen' oder \irgendwas wird als Kommando interpretiert -- beides zusammen geht imho nicht.
Vllt solltest Du auch erstmal klären, ob Du ein Problem mit \write18 oder mit dessen Aufrufparameter hast ... ein Blick in die .log-Datei genügt evtl bereits.

Wenn Dich das nicht weiterbringt, erstelle bitte ein Minimalbeispiel (http://www.mrunix.de/forums/showthread.php?t=66921) und poste die dazugehörige .log-Datei. Substituiere dazu vllt den Inhalt Deiner .bat zu etwas leicht auf andere Systeme adaptierbar -- Du postest hier ja nicht auf `MrWinDOS' -- etwa `echo "foo" > blah.txt' ...

MfG

campa
16-10-2010, 17:34
Danke für die Antwort.
Ich habe ein Minimalbeispiel angefertigt. Es befindet sich in beiliegender zip-Datei.
Stimmt, das sollte ich noch dazu sagen, dass ich unter Windows arbeite.
Die Struktur. In der Tex-Datei soll über write18 die .bat-Datei aufgerufen werden. Befindet sich diese im Hauptordner ist das auch kein Problem. Das Problem tritt auf wenn ich sie im Unterordner "test" ausführen will.
Über die Konsole in Windows kann man aus einem übergeordneten Ordner die Datei per ".\test\minimalbsp.bat" aufrufen. Das würde ich dann auch gerne in Tex machen können.

Ich hoffe es kann mir jemand helfen.

rais
16-10-2010, 18:47
Moin moin,


Die Struktur. In der Tex-Datei soll über write18 die .bat-Datei aufgerufen werden. Befindet sich diese im Hauptordner ist das auch kein Problem. Das Problem tritt auf wenn ich sie im Unterordner "test" ausführen will.
Über die Konsole in Windows kann man aus einem übergeordneten Ordner die Datei per ".\test\minimalbsp.bat" aufrufen. Das würde ich dann auch gerne in Tex machen können.

nun ja, Deine .log sagt u.A.


! Undefined control sequence.
<write> .\test
\minimalbsp .bat
l.15 \immediate\write18{.\test\minimalbsp.bat}

was Du etwa so deuten könntest: ``den Befehl `\test' kennt LaTeX nich, den Du da in Zeile 15 innerhalb vom \write18 aufzurufen versuchst'', mit anderen Worten: ja, auch innerhalb des \write18-Arguments werden (La)TeX-Befehle ausgeführt.
Interessanter in diesem Zusammenhang wäre die Logdatei von Deinem Versuch -- bezogen auf Dein Minimalbeispiel -- mit / statt \ als Pfadtrenner im \write18-Argument.

MfG

campa
16-10-2010, 19:23
Genau, das habe ich auch versucht. Latex selbst gibt nun keinen Fehler mehr, aber steht:
"Der Befehl "." ist entweder falsch geschrieben oder konnte nicht gefunden werden."
Das tritt genau so auf, als wenn ich die Zeile direkt in die Konsole schreibe...

Anhang: Log-Datei mit / statt \

rais
16-10-2010, 20:20
Genau, das habe ich auch versucht. Latex selbst gibt nun keinen Fehler mehr, aber steht:
"Der Befehl "." ist entweder falsch geschrieben oder konnte nicht gefunden werden."
Das tritt genau so auf, als wenn ich die Zeile direkt in die Konsole schreibe...

dann ist es kein Problem für (La)TeX, vielmehr für Dein Betriebssystem ... Deine .log sagt nun:


runsystem(./test/minimalbsp.bat)...executed.

versuch es vllt ohne den führenden ./ im \write18-Argument -- bzw. auf der Konsole.

MfG

campa
17-10-2010, 22:36
Naja, das leider nicht unter Windows.. Habs bisher erst mit ".\test\minimalbsp.bat" in der Konsole zum Laufen bekommen..
Aber es muss doch möglich sein, ein Backslash im write18-Argument unterzubringen oder?

Grüße Daniel

Schweinebacke
18-10-2010, 11:13
\@backslashchar

u_fischer
18-10-2010, 14:43
Oder \string


\documentclass{article}

\begin{document}
abc \immediate\write18{test\string\testwrite18.bat}
\end{document}

campa
18-10-2010, 16:15
@Schweinebacke:


\@backslashchar
klappt leider nicht. Log sagt:

runsystem(.\spacefactor \@m backslashchar test\spacefactor \@m backslashchar minimalbsp.bat)...executed

@Ulrike:

Oder \string


\documentclass{article}

\begin{document}
abc \immediate\write18{test\string\testwrite18.bat}
\end{document}

Das klappt super! Vielen Dank!

campa
18-10-2010, 19:12
Eine kleine Frage hab ich noch. Ich benötige zu den Backslash nun auch noch ein Leerzeichen.
Übergebene Variablen werden ohne Leerzeichen dazwischen übergeben.
Mit var1 = test1
var2 = test2 wird aus

\write18{test.bat \var1 \var2}
test.bat test1test2

Somit kann ich natürlich nur einen Parameter detektieren.

u_fischer
18-10-2010, 19:36
Versuch \space (ungetestet).

campa
18-10-2010, 19:43
Danke, hat geklappt.. darauf hätte ich auch selber kommen können! :-)