ghost-in-the-shell
Goto Top

Variabler Dateipfad in .bat

Hi ist ne ganz kurze sache.
ich habe mir ne kleine *.bat Datei geschrieben, die mir zwei programme öffnet.

call D:\Temp\Helpsoft\Programm1.exe
call D:\Temp\Helpsoft\Programm2.exe

ich möchte mir die Datei jetzt auf einen USB Stick machen, jedoch möchte ich nicht jedesmal den Laufwerksbuchtaben ändern. Ich möchte, das er immer den aktuellen Laufwerkbuchtaben nimmt, kann ja sein, das 2 USB Sticks angeschlossen sind und er dann nicht den richtigen Laufwerkbuchstaben aht, deswegen wäre variabel nicht schlecht.

In excel habe ich sowas schonmal gemacht mit "This.Workbookpath" pder so ähnlich.
gibt es hier diese funktion auch?

Danke schonmal.

Gruß

Content-Key: 84062

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

Printed on: April 19, 2024 at 03:04 o'clock

Member: miniversum
miniversum Mar 27, 2008 at 09:36:50 (UTC)
Goto Top
Laufwerk der Batchdatei:
echo %~d0
Laufwerk und Pfad der Batchdatei:
echo %~dp0

Weiteres unter for /? ganz am Ende
Member: bastla
bastla Mar 27, 2008 at 10:13:15 (UTC)
Goto Top
Hallo MichaelS87!

Wenn's nur um den Laufwerksbuchstaben geht, dann:
call %~d0\Temp\Helpsoft\Programm1.exe
call %~d0\Temp\Helpsoft\Programm2.exe

Grüße
bastla
Member: miniversum
miniversum Mar 27, 2008 at 10:55:49 (UTC)
Goto Top
klappt noch nicht so ganz.

er öffnet es zwar, aber das steht da

D:\Temp>call D:\Temp\Tfes.pdf


in der batch selber steht

call %~d0\Temp\Tfes.pdf
Das stimt ja so. Wenn die Batch auf dem Laufwerk D: liegt stellt das %~d0 eben das D: dar.
wenn ich die batch jetzt aber in das selbe verzeichneis wie die Tfes.pdf kopiere und das \Temp weg mache, dann geht es nichtmehr. das sollte es doch oder?
Nein ist klar das es so nicht geht. Schau dir nochmal mein posting oben an.
%~d0 stellt NUR den laufwerksbuchstaben dar indem die Batch liegt. %~dp0 stellt Laufwerksbuchstaben UND verzeichnis dar indem die Batch liegt. Daher werden bei dir wenn du das /temp entfernst die Dateien ncith merh gefunden. wenn du die Batch im gleichen verzeichnis liegen hast ie die andern dateien dann must du also aus deinem
call %~d0\Temp\Tfes.pdf
ein
call %~dp0\Tfes.pdf
machen.
In diesem fall kannst du aber auch eigentlich gleich mit relativen Pfadangaben arbeiten und den aufruf nur so machen:
call Tfes.pdf
Member: bastla
bastla Mar 27, 2008 at 10:59:54 (UTC)
Goto Top
Hallo MichaelS87!

wenn ich die batch jetzt aber in das selbe verzeichneis wie die Tfes.pdf kopiere und das \Temp weg mache, dann geht es nichtmehr. das sollte es doch oder?
Nicht unbedingt - Du erzeugst ja damit dann ein
call D:\Tfes.pdf

Wie miniversum oben schon beschrieben hat, ist der Pfad der Batchdatei unter "%~dp0" zu erreichen - daher müsste es
call %~dp0\Tfes.pdf
heißen.

Falls es auch noch Leerzeichen im Pfad gäbe, zusätzlich Anführungszeichen verwenden:
call "%~dp0\Tfes.pdf"  

Grüße
bastla

[Edit] @miniversum: Sorry, hatte nicht gesehen, dass Du wieder da bist .. [/Edit]
Member: miniversum
miniversum Mar 27, 2008 at 17:45:31 (UTC)
Goto Top
Also wenn die Batch vorher so funktionierte würde ich sagen das eine Änderung zu
set "Start=w\md01 w\md02 w\md03 w\md04 x\md01"
funktionieren sollte.
Das andere würde ich sicherheitshalber lieber nicht machen, denn sollte die Batch in einem Verzeichnis liegen das ein Leerzeichen enthält würde das zu problemen führen. Die alternative dazu würde dann besser so aussehen:
set "Start=w\md01 w\md02 w\md03 w\md04 x\md01"
und zusätzlich folgende Änderung:
for %%S in (%Start%) do for /f "delims=" %%A in ('dir /b /ad "%~dp0\%%S\%Maske%*.*" 2^>nul') do echo %%~nA$%%~fA >>"%List%"

miniversum
Member: Biber
Biber Apr 07, 2008 at 17:58:27 (UTC)
Goto Top
Moin MichaelS87,

ich habe es so versucht, jedoch ohne erfolg.
set "Start=%~dp0\w\md01 %~dp0\w\md02 %~dp0\w\md03 %~dp0\w\md04 %~dp0\x\md01"
Dann können wirklich nur, wie miniversum schon schrieb, Leerzeichen im %dp0-Pfad der Klemmer sein.

Dann müssen wir etwas dicker auftragen:
set "Start="%~dp0\w\md01" "%~dp0\w\md02" "%~dp0\w\md03" "%~dp0\w\md04" "%~dp0\x\md01""

Grüße
Biber