Batchdatei per Batch konfigurieren
Ich möchte mit einer Konfigurationsbatch Variablen in einer anderen Batchdatei verändern.
Hallo Mitglieder von Administrator.de,
ich hab mich die letzten 2-3 Wochen mit Batchprogrammierung beschäftig und auch viele Beispiele und Hilfestellungen in diesem Forum gefunden/genutzt. Jedoch komm ich nun leider nicht mehr weiter mit meinem Verhackstückeln, da mir leider tiefergehendes Wissen fehlt.
Ich habe eine Batchdatei geschrieben, welche Verzeichnisse bereinigt (unnötige Dateien verschiebt/löscht), in ein Archiv packt (winrar) und anschließen auf CD brennt (xcopy + incd). Damit ich nicht für jede neue Umgebung, in welcher ich diese Batch nutzen will, die komplette Batch umschreiben muss, habe ich alle Pfade über Variablen definiert. Das Programm klappt ganz gut, jedoch kam mir nun die Idee, daß ich doch bestimmt die Konfiguration für jede einzelne Umgebung auch noch automatisieren kann. Die Batch soll mir bestimmte Programmpfade automatisch suchen und dann an die dafür definierten Variablen in der Datensicherungsbatch übergeben. Jedoch stoß ich hier auf die Grenzen meiner Programmteilvorlagenzusammenkopierundeditierkunst.
Die Pfade (Beispiel Winrar) kann ich ja mit folgendem Befehl suchen:
Das zweite Problem ist, wie ich diese Information in die andere Batch reinbekomme. Mit ">" kann ich die Information ja auch in eine andere Datei schreiben.
Mit "findstr" kann ich wohl auch nach der Variable in der anderen Batch selbst suchen, aber ich bekam es leider nicht hin die Beispiele so zu verändern, daß sie machten, was ich will...
Die andere Option die mir noch einfällt, wäre, daß ich irgendwie die ganzen Informationen mit der ersten Batch in ein ini.txt schreibe und dann die Variablen aus der zweiten Batch irgendwie auf diese ini zugreifen lasse.
Wie ihr sicherlich seht, besteht mein Wissen zu Zeit nur aus "Reverse Engineering" ich hoffe ich finde irgendwo "Stapelverarbeitung for Dummys" und kann mich mal richtig in die Materie einarbeiten.
PS.: Hier ist mal der Kopf meiner Datensicherungsbatch:
Hallo Mitglieder von Administrator.de,
ich hab mich die letzten 2-3 Wochen mit Batchprogrammierung beschäftig und auch viele Beispiele und Hilfestellungen in diesem Forum gefunden/genutzt. Jedoch komm ich nun leider nicht mehr weiter mit meinem Verhackstückeln, da mir leider tiefergehendes Wissen fehlt.
Ich habe eine Batchdatei geschrieben, welche Verzeichnisse bereinigt (unnötige Dateien verschiebt/löscht), in ein Archiv packt (winrar) und anschließen auf CD brennt (xcopy + incd). Damit ich nicht für jede neue Umgebung, in welcher ich diese Batch nutzen will, die komplette Batch umschreiben muss, habe ich alle Pfade über Variablen definiert. Das Programm klappt ganz gut, jedoch kam mir nun die Idee, daß ich doch bestimmt die Konfiguration für jede einzelne Umgebung auch noch automatisieren kann. Die Batch soll mir bestimmte Programmpfade automatisch suchen und dann an die dafür definierten Variablen in der Datensicherungsbatch übergeben. Jedoch stoß ich hier auf die Grenzen meiner Programmteilvorlagenzusammenkopierundeditierkunst.
Die Pfade (Beispiel Winrar) kann ich ja mit folgendem Befehl suchen:
dir c:\winrar.exe /s /b
Hier stoße ich schon auf die erste Schwierigkeit. Was ist, wenn es mehrere Festplatten gibt, kann ich direkt in allen Laufwerken suchen?Das zweite Problem ist, wie ich diese Information in die andere Batch reinbekomme. Mit ">" kann ich die Information ja auch in eine andere Datei schreiben.
Mit "findstr" kann ich wohl auch nach der Variable in der anderen Batch selbst suchen, aber ich bekam es leider nicht hin die Beispiele so zu verändern, daß sie machten, was ich will...
Die andere Option die mir noch einfällt, wäre, daß ich irgendwie die ganzen Informationen mit der ersten Batch in ein ini.txt schreibe und dann die Variablen aus der zweiten Batch irgendwie auf diese ini zugreifen lasse.
Wie ihr sicherlich seht, besteht mein Wissen zu Zeit nur aus "Reverse Engineering" ich hoffe ich finde irgendwo "Stapelverarbeitung for Dummys" und kann mich mal richtig in die Materie einarbeiten.
PS.: Hier ist mal der Kopf meiner Datensicherungsbatch:
REM =======================VARIABLEN=======================
:: Datensicherungspfade:
set DaSi=D:\DaSi\
set Backupordner=%DaSi%Backup\%DATE:~-4%%DATE:~-7,2%%DATE:~-10,2%\
set Status=%Backupordner%Status.txt
:: Systempfade:
set Winrar=c:\Programme\Winrar\winrar
set CDROM=e:\
:: Handelpfade:
set WaWi=c:\Datenbankpfad
set Inventur=%WaWi%V3\Database\Inventory\
:: Sicherungsname
set Backup=Backup_Name.rar
REM ======================PROGRAMMTEIL=====================
:: Datensicherungspfade:
set DaSi=D:\DaSi\
set Backupordner=%DaSi%Backup\%DATE:~-4%%DATE:~-7,2%%DATE:~-10,2%\
set Status=%Backupordner%Status.txt
:: Systempfade:
set Winrar=c:\Programme\Winrar\winrar
set CDROM=e:\
:: Handelpfade:
set WaWi=c:\Datenbankpfad
set Inventur=%WaWi%V3\Database\Inventory\
:: Sicherungsname
set Backup=Backup_Name.rar
REM ======================PROGRAMMTEIL=====================
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 118724
Url: https://administrator.de/forum/batchdatei-per-batch-konfigurieren-118724.html
Ausgedruckt am: 14.04.2025 um 10:04 Uhr
4 Kommentare
Neuester Kommentar
Herzlich willkommen im Forum M!chael !
Für die suche hätte ich da meine StartApps.cmd die sucht standartmäßig meine PortableApps und startet diese bzw die eingegebene Anwendungen. Damit des nicht immer ewig dauert, habe ich eine Breitensuche eingebaut.
Vllt kannst Du die dafür brauchen.
quatsch ich wollte noch nicht senden bin noch am schreiben wenn das zu lesen ist.
Für die suche hätte ich da meine StartApps.cmd die sucht standartmäßig meine PortableApps und startet diese bzw die eingegebene Anwendungen. Damit des nicht immer ewig dauert, habe ich eine Breitensuche eingebaut.
Vllt kannst Du die dafür brauchen.
SartApps.cmd
@echo off & setlocal
@call :clz 5
echo Bitte Programm zum starten eingeben
@call :lz 3
echo um PortableApps zu starten
@call :lz 3
echo nur Enter druecken
@call :lz 6
echo warte auf Eingabe
set /p Anwendung=
if "%Anwendung%" == "" (
set Anwendung=StartPortableApps.exe
set Datei=PortableAppsPlatform.exe
goto :test
)
if not %Anwendung:~-4% == .exe set "Anwendung=%Anwendung%.exe"
for /f "delims=" %%i in ("%Anwendung%") do set "Datei=%%~ni.exe "
:test
@call :clz 5
echo %Datei% wird analysiert
for /f %%i in ('tasklist ^| find /i "%Datei%"') do (
if "%%i" == "%Datei%" (
@call :lz 4
echo %Datei% laeuft bereits
goto :wt
)
)
@call :lz
echo Startversuch
%Datei% 2>nul
if %errorlevel% == 0 goto :Fertig
@call :clz 5
echo %Datei% wird gesucht!
set /a SV=0
:suche
set /a Ay=0
set /a Ax=0
for %%i in (C D E F G H I J K L M N O P Q R S T U V W X Y Z) do (
if exist %%i:\ (
if not "%bck%" == "1" (
cd %%i:\
%%i:
call :File %%i:\
)
)
)
if "%bck%" == "1" goto :Fertig
set /a SV+=1
if %Ax% == 0 goto :fmld
goto :suche
:Folder
for /f "delims=" %%i in ('dir /a:d-h-s /b 2^>nul') do if not "%bck%" == "1" call :UFolder "%%i"
goto :eof & set bck=%bck%
:UFolder
if "%bck%" == "1" goto :eof & set bck=%bck% & set "Ax=%Ax%"
set /a Ay+=1
cd "%~1"
if not %errorlevel% == 0 (
set /a Ay-=1
echo Ordner "%~1" wird uebersprungen.
goto :eof & set bck=%bck% & set "Ax=%Ax%"
)
call :File
cd..
set /a Ay-=1
goto :eof & set bck=%bck%
:File
if %SV% == %Ay% goto :srchFile
call :Folder
goto :eof & set bck=%bck% & set "Ax=%Ax%"
:srchFile
set /a Ax+=1
for /f "delims=" %%i in ('dir /a:-d-h-s /b "%Anwendung%" 2^>nul') do (
if not "%bck%" == "1" (
if "%Anwendung%" == "%%~nxi" %%i
call :clz 5
echo "%%~nxi"
call :lz 3
echo wird gestartet
set bck=1
)
)
goto :eof & set bck=%bck% & set "Ax=%Ax%"
:Fertig
call :clz 5
echo %Datei% wurde gestartet
call :lz
echo Fertig
:wt
if "%1" == "" (set png=6) else set png=%1
ping localhost -n %png% > nul
goto :eof
:clz
cls
call :lz %1
goto :eof
:lz
@if "%1" == "" (set lz=2) else set lz=%1
:lzn
@set /a lz-=1
echo.
@if %lz% == 0 (goto :eof) else goto :lzn
:fmld
call :clz 5
if "%Anwendung%" == "StartPortableApps.exe" (echo USB Stick nicht gesteckt!) else echo %Anwendung% nicht gefunden!
goto :eof
quatsch ich wollte noch nicht senden
So jetzt nochmal richtig.
wieso willst Du erst eine andere Batch erstellen wenn Du doch die Variablen in Deiner Batch dafür hast?
Bau das doch alles in eine Batch ein, die aktive Batch kann doch genauso die Erstellte Ini auslesen bzw Du brauchst diese Ini erst gar nicht.
Für andere Umgebungen... wie sind diese definiert?
wenn Du Deinen Datensicherungsordner immer auf D:\ hast woher weist Du das D:\ existiert. solltest Du (/empfehle ich Dir) also auch eine AUTO abänderung mit ein(zu)bauen.
Ähm... durch den Kopf deiner Batch kann man nicht alle Infos entnehmen!
welche Variablen brauchst Du im weiteren Verlauf der Batch ?
zB
kannst Du zu
verkürzen wenn Du die Variablen
DaSi
Backupordner
nicht mehr weiter benötigst.
um also Winrar immer den Pfad als Autosearch zu übergeben:
für deinen Datensicherungsordner wäre das dann entsprechend:
Dein Brennerlaufwerk könntest Du wenn/weil Variabeler Buchstabe mit
definieren.
wenn Du die Batch nur vom CMD ausfüren willst mit
Batchname.bat Brennerbuchstabe
kannst Du
verwenden.
so mehr infos hab ich nicht von Dir bekommen....
Gruß Phil
wieso willst Du erst eine andere Batch erstellen wenn Du doch die Variablen in Deiner Batch dafür hast?
Bau das doch alles in eine Batch ein, die aktive Batch kann doch genauso die Erstellte Ini auslesen bzw Du brauchst diese Ini erst gar nicht.
Für andere Umgebungen... wie sind diese definiert?
wenn Du Deinen Datensicherungsordner immer auf D:\ hast woher weist Du das D:\ existiert. solltest Du (/empfehle ich Dir) also auch eine AUTO abänderung mit ein(zu)bauen.
Ähm... durch den Kopf deiner Batch kann man nicht alle Infos entnehmen!
welche Variablen brauchst Du im weiteren Verlauf der Batch ?
zB
set DaSi=D:\DaSi\
set Backupordner=%DaSi%Backup\%DATE:~-4%%DATE:~-7,2%%DATE:~-10,2%\
set Status=%Backupordner%Status.txt
set Backupordner=%DaSi%Backup\%DATE:~-4%%DATE:~-7,2%%DATE:~-10,2%\
set Status=%Backupordner%Status.txt
kannst Du zu
set Status=D:\DaSi\%DATE:~-4%%DATE:~-7,2%%DATE:~-10,2%\%Status.txt
DaSi
Backupordner
nicht mehr weiter benötigst.
um also Winrar immer den Pfad als Autosearch zu übergeben:
@echo off & enabledelayedexpansion
for %%i in (C D E F G H I J K L M N O P Q R S T U V W X Y Z) do (
if not defined Winrar if exist %%i:\ (
for /f "delims=" %%i in ('dir /a:-d-h-s /b /s Winrar.exe 2^>nul') do set Winrar=%%i
)
)
für deinen Datensicherungsordner wäre das dann entsprechend:
@echo off & enabledelayedexpansion
for %%i in (C D E F G H I J K L M N O P Q R S T U V W X Y Z) do (
if not defined Inventur if exist %%i:\ (
for /f "delims=" %%i in ('dir /a:d-h-s /b /s Inventory 2^>nul ^| find "V3\Database\Inventory\" ') do set Inventur=%%i
)
)
Dein Brennerlaufwerk könntest Du wenn/weil Variabeler Buchstabe mit
:Brenner
set /p CDROM=Bitte Laufwerksbuchstabe vom Brenner eingeben!
if not defined CDROM goto :Brenner
set CDROM=%CDROM:~0,1%:\
wenn Du die Batch nur vom CMD ausfüren willst mit
Batchname.bat Brennerbuchstabe
kannst Du
set CDROM=%~1
if not defined CDROM (echo Brennerlaufwerkseingabe fehlt! & ping localhaost -n 4 >nul & exit /b 1)
set CDROM=%CDROM:~0,1%:\
so mehr infos hab ich nicht von Dir bekommen....
Gruß Phil
so nun komm ich mal hierher...
bedeutet jetzt? das die Sicherung funktioniert aber noch nicht auf allen Pcs eingerichtet ist oder ?
jedenfalls brauchst Du eine Installierungshilfe für die Pfadangleichung wegen eines sagen wir "Programmupdates"!
es ist dann in diesem Fall bestimmt doch besser jeweils eine INI Datei anzulegen als jedesmal die Batchdateie(n) zu modifizieren.
das hat dann den Vorteil, wenn wieder ein "Programmupdate" fällig ist, es geht schneller und sauberer und braucht keine erneute Installhilfe.
So ganz ohne manuellen Eingriff wirst Du die Installation nicht hinbekommen, es sei denn von der PacketWriting Software wissen wir den Namen
um den Brennerlaufwerksbuchstaben zu konfigurieren. Mit irgendetwas musst Du ja die Backups auf die RWs bekommen!
das würde eventuell über folgende Befehle zum testen gehen:
Du kannst noch den Laufwerksbuchstaben über den Registryeintrag von einer Brennersoftware bekommen (wenn überall nero oder andere Brennsoftware da ist gehts leicht rauszufinden. sonst weis ich echt nicht wie der Buchstabe ohne manuelle Eingabe zu bekommen ist.
die einzigartigen Backupnamen könntest Du:
Die (temp)Pfade der Sicherungsordner sind kein Problem diese zu finden genauso wie die Pfade vom Packprogramm.
so warte auf Feedback
bedeutet jetzt? das die Sicherung funktioniert aber noch nicht auf allen Pcs eingerichtet ist oder ?
jedenfalls brauchst Du eine Installierungshilfe für die Pfadangleichung wegen eines sagen wir "Programmupdates"!
es ist dann in diesem Fall bestimmt doch besser jeweils eine INI Datei anzulegen als jedesmal die Batchdateie(n) zu modifizieren.
das hat dann den Vorteil, wenn wieder ein "Programmupdate" fällig ist, es geht schneller und sauberer und braucht keine erneute Installhilfe.
So ganz ohne manuellen Eingriff wirst Du die Installation nicht hinbekommen, es sei denn von der PacketWriting Software wissen wir den Namen
um den Brennerlaufwerksbuchstaben zu konfigurieren. Mit irgendetwas musst Du ja die Backups auf die RWs bekommen!
das würde eventuell über folgende Befehle zum testen gehen:
- VOL wenn keine CD drin errolevel 1 aber wenn Cardreader Installiert sind oder noch ein CD laufwerk ist eine eingabe erforderlich.
- MOUNTVOL gibt so eine Anzeige mit allen eingehangenen Laufwerken aus ich weis nicht wie das Aufgelistet wird aber eine Zeile Vor A:\ ist bei mir das Brennerlaufwerk bzw CDLaufwerk kann natürlich von PC zu PC Verschieden sein.
- CHKDSK gibt errorlevel 3 wenn keine CD drin ist (Problem Cardreader und weitere CD Laufwerke) meldung wenn CD drin ist, das RAW Dateisysteme nicht unterstützt werden.
- DIR bei suche nach autorun.inf und Vorhandensein auf CD erfolg, oder bei suche nach einzigartiger datei auf CD vllt Backupdatei? (CD muss drin sein sonst Meldung Gärät nicht bereit.)
Du kannst noch den Laufwerksbuchstaben über den Registryeintrag von einer Brennersoftware bekommen (wenn überall nero oder andere Brennsoftware da ist gehts leicht rauszufinden. sonst weis ich echt nicht wie der Buchstabe ohne manuelle Eingabe zu bekommen ist.
die einzigartigen Backupnamen könntest Du:
- über das Auslesen der Mac-Adresse der (vorhandenen) Netzwerkkarte. Befehl IPCONFIG -> bleibt immer gleich auch nach Neuinstallation vom System
- dem Installierungdatum vom System und / oder anderer Software aus der Registry bekommen.
- der ProductID vom System (was aber vllt bei mehreren gleichen PCs nicht unterschiedlich sein muss wenn OEM-Ware aus der Registry
- den WPA Key oder SigningHash (hat nichts mit WLAN zu tun) auch aus der Registry ->wäre das einfachste
- Über eine einzigartige gespeicherte Zeichenfolge in einer Datei -> wenn Datei abhanden kommt ist das schlecht
- über Seriennummern des Arbeitsspeichers (auch des Herstellungsdatumes) -> externe Software erforderlich CPUID
Die (temp)Pfade der Sicherungsordner sind kein Problem diese zu finden genauso wie die Pfade vom Packprogramm.
so warte auf Feedback