Strings aus Datei in Variablen einlesen, keine festen Zeilenpositionen
Eine ausgelesene Anzahl an Pfadnamen in eine Variable aufnehmen und anschließend per WinRAR abarbeiten
Halli Hallo,
irgendwie komme ich mit dem Thema nicht mehr ganz klar. Habe schon seit Jahren nichts mehr mit Batch-Dateien gemacht.
Folgendes Scenario:
Jeder Mitarbeiter bei uns hat auf seinem Home-Dir eine Datei liegen, in der er angibt, welche Pfade aus diesem speziell archiviert werden sollen. Ist für die jenigen, die kein Notebook bekommen, da sie es nur sehr selten benötigen. Die Datei hat dieses Format:
BackupLocations=2
BackupLocation1=d:\foo\bar
BackupLocation2=e:\foobar\unfug
Die Verzeichnisse werden dann jeweils per WinRAR archiviert und auf einen USB-Stick verfrachtet.
Alle meine Versuche schlugen bisher fehl. Ich vermute, dass ich von der Lösung relativ weit weg bin (der berühmte Holzweg).
Würde mich sehr über Eure Lösungen freuen.
MfG
Robert
Halli Hallo,
irgendwie komme ich mit dem Thema nicht mehr ganz klar. Habe schon seit Jahren nichts mehr mit Batch-Dateien gemacht.
Folgendes Scenario:
Jeder Mitarbeiter bei uns hat auf seinem Home-Dir eine Datei liegen, in der er angibt, welche Pfade aus diesem speziell archiviert werden sollen. Ist für die jenigen, die kein Notebook bekommen, da sie es nur sehr selten benötigen. Die Datei hat dieses Format:
BackupLocations=2
BackupLocation1=d:\foo\bar
BackupLocation2=e:\foobar\unfug
Die Verzeichnisse werden dann jeweils per WinRAR archiviert und auf einen USB-Stick verfrachtet.
Alle meine Versuche schlugen bisher fehl. Ich vermute, dass ich von der Lösung relativ weit weg bin (der berühmte Holzweg).
Würde mich sehr über Eure Lösungen freuen.
MfG
Robert
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 85964
Url: https://administrator.de/forum/strings-aus-datei-in-variablen-einlesen-keine-festen-zeilenpositionen-85964.html
Ausgedruckt am: 02.05.2025 um 10:05 Uhr
5 Kommentare
Neuester Kommentar
Hallo meyerro und willkommen im Forum!
Da Du leider nicht so genau beschreibst, wie die ausgelesenen Pfade konkret verwendet werden sollen, nur ein allgemeines Beispiel:
In das Unterprogramm ":ProcessPath" kannst Du die für die Verarbeitung eines einzelnen Verzeichnisses erforderlichen Befehle schreiben, wobei das Verzeichnis selbst als "%~1" angesprochen wird.
Die Anzahl der Verzeichnisse wird übrigens nicht ausgelesen (=übersprungen), da ohnehin alle folgenden Zeilen einzeln gelesen und verarbeitet werden.
Grüße
bastla
Da Du leider nicht so genau beschreibst, wie die ausgelesenen Pfade konkret verwendet werden sollen, nur ein allgemeines Beispiel:
@echo off & setlocal
set "Back=H:\BackupLocations.txt"
for /f "usebackq skip=1 tokens=2 delims==" %%i in ("%Back%") do call :ProcessPath "%%i"
echo\
echo Verarbeitung aller Verzeichnisse beendet.
goto :eof
:ProcessPath
echo Verarbeite Verzeichnis %~1 ...
goto :eof
Die Anzahl der Verzeichnisse wird übrigens nicht ausgelesen (=übersprungen), da ohnehin alle folgenden Zeilen einzeln gelesen und verarbeitet werden.
Grüße
bastla
Moin meyerro und bastla,
kleiner Änderungsvorschlag.
Die Mimik, die erste Zeile unbesehen zu überspringen und alle folgenden Zeilen als gewollte Backup-Pfade zu interpretieren bringt - ja, auch einem Batch- einige meiner Nackenhärchen zum Senkrechtstehen.
Es kann nach meinem schnipsel-ästhetischen Empfinden weder sein, dass
Die Abhängigkeit von der BackupLocation-Anzahl-Zeile und den Pfad-Zeilen ließe sich sinngemäß so abbilden:
Dieser Batch würde abhängig von der zuerst ausgelesenen "BackupLocations=2"-Zeile die "Backuplocation1" und "BackupLocation2" -Angaben rausflöhen.
Auch wenn die Gesamt-Ini-Datei so aussieht:
Grüße
Biber
kleiner Änderungsvorschlag.
Die Mimik, die erste Zeile unbesehen zu überspringen und alle folgenden Zeilen als gewollte Backup-Pfade zu interpretieren bringt - ja, auch einem Batch- einige meiner Nackenhärchen zum Senkrechtstehen.
Es kann nach meinem schnipsel-ästhetischen Empfinden weder sein, dass
- Kommentare oder Bedienanweisungen in einer *.ini-Datei so implizit unmöglich gemacht werden
- oben in der Anzahl-Zeile stehen kann: "BackupLocations=2" und dennoch werden danach 27 BackupLocation-Pfad-Zeilen abgearbeitet statt 2.
Die Abhängigkeit von der BackupLocation-Anzahl-Zeile und den Pfad-Zeilen ließe sich sinngemäß so abbilden:
:: ---snipp BackupLocaotions.bat
@FOR %%b in ("E:Work\BackupLocations.txt") do @if exist "%%~b" @(
FOR /F "tokens=2 delims==" %%i in ('findstr /i /b "BackupLocations" "%%~b"') DO @(
FOR /L %%j in (1,1, %%i) DO @(
FOR /f "tokens=2 delims==" %%k in ('findstr /i /b "BackupLocation%%j" "%%~b"') DO @echo winrar...%%k
)))
Dieser Batch würde abhängig von der zuerst ausgelesenen "BackupLocations=2"-Zeile die "Backuplocation1" und "BackupLocation2" -Angaben rausflöhen.
Auch wenn die Gesamt-Ini-Datei so aussieht:
; BackupLocations.txt
## Wird bei der Archivierung der Notebook-MitarbeiterInnen-Dateien benutzt.
## Format:
## BackupLocations=n --- gibt an, wieviele Pfade gesichert werden sollen
## BackupLocations=4 wird interpretiert als "Archiviere BackupLocation1...BackupLocation4
BackupLocations=2
BackupLocation1=d:\foo\bar
# Kommentar zu BackupLocation1= Projektpläne
BackupLocation2=e:\foobar\unfug
## ------- Ende der aktuell zu archivierenden Ordner
BackupLocation3=e:\foobar\optional
BackupLocation4=e:\nochleer
Grüße
Biber
@Biber
Da muss ich Dir nun leider einmal mehr Recht geben: meinen obigen Kommentar hätte ich mir besser sparen sollen ...
Zu Deinem Entwurf noch eine Anmerkung: Wenn Du "findstr" jeweils ohne "/b" (bzw ohne "^" am Beginn des Suchbegriffes) verwendest, musst Du hoffen, dass die "BackupLocations.txt" nicht etwa so aussieht:
Grüße
bastla
Da muss ich Dir nun leider einmal mehr Recht geben: meinen obigen Kommentar hätte ich mir besser sparen sollen ...
Zu Deinem Entwurf noch eine Anmerkung: Wenn Du "findstr" jeweils ohne "/b" (bzw ohne "^" am Beginn des Suchbegriffes) verwendest, musst Du hoffen, dass die "BackupLocations.txt" nicht etwa so aussieht:
; BackupLocations.txt
## Wird bei der Archivierung der Notebook-MitarbeiterInnen-Dateien benutzt.
BackupLocations=2
## Format:
## BackupLocations=n --- gibt an, wieviele Pfade gesichert werden sollen
## BackupLocations=4 wird interpretiert als "Archiviere BackupLocation1...BackupLocation4
BackupLocation1=d:\foo\bar
# Kommentar zu BackupLocation1= Projektpläne
## BackupLocation2=e:\foobar\unfug
## ------- Ende der aktuell zu archivierenden Ordner
BackupLocation3=e:\foobar\optional
BackupLocation4=e:\nochleer
Grüße
bastla