Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Batch-File zur Konvertierung,Dateiendung im Parameter ändern (https://www.delphipraxis.net/101617-batch-file-zur-konvertierung-dateiendung-im-parameter-aendern.html)

benst 16. Okt 2007 13:54


Batch-File zur Konvertierung,Dateiendung im Parameter ändern
 
Hallo,

ich möchte mit einem kleinen Batch-File (Stapelverarbeitungsdatei, *.bat) eine Konvertierung durchführen.
Dazu möchte ich den übergebenen Dateienamen (Parameter wird durch Drag-and-Drop auf Batch-File übergeben) einem Programm übergeben. Das Programm macht z.B. aus text.tex -> text.dvi . Im nächsten Schritt möchte ich text.dvi an ein anderes Programm übergeben.
Dazu muss ich von dem Parameter die Endung abschneiden und eine neue anfügen.
Code:
verarbeitung1.exe %1  // (%1 ist der übergebene Parameter) aus z.B. %1 = "d:\text.tex"; dann wird aus text.tex text.dvi
verarbeitung2.exe ???%1???  // %1.div wäre ja falsch, weil %1.div = "d:\text.tex".div wäre (Anführungszeichen beachten!)
Ich hoffe, ich konnte meine Frage verständlich ausdrücken. Habe jetzt schon ziemlich lange gegooglet, aber bisher nichts entsprechendes gefunden.

Gruß
Ben

marabu 16. Okt 2007 14:14

Re: Batch-File zur Konvertierung,Dateiendung im Parameter än
 
Hallo Ben,

versuche es so:

Code:
@for %I in (%1) do echo %~dpnI.dvi
Grüße vom marabu

benst 16. Okt 2007 15:13

Re: Batch-File zur Konvertierung,Dateiendung im Parameter än
 
Hallo marabu,

danke. Ganz so hat es nicht geklappt, aber das hat mich entscheidend weitergebracht.
Jetzt funktioniert es, wie es soll:

Code:
: prüfen, ob ein Parameter übergeben wird
if %1!==! goto ende

: aktuelles Laufwerk wechseln
%~d1

: aktuellen Pfad wechseln
cd "%~dp1"

: tex2dvi
latex.exe (...) "%~nx1"

: dvi2ps
dvips.exe (...) "%~n1.dvi"

:ende
(...) steht für weitere Parameter.

Gruß
Ben

jottkaerr 17. Okt 2007 06:14

Re: Batch-File zur Konvertierung,Dateiendung im Parameter än
 
Hallo Achim,

Zitat:

Zitat von marabu
Hallo Ben,

versuche es so:

Code:
@for %I in (%1) do echo %~dpnI.dvi

der Befehl ist so richtig, wenn er direkt auf der Kommandozeile eingegeben wird.
In einer Batchdatei müssen aber die Prozentzeichen vor den Variablen der for-Schleife
verdoppelt werden. Korrekt wäre also

Code:
@for %%I in (%1) do echo %%~dpnI.dvi
jkr

marabu 17. Okt 2007 08:11

Re: Batch-File zur Konvertierung,Dateiendung im Parameter än
 
Hallo Jürgen,

vielen Dank für deinen Hinweis.

Wer sich mit der command shell beschäftigt, der wird feststellen, dass es da unterschiedliche Syntaxregeln bezüglich Variablen gibt: Doppeltes Prozentzeichen vor Steuervariablen im batch mode und einfaches im interaktiven Modus. Umgebungsvariablen müssen stets in Prozentzeichen eingeschlossen werden (%PATH%) und Parameter werden auch im Batch nur durch ein einzelnes Prozentzeichen vor der Parameternummer (%2) referenziert.

Wie immer hilft ein Blick in die Online Hilfe (CMD /? oder auch FOR /?) bevor man irgendetwas abtippt und sich wundert. Ben hatte offensichtlich kein Problem mit der Syntax.

Freundliche Grüße

benst 17. Okt 2007 14:06

Re: Batch-File zur Konvertierung,Dateiendung im Parameter än
 
Danke
Ich habe es jetzt korrigiert:
Code:
@for %%I in (%1) do %%~dI

: prüfen, ob ein Parameter übergeben wird
if %1!==! goto ende

: aktuelles Laufwerk wechseln
@for %%I in (%1) do %%~dI

: aktuellen Pfad wechseln
@for %%I in (%1) do cd "%%~dpI"

: tex2dvi
@for %%I in (%1) do C:\texmf\MiKTeX\bin\latex.exe --src -interaction=nonstopmode -max-print-line=120 "%%~nxI"

: dvi2ps
@for %%I in (%1) do C:\texmf\MiKTeX\bin\dvips.exe -P pdf "%%~nI.dvi"

: ps2pdf
@for %%I in (%1) do C:\Programme\gs\gs\gs8.54\bin\gswin32c.exe -sPAPERSIZE=a4 -dSAFER -dBATCH -dNOPAUSE -sDEVICE=pdfwrite -sOutputFile="%%~nI.pdf" -c save pop -f "%%~nI.ps"

pause

:ende
Gruß
Ben


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:55 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz