bipede
Goto Top

Pfad-Variablen verknüpfen bzw. zusammenführen

Hallo! Ich möchte zwei Variablen, die jeweils einen Teil eines Pfades beinhalten, zu einem neuen Pfad zusammenführen.

Hier mal ein Beispiel:

set var1="C:\"  
set var2="test.pdf"  

echo %var1%_%var2%

pause

Das Ergebnis sollte so aussehen:

"C:\test.pdf"  

Sieht aber so aus (Problem sind die ""):

"C:\""test.pdf"  

Hintergrund:
Eine bestimmte Software (LEd) übergibt bestimmte Pfadvariablen so:

@rem There are 3 parameters passed  to this batch:
@rem     %1 - <MAINFILEDIR>
@rem     %2 - <MAINFILENAME>
@rem     %3 - <MAINFILEDISK>

Und ich möchte den Adobe Reader aufrufen und ihm dabei den Pfad zur Datei übergeben, so in etwa:

cd C:\Programme\Adobe\Reader 9.0\Reader
AcroRd32.exe %1%2

Beste Grüße
manu

Content-Key: 101877

Url: https://administrator.de/contentid/101877

Printed on: April 26, 2024 at 13:04 o'clock

Mitglied: 51705
51705 Nov 14, 2008 at 20:27:02 (UTC)
Goto Top
Hallo,

probier doch mal:

set "var1=C:\"  
set "var2=test.pdf"  

wenn das nicht funktioniert, warte auf bastla.

Grüße, Steffen
Member: bastla
bastla Nov 14, 2008 at 20:59:32 (UTC)
Goto Top
@smerlin
Das würde so funktionieren ...

... wenn aber die Pfadbestandteile ohnehin als Parameter ankommen, dann einfach:
"C:\Programme\Adobe\Reader 9.0\Reader\AcroRd32.exe" "%~1%~2"
Grüße
bastla
Member: bipede
bipede Nov 15, 2008 at 13:39:24 (UTC)
Goto Top
Hallo und vielen Dank.

Habe es jetzt so gemacht:
cd C:\Programme\Adobe\Reader 9.0\Reader
AcroRd32.exe "%~1\%~2.pdf"  

Dabei sind die Variablen beispielsweise wie folgt belegt (diese werden beim Aufruf übergeben):
%1 = "C:\Dokumente und Einstellungen\kuehner\Desktop\test"  
%2 = "New"  

Und
"%~1\%~2.pdf"  

liefert dann:
"C:\Dokumente und Einstellungen\kuehner\Desktop\test\New.pdf"  

Erlaubt mir eine Nachfrage: Werden dann mit
"%~1%~2"  

quasi Strings zusammengebaut?!

LEd ist übrigens ein LaTeX-Editor und ich wollte erreichen, dann nach dem Komplilieren automatisch das PDF geöffnet wird. Saugeil wäre es natürlich, wenn sich das batch merken würde, welche Seite zuvor geöffnet war und dann wieder dei gleiche Seite öffnet - aber das ist zuviel.

Grüße!
manu
Member: bastla
bastla Nov 15, 2008 at 13:51:02 (UTC)
Goto Top
Hallo bipede!

Werden dann mit
"%~1%~2"
quasi Strings zusammengebaut?!
Jein; ein explizites "concat" benötigt Batch nicht - es können ganz einfach Variable und Konstante (wie Du es ja durch den Zusatz von ".pdf" schon selbst gemacht hast) ohne Weiteres zusammengeschrieben werden - durch die Anführungszeichen "zusammengebaut" (wenn Du das so nennen möchtest face-wink) werden die einzelnen Teile wegen der Möglichkeit, dass Name oder Pfad Leerzeichen enthalten könnten.
Saugeil wäre es natürlich, wenn sich das batch merken würde, welche Seite zuvor geöffnet war und dann wieder dei gleiche Seite öffnet - aber das ist zuviel.
Wenn die Seitenzahl an Batch übergeben werden kann, wäre auch das "Merken" kein Problem - dazu könntest du einfach
set Seite>D:\Seitenzahl.txt
zum Zwischenspeichern der Variablen %Seite% bis zum nächsten Batchlauf und
for /f "delims=" %%i in (D:\Seitenzahl.txt) do set "%%i"
zum Einlesen verwenden.

Grüße
bastla
Member: bipede
bipede Nov 15, 2008 at 14:03:15 (UTC)
Goto Top
Hallo und abermals Danke!

Ich möchte die Hilfe nicht überstrapazieren, da ich ja nichts im Gegenzug bieten kann. In der Saugeil-Bemerkung habe ich mich unklar ausgedrückt - hier ein weiterer Versuch:

1. Ich kompiliere zum ersten Mal das TeX-Dokument und danach wird das Dokument im Adobe Reader geöffnet.
2. Ich ändere was im TeX-Code und kompiliere erneut.
3. Natürlich habe ich zuvor vergessen, den Adobe Reader zu schließen und TeX kann das PDF nicht erstellen.

Traum:

- Das Batch schließt den Reader und merkt sich die aktuelle Seite - dazu muss man mit dem Reader kommunizieren.
- Dann kompiliere ich das LaTeX-Dokument und öffne das PDF erneut und übergebe dabei dem Adobe Reader die zuvor geöffnete Seite als Parameter

@rem You can put here any commands you want - this batch file can be executed from LEd's toolbar  
@rem There are 3 parameters passed  to this batch:
@rem     %1 - <MAINFILEDIR>
@rem     %2 - <MAINFILENAME>
@rem     %3 - <MAINFILEDISK>
@rem You can also define in tex_cmd.gd file some additional parameters to be passed to this batch file.

call "%PROGRAMFILES%\LEd\batches\bibtex.bat" %1 %2 %3  
call "%PROGRAMFILES%\LEd\batches\pdflatex.bat" %1 %2 %3   
call "%PROGRAMFILES%\LEd\batches\myAcrobat.bat" %1 %2 %3   

myAcrobat.bat:
cd C:\Programme\Adobe\Reader 9.0\Reader
echo "%~1\%~2.pdf"  
AcroRd32.exe "%~1\%~2.pdf"  

Aber wie gesagt - das ist zuviel verlangt. So ist es auch schon super! face-smile

Es wäre zumindest nochmal besser, wenn ich mit dem Batch den Reader zuvor beenden könnte:

@rem You can put here any commands you want - this batch file can be executed from LEd's toolbar  
@rem There are 3 parameters passed  to this batch:
@rem     %1 - <MAINFILEDIR>
@rem     %2 - <MAINFILENAME>
@rem     %3 - <MAINFILEDISK>
@rem You can also define in tex_cmd.gd file some additional parameters to be passed to this batch file.

-> Reader beenden bevor kompiliert wird....

call "%PROGRAMFILES%\LEd\batches\bibtex.bat" %1 %2 %3  
call "%PROGRAMFILES%\LEd\batches\pdflatex.bat" %1 %2 %3   
call "%PROGRAMFILES%\LEd\batches\myAcrobat.bat" %1 %2 %3   

Grüße
manu
Member: bastla
bastla Nov 15, 2008 at 14:18:43 (UTC)
Goto Top
Hallo bipede!
dazu muss man mit dem Reader kommunizieren.
... was native Batch IMHO nicht kann (deshalb auch meine Einschränkung oben: Wenn die Seitenzahl an Batch übergeben werden kann) ...

Es wäre zumindest nochmal besser, wenn ich mit dem Batch den Reader zuvor beenden könnte:
Soferne "taskkill" verfügbar ist (ab XP):
taskkill /F /IM AcroRd32.exe
Den Namen des Prozesses kannst Du im Fall des Falles über "tasklist" herausfinden.

Grüße
bastla
Member: bipede
bipede Nov 15, 2008 at 14:20:10 (UTC)
Goto Top
Danke bastla - funktioniert super!