meyerro
Goto Top

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

Content-Key: 85964

Url: https://administrator.de/contentid/85964

Ausgedruckt am: 28.03.2024 um 16:03 Uhr

Mitglied: bastla
bastla 20.04.2008 um 20:53:33 Uhr
Goto Top
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:
@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
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
Mitglied: meyerro
meyerro 20.04.2008 um 21:09:46 Uhr
Goto Top
Mein Gott, bin ich weit weg gewesen. Viel zu kompliziert gedacht. Dein Batch ist ein Volltreffer. Danke
Mitglied: Biber
Biber 21.04.2008 um 09:36:35 Uhr
Goto Top
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
  • 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
Mitglied: bastla
bastla 21.04.2008 um 14:19:41 Uhr
Goto Top
@Biber
Da muss ich Dir nun leider einmal mehr Recht geben: meinen obigen Kommentar hätte ich mir besser sparen sollen ... face-sad
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
Mitglied: Biber
Biber 21.04.2008 um 14:45:15 Uhr
Goto Top
<lach> ...touche, bastla,

das kommt von meinem ständigen Nicht-Testen...

Ich füge mal (immer noch ungetestet, aber voller Vertrauen in Dein geschultes Auge) ein oder zwei "/b"s oben ein.

Danke und Grüße
Biber