Archiv verlassen und diese Seite im Standarddesign anzeigen : Problem mit \write18{}
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...
Werden in LaTeX nicht die Backslashs in Pfadangaben durch "normale" Schrägstriche / ersetzt?
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..
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
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.
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
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 \
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
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}
@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!
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).
Danke, hat geklappt.. darauf hätte ich auch selber kommen können! :-)
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.