Ortunabhängige Batchdatei

Shinsaja

Grand Admiral Special
Mitglied seit
24.03.2009
Beiträge
4.198
Renomée
87
Standort
Zwickau
Ich hab mir für Visual C++ eine Batch geschrieben, womit alle Versionen ohne Benutzereingabe installiert werden. Allerdings muss ich den Ordner immer an den angegeben Ort kopieren. Ich würde das aber gern von jedem Ort aus ohne vorherige Änderung machen können. Wie stell ich das am besten an?

"C:\Visual C++\2005\vcredist_x86.exe" /Q
"C:\Visual C++\2005\vcredist_x64.exe" /Q

"C:\Visual C++\2008\vcredist_x86.exe" /qb
"C:\Visual C++\2008\vcredist_x64.exe" /qb

"C:\Visual C++\2010\vcredist_x86.exe" /passive /norestart
"C:\Visual C++\2010\vcredist_x64.exe" /passive /norestart

"C:\Visual C++\2012\vcredist_x86.exe" /passive /norestart
"C:\Visual C++\2012\vcredist_x64.exe" /passive /norestart

"C:\Visual C++\2013\vcredist_x86.exe" /install /passive /norestart
"C:\Visual C++\2013\vcredist_x64.exe" /install /passive /norestart

"C:\Visual C++\2015\vcredist_x86.exe" /install /passive /norestart
"C:\Visual C++\2015\vcredist_x64.exe" /install /passive /norestart

"C:\Visual C++\2017\vcredist_x86.exe" /install /passive /norestart
"C:\Visual C++\2017\vcredist_x64.exe" /install /passive /norestart
 
Dafür musst du mit Relative Pfade arbeiten, nicht mit Absolute.
Die Batch Datei muss dann aber in relation zu den Unterordner sein, in deinem Fall im Visual C++ Ordner:

".\2005\vcredist_x86.exe" /Q
".\2005\vcredist_x64.exe" /Q

".\2008\vcredist_x86.exe" /qb
".\2008\vcredist_x64.exe" /qb

".\2010\vcredist_x86.exe" /passive /norestart
".\2010\vcredist_x64.exe" /passive /norestart

".\2012\vcredist_x86.exe" /passive /norestart
".\2012\vcredist_x64.exe" /passive /norestart

".\2013\vcredist_x86.exe" /install /passive /norestart
".\2013\vcredist_x64.exe" /install /passive /norestart

".\2015\vcredist_x86.exe" /install /passive /norestart
".\2015\vcredist_x64.exe" /install /passive /norestart

".\2017\vcredist_x86.exe" /install /passive /norestart
".\2017\vcredist_x64.exe" /install /passive /norestart
 
Zuletzt bearbeitet:
Man sollte nicht mit relativen Pfaden arbeiten, wenn es nicht absolut sein muss, weil sie abhängig sind vom Arbeitsverzeichnis. Sinnvoller und besser ist es, absolute Pfade zusammenzubauen. Das gilt übrigens unabhängig von der Programmier- oder Skriptsprache. In der CMD gibt's so "schöne" Kürzel wie "%~dp0" für das Laufwerk und den Pfad des Skripts selbst.

Übrigens: start /wait ist in diesem Fall auch angebracht, damit nicht alle Installationen gleichzeitig starten.

In Summe:
Code:
@echo off

setlocal
set "d=%~dp0"

start /wait "" "%d%2005\vcredist_x86.exe" /Q
start /wait "" "%d%2005\vcredist_x64.exe" /Q

start /wait "" "%d%2008\vcredist_x86.exe" /qb
start /wait "" "%d%2008\vcredist_x64.exe" /qb

start /wait "" "%d%2010\vcredist_x86.exe" /passive /norestart
start /wait "" "%d%2010\vcredist_x64.exe" /passive /norestart

start /wait "" "%d%2012\vcredist_x86.exe" /passive /norestart
start /wait "" "%d%2012\vcredist_x64.exe" /passive /norestart

start /wait "" "%d%2013\vcredist_x86.exe" /install /passive /norestart
start /wait "" "%d%2013\vcredist_x64.exe" /install /passive /norestart

start /wait "" "%d%2017\vcredist_x86.exe" /install /passive /norestart
start /wait "" "%d%2017\vcredist_x64.exe" /install /passive /norestart 
endlocal
und die Batch muss im Verzeichnis "C:\Visual C++" liegen. Die 2015er hab ich weggelassen, weil sie sowieso komplett von der 2017er ersetzt wird. Ich benutze übrigens etwas andere Schalter: /quiet /norestart (ab 2012er), /q /norestart (2010) und /q (2008 und älter).

Grüße
Dalai
 
Danke für die Antworten. Habs jetzt, wie ich es brauch.

@echo off

setlocal
set "d=%~dp0"

start /wait "" "%d%2005\vcredist_x86.exe" /q
start /wait "" "%d%2005\vcredist_x64.exe" /q

start /wait "" "%d%2008\vcredist_x86.exe" /q
start /wait "" "%d%2008\vcredist_x64.exe" /q

start /wait "" "%d%2010\vcredist_x86.exe" /q /norestart
start /wait "" "%d%2010\vcredist_x64.exe" /q /norestart

start /wait "" "%d%2012\vcredist_x86.exe" /passive /norestart
start /wait "" "%d%2012\vcredist_x64.exe" /passive /norestart

start /wait "" "%d%2013\vcredist_x86.exe" /passive /norestart
start /wait "" "%d%2013\vcredist_x64.exe" /passive /norestart

start /wait "" "%d%2015\vcredist_x86.exe" /passive /norestart
start /wait "" "%d%2015\vcredist_x64.exe" /passive /norestart

start /wait "" "%d%2017\vcredist_x86.exe" /passive /norestart
start /wait "" "%d%2017\vcredist_x64.exe" /passive /norestart
endlocal
 
Zurück
Oben Unten