Batch Daten aus ini in Variable schreiben

MrToastbrot

Lt. Junior Grade
Registriert
März 2010
Beiträge
495
Guten Abend zusammen.

Ich möchte mir ein kleines Batch schreiben, welches mir Backups macht. Es baut folgendermassen auf:
- konfigurator.bat schreibt backupquelle und -ziel in getrennte .ini-files.
- backup.bat lädt die daten der .ini in eine Variable und führt anschliessend das Backup aus

der Code der konfigurator.bat sieht so aus:
Code:
@echo off
title backup v.1.2
set /p backupdir=Bitte geben Sie den Speicherort der zu sichernden Daten an: 
echo %backupdir%>bbdir.ini
echo.
set /p backupdestdir=Bitte geben Sie den Zielort des Backups an: 
echo %backupdestdir%>bbdest.ini

Der Inhalt einer .ini speichert nur den Text der eingegeben wird. Beispiel:
Code:
C:\Users

Nun möchte ich im Backupbatch die Daten einlesen und in eine Variable schreiben, die dann im Robocopy ausgeführt wird. Ich habe viel gegooglt aber noch nichts funktionierendes gefunden. Kann mir jemand zeigen, was ich brauche um das ganze einzulesen?
Die backup.bat sieht momentan so aus:
Code:
@echo off
title backup v.1.2
echo Lese Voreinstellungen aus...
type bbdir.ini>%backupdir%
type bbdest.ini>%backupdestdir%
echo Auslesen abgeschlossen. Beginne mit Kopiervorgang.
robocopy %backupdir% %backupdestdir%\%date% /MIR /FFT /NS /NC /NDL

der Type-befehl funktioniert wohl, aber nicht von ">%backupdir%" an. Habe im Internet viel mit der For /f schleife gelesen. Die habe ich aber nicht funktionierend hingebracht.

Noch einen schönen Abend und grüsse
MrToastbrot
 
der For-Befehl ist nicht so kompliziert ;-)

Variablen setzt mal immer mit SET. ZB. per

Set /P Variable=<Datei.ini

Das < Zeichen schreibt den Inhalt in die Variable.

Dein Problem ist eher der dezentrale Speicherort der INI-Dateien, hier verwendest du am besten eine Systemvariable. Beispiel mit der Systemvariable WinDir:

Code:
@Echo OFF&Setlocal
title backup v.1.2

REM Konfiguration

IF not exist "%Windir%\bbdir.ini" (Goto Anlegen) Else goto Weiter

:Anlegen
set /p backupdir=Bitte geben Sie den Quellpfad der zu sichernden Daten an: 
echo %backupdir%>"%Windir%\bbdir.ini"
echo.

:Weiter
IF not exist "%Windir%\bbdest.ini" (Goto Anlegen2) Else Goto Auslesen

:Anlegen2
set /p backupdestdir=Bitte geben Sie den Zielpfad des Backups an: 
echo %backupdestdir%>"%Windir%\bbdest.ini"

:Auslesen
REM wir kommen zum Auslesen mit ^For und ^Type

For /F "Tokens=*" %%i IN ('Type "%Windir%\bbdir.ini"') DO Set backupdir="%%~i"
For /F "Tokens=*" %%i IN ('Type "%Windir%\bbdest.ini"') DO Set Backupdestdir="%%~i"
Pause

robocopy %backupdir% %backupdestdir%\%date% /MIR /FFT /NS /NC /NDL
Pause

Das stellt nur jetzt eine mögliche Variante da.
 
Vielen Dank für deine Antwort. Habe mich dumm und dämlich gesucht und den Befehl einfach nicht begriffen... :P
ich habe noch 4 Fragen, möchte mich ein bisschen ins "batchen" einarbeiten
1. Für was steht das &setLocal in der ersten Zeile?
2. Was macht /F genau? Habe nur gelesen, dass dies nötig seit in eine Variable zu schreiben
3. was macht "Tokens=*"
4. Warum %%i? Kann man da auch jeden beliebigen anderen Buchstaben verwenden?

Wünsche dir noch einen schönen Abend und danke viel mal für deine Antwort
 
1. Für was steht das &setLocal in der ersten Zeile?

Setlocal ist in die Batch eine Anweisung lokale Variablen innerhalb zu verwenden, das Gegenstück dazu ist Endlocal. Ist mehr oder weniger Gewohnheit bei mir immer Setlocal zu verwenden.

2. Was macht /F genau? Habe nur gelesen, dass dies nötig seit in eine Variable zu schreiben
Die /F Option behandelt eine Anweisung für eine Folgebearbeitung innerhalb der Klammer-Anweisung. Beispiel für die CMD:

For /F "Tokens=*" %i IN ("Das ist mein Test") DO Echo "%i"
3. was macht "Tokens=*"

Tokens ist eine Anweisung innerhalb des FOR Befehls, wie mit der Ausgabe umgegangen wird. Tokens orientiert sich an Trennzeichen(siehe Delims). * bewirkt, dass alle Zeichen der Ausgabe in einer Zeile berücksichtigt werden.

For /F "Tokens=1" %i IN ("Das ist mein Test") DO Echo "%i"

Wenn man nun mehrere Tokens verwenden will:

For /F "Tokens=3,4" %a IN ("Das ist mein Test") DO Echo "%a %b"

. Warum %%i? Kann man da auch jeden beliebigen anderen Buchstaben verwenden?

Da %i ein implizierte Anweisung ist, eignet sich diese für Pfadanweisungen viel besser, da man diese auch auflösen kann.
 
Zurück
Oben