batch-File als Kopier-Routine
Hallo, wer kann mir eine Hilfestellung geben?
ich bin am Erstellen eines kleinen batch-Files. Dieses soll mir automatisch nachts bestimmte Verzeichnisse von a nach b sichern.
mein bisheriges script macht das alles, ich habe jedoch für jedes verzeichnis mehrere Zeilen text, dadurch wird das script sehr lang und unüübersichtlich. Da die befehle bei allen Verzeichnissen gleich sind (erst wird der Inhalt des Zielverzeichnisses gelöscht, dann mit xcopy neu beschrieben, logs erstellt und entsprechend errorlevel weiter gesprungen) dachte ich daran, die verzeichnisse mit set vz_1=c:\test1 u.s.w. zu deklarieren und dann in einer for-schleife alle verzeichnisse abzuarbeiten:
@echo off & setlocal enabledelayedexpansion
set vz_1=c:\test1
set vz_2=c:\test2
set vz_3=c:\test3
set vz_4=c:\test4
for /L %%i in (1 1 4) do (
set "vz=vz_%%i"
echo %!vz!% (Testzwecke) --------> listet am Monitor alle Verzeichnisse richtig auf, jedoch nicht den Inhalt (schreibt also "vz_1" und nicht "c:\test1")
xcopy !vz!\* c:\Backup /D /E /Y /I -------> wie macht man das?
)
der Echo-Befehl zeicht die vz-Variable jetzt richtig an, aber wie stelle ich den Bezug zum zugewiesenen Verzeichnis her?
Danke
Alexander
ich bin am Erstellen eines kleinen batch-Files. Dieses soll mir automatisch nachts bestimmte Verzeichnisse von a nach b sichern.
mein bisheriges script macht das alles, ich habe jedoch für jedes verzeichnis mehrere Zeilen text, dadurch wird das script sehr lang und unüübersichtlich. Da die befehle bei allen Verzeichnissen gleich sind (erst wird der Inhalt des Zielverzeichnisses gelöscht, dann mit xcopy neu beschrieben, logs erstellt und entsprechend errorlevel weiter gesprungen) dachte ich daran, die verzeichnisse mit set vz_1=c:\test1 u.s.w. zu deklarieren und dann in einer for-schleife alle verzeichnisse abzuarbeiten:
@echo off & setlocal enabledelayedexpansion
set vz_1=c:\test1
set vz_2=c:\test2
set vz_3=c:\test3
set vz_4=c:\test4
for /L %%i in (1 1 4) do (
set "vz=vz_%%i"
echo %!vz!% (Testzwecke) --------> listet am Monitor alle Verzeichnisse richtig auf, jedoch nicht den Inhalt (schreibt also "vz_1" und nicht "c:\test1")
xcopy !vz!\* c:\Backup /D /E /Y /I -------> wie macht man das?
)
der Echo-Befehl zeicht die vz-Variable jetzt richtig an, aber wie stelle ich den Bezug zum zugewiesenen Verzeichnis her?
Danke
Alexander
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 126597
Url: https://administrator.de/contentid/126597
Ausgedruckt am: 22.11.2024 um 19:11 Uhr
6 Kommentare
Neuester Kommentar
Servus,
kennst du den Parameter %1 bzw %2?
Wenn das miniscript mit scriptname parameter1 parameter2 aufgerufen wird - kommt eben jenes (parameter1 parameter2) per echo zurück.
Und genau damit kannst du deine immer wiederkehrenden Zeilen parametergesteuert "anders" ausführen.
Gruß
kennst du den Parameter %1 bzw %2?
echo %1 %2
pause
Wenn das miniscript mit scriptname parameter1 parameter2 aufgerufen wird - kommt eben jenes (parameter1 parameter2) per echo zurück.
Und genau damit kannst du deine immer wiederkehrenden Zeilen parametergesteuert "anders" ausführen.
Gruß
Mal ungetestet:
Es können beliebig viele Zeile mit "REM DATA Verzeichnis:" angelegt werden. Die Zeile:
Willst du lieber eine extra Datei dafür haben kannst du die Verzeishcnisse auch direkt untereinander in eine Datei schreiben. Dann mußt du die Zeile 2 so abändern:
@echo off & setlocal
FOR /F "tokens=1* delims=:" %%e in ('findstr /B /L /C:"REM DATA Verzeichnis:" "%~0"') do (
echo Verarbeite: "%%f"
xcopy "%%f"\* c:\Backup /D /E /Y /I
)
REM DATA Verzeichnis:c:\test1
REM DATA Verzeichnis:c:\test2
REM DATA Verzeichnis:c:\test3
REM DATA Verzeichnis:c:\test4
Es können beliebig viele Zeile mit "REM DATA Verzeichnis:" angelegt werden. Die Zeile:
FOR /F "tokens=1* delims=:" %%e in ('findstr /B /L /C:"REM DATA Verzeichnis:" "%~0"') do (
lies dann auch der Batch selbst diese Zeile nahc einander aus, und nutzt sie als Variable %%f.Willst du lieber eine extra Datei dafür haben kannst du die Verzeishcnisse auch direkt untereinander in eine Datei schreiben. Dann mußt du die Zeile 2 so abändern:
FOR /F "tokens=1 delims=" %%f in ('type "Datei.txt"') do (