Backupscript soll automatisch die nächsten Unterordner finden und als Variable übergeben
Schönen guten Tag und frohe Weihnachten!
Ich habe einen Foto-Ordner mit Unterordner in Jahren unterteilt.
D:\Eigene Dateien\Bilder\2016
D:\Eigene Dateien\Bilder\2015
D:\Eigene Dateien\Bilder\2014
usw.
Eine Batch übernimmt die Sicherung der einzelnen Ordner. So dass ich pro Ordner-Jahr eine *.7z habe. Also - ich habe pro Jahr eine Batch, die ich manuell einzeln hintereinander ausführe.
Mir kam nun die Idee, ob es nicht ginge, nur den Ordner D:\Eigene Dateien\Bilder anzugeben, um damit automatisiert den Gesamten Pfad, wie oben beschrieben, meiner Batch als Variable zu übergeben. Also eine Schleife bis alle Unterordner abgearbeitet wurden.
Ist das möglich?
Hier mal der Anfang meiner Batch:
In Zeile 5 soll der gefundene Pfad aus der Schleife als Variable eingetragen werden:
set SF=%PfadausSchleife% (z.B: D:\Eigene Dateien\Bilder\2016)
Viele Grüße
Ich habe einen Foto-Ordner mit Unterordner in Jahren unterteilt.
D:\Eigene Dateien\Bilder\2016
D:\Eigene Dateien\Bilder\2015
D:\Eigene Dateien\Bilder\2014
usw.
Eine Batch übernimmt die Sicherung der einzelnen Ordner. So dass ich pro Ordner-Jahr eine *.7z habe. Also - ich habe pro Jahr eine Batch, die ich manuell einzeln hintereinander ausführe.
Mir kam nun die Idee, ob es nicht ginge, nur den Ordner D:\Eigene Dateien\Bilder anzugeben, um damit automatisiert den Gesamten Pfad, wie oben beschrieben, meiner Batch als Variable zu übergeben. Also eine Schleife bis alle Unterordner abgearbeitet wurden.
Ist das möglich?
Hier mal der Anfang meiner Batch:
@echo off
REM ---- Quell-Pfad bitte anpassen ----
REM -----------------------------------
set SF=D:\Eigene Dateien\Bilder\2016
echo Backup von: %SF%
REM ---- Backup-Pfad bitte anpassen ----
REM ------------------------------------
set BF=T:\Dateiversionsbackup
In Zeile 5 soll der gefundene Pfad aus der Schleife als Variable eingetragen werden:
set SF=%PfadausSchleife% (z.B: D:\Eigene Dateien\Bilder\2016)
Viele Grüße
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 324854
Url: https://administrator.de/contentid/324854
Ausgedruckt am: 19.11.2024 um 13:11 Uhr
7 Kommentare
Neuester Kommentar
Klar geht das. Hiermit:
Der Schnipsel verarbeitet Jeden Ordner in "%DeinePfadVariable%"
Der Pfad des Ordners, also
D:\Eigene Dateien\Bilder\2016
D:\Eigene Dateien\Bilder\2015
D:\Eigene Dateien\Bilder\2014
ist dabei %%A.
Also musst du nur noch 7z a %%A --parameter --usw
eingeben.
Dir auch frohe Weihnachten
lg clragon
FOR /F "delims=" %%A IN ('dir /b /ad "%DeinePfadVariable%"') do (
:: deine Befehle
)
Der Schnipsel verarbeitet Jeden Ordner in "%DeinePfadVariable%"
Der Pfad des Ordners, also
D:\Eigene Dateien\Bilder\2016
D:\Eigene Dateien\Bilder\2015
D:\Eigene Dateien\Bilder\2014
ist dabei %%A.
Also musst du nur noch 7z a %%A --parameter --usw
eingeben.
Dir auch frohe Weihnachten
lg clragon
Die einfachste Version ist dies :
Dabei ist zu beachten das hierbei keien Sortierung der Ordner erfolgt
(abgesehen von der auf ntfs-Laufwerken immanenten).
Eine genauere Selektion auf max vierstellige numerische Ordner mit 20 am Anfang:
@Echo off
Set Base="D:\Eigene Dateien\Bilder"
Pushd %Base%
For /d %%A in (*) Do 7z.exe a "%%A.7z*" "%%A\*"
popd
(abgesehen von der auf ntfs-Laufwerken immanenten).
Eine genauere Selektion auf max vierstellige numerische Ordner mit 20 am Anfang:
@Echo off
Set Base="D:\Eigene Dateien\Bilder"
Pushd %Base%
For /f "delims=" %%A in (
'DIr /B /AD ????^|Findstr "20[0-9][0-9]"'
) Do 7z.exe a "%%A.7z*" "%%A\*"
popd
Die Batch läuft auch zwei mal durch. Aber es wird immer nur Test2 übergeben.
Das ist klar weil wenn du mit SET innerhalb einer FOR-Schleife eine Variable definierst diese entweder nur mit call set oder delayedexpansion und Ausrufezeichen beim Abrufen der Variablen zur Laufzeit aufgelöst werden!
setlocal ENABLEDELAYEDEXPANSION
set "SF1=c:\pflege"
FOR /F "delims=" %%A IN ('dir /b /ad "%SF1%"') do (
set "SF3=%SF1%\%%A"
echo Backup von: !SF3!
)
Tutorial zur FOR-Schleife
Dann verstehst du den Unterschied zwischen dem Auflösen der Variablen zur Laufzeit und vor dem Ausführen.
Dazu schalte DelayedExpansion vor dieser Zeile ab
setlocal disabledelayedexpansion