Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Dynamische Liste aus INI lesen und die Werte für Variablen nutzen

Mitglied: BBUser

BBUser (Level 1) - Jetzt verbinden

15.01.2009, aktualisiert 19:03 Uhr, 5555 Aufrufe, 7 Kommentare

Diverse Pfade sind in einer Datei aufgelistet, diese sollen je einer neuen Variablen zugeordnet werden.

Hallo Forum,

ich sitze derzeit über einem Backup Script.

Folgender Hintergrund:

In einer .INI Datei werden diverse Pfade Zeile für Zeile definiert.
Es wird eine Batch ausgeführt welche in die INI schauen soll und den jeweiligen Pfad ausliest und diesen einer Variable zuordnet. Diese Pfade sollen später gesichert werden.
Das sichern klappt. Auch das auslesen einzelner Werte aus der .INI.

Nun kommt es aber vor, dass ich auf einem System z.B. 3 Pfade für ein Backup in der .INI definieren möchte, und für ein anderes System 5 oder "x" Pfade. Die Batch soll dabei gleich bleiben aber trotzdem schauen das sie jeden Pfadeeintrag mitnimmt.

Die INI sieht derzeit so aus:

[Text1]
x=>y

[Text2]
d=>z
a=>k

[Directories to backup]
Folder=>C:\Outlook
Folder=>D:\Outlook
Folder=>%USERPROFILE%\Local Settings\Application Data\Microsoft\Outlook

Ab dem Eintrag [Directories to backup] soll die Batch nun nach den Pfaden schauen und jeden einer, wenn möglich neuen dynamischen, Variable zuordnen.

Mit

FOR /F "tokens=2 Delims=>" %%i IN ('set^|Find "Folder" import.ini') DO echo %%i

kann ich Werte aus der Datei lesen und anzeigen lassen, wenn nur Pfade drin stehen. Aber das Zuordnen dieser Pfade zu neuen Variablen für die spätere Verwendung im Backup klappt noch nicht.

Über Hilfe würde ich mich freuen.

Das fertige Script kann ich später dann gerne hier posten.

Gruss
Mitglied: bastla
15.01.2009 um 19:25 Uhr
Hallo BBUser!

Es lassen sich zwar, sogar ohne "delayedExpansion", entsprechende Variablen erstellen, etwa:
01.
set /a x=0 
02.
for /f "tokens=2 delims=>" %%i in ('set^|Find "Folder" import.ini') do set /a x+=1 & call set "Pfad%%x%%=%%i"
Allerdings stellt sich mir die Frage, wozu Du diese Variablen später konkret benötigst (bzw ob es nicht einfacher wäre, das Ganze über eine "for"-Schleife mit Aufruf eines Unterprogrammes für jeden Pfad zu realisieren)...

Grüße
bastla
Bitte warten ..
Mitglied: BBUser
15.01.2009 um 21:01 Uhr
Hallo basta,


danke für die erste Hilfe.

Später sollen diese Variablen dann für eine Sicherungsroutine verwendet werden.

Also so nach dem Motto


xcopy %variable-welche-dem-pfad-x-aus-der-ini-entspricht% nach %backupverzeichnis%

je nach dem wieviel Pfade ich in der ini angebe ändert sich ja auch die anzahl der variablen.

Hoffe ich konnte das Ziel einigermaßen gut dar stellen.

Grüße
Bitte warten ..
Mitglied: bastla
15.01.2009 um 22:04 Uhr
Hallo BBUser!

Das eigentliche Ziel war mir schon klar, nur: Warum soll das erst später passieren? Das "xcopy" kannst Du doch einfach in die Schleife einbauen, und wenn Du drumherum noch etwas tun wolltest, dann, wie gesagt, über ein Unterprogramm:
01.
@echo off & setlocal 
02.
set "Backupvereichnis=E:\Sicherung" 
03.
set "Log=D:\BackupLog.txt" 
04.
 
05.
>>"%Log%" echo Sicherung gestartet am %date% um %time% 
06.
for /f "tokens=2 delims=>" %%i in ('set^|Find "Folder" import.ini') do call :ProcessPath "%%i" 
07.
>>"%Log%" echo Sicherung beendet am %date% um %time% 
08.
echo Fertig. 
09.
goto :eof 
10.
 
11.
:ProcessPath 
12.
set "Pfad=%~1" 
13.
:: irgendwelche Aktionen 
14.
:: 
15.
>>"%Log%" echo Sichere %Pfad% 
16.
xcopy "%Pfad%" "%Backupverzeichnis%" 
17.
:: weitere Aktionen 
18.
:: 
19.
goto :eof
Grüße
bastla
Bitte warten ..
Mitglied: BBUser
15.01.2009 um 22:26 Uhr
Funktioniert soweit gut nach etwas Anpassung auf meiner Seite.

Gibts da noch Möglichkeiten der Optimierung?

z.B. die ini.. sieht derzeit u.a. so aus:

[Directories to backup]
Folder=>C:\source2

Ich würde aber gerne

Folder: C:\source2

schreiben. Dann klappt das aber mit den tokens und delims nicht mehr da ich ja in der Pfadangabe auch ein Doppelpunkt habe bzw. können auch Leerzeichen in den Pfaden auftreten.

Wäre das trotzdem irgendwie möglich?

Grüße
Bitte warten ..
Mitglied: Ren
16.01.2009 um 12:06 Uhr
Versuche:
01.
for /f "tokens=1,* delims=:" %%i in ('set^|Find "Folder" import.ini') do :was immer du da machst
Dabei ist jetzt %%i Folder, %%j alles, was hinter dem : Steht. Das Führt dich zu dem Problem, dass du ja als Trennzeichen nicht den : genommen hast, sondern den : mit einer Leertaste dahinter. Die bekommst du aber weg, wenn du in der Routine, die aufgerufen wird, die Variable mit Hilfe von set um ein Zeichen vorne beschneidest. Siehe set /?
Noch einen Anmerkung:
Verzeichnisnamen dürfen unter Windows leider %-Zeichen enthalten. so ohne weiteres kann man also Verzeichnisnamen wie c:\ablage % ich bin so doof%\backup nicht in einer Batch als Variable übergeben. Wenn es also universal einsetzbar sein muss, in den Verzeichnisnamen also % vorkommen kann, dann geht die von bastla angeführte Lösung nicht. Dann müsstest du die Variable wieder manuell vor dem Aufruf von :ProcessPath setzen. Folgendes Beispiel soll das etwas verdeutlichen:
01.
@echo off 
02.
FOR /F "tokens=* delims=" %%A IN ('echo.c:\ablage \%%test%%') DO (call :test "%%~A") 
03.
FOR /F "tokens=* delims=" %%A IN ('echo.c:\ablage \%%test%%') DO (set "variable=%%~A"&call :test1) 
04.
goto :end 
05.
:test 
06.
set "variable=%~1" 
07.
set variable 
08.
goto :eof 
09.
:test1 
10.
set variable 
11.
goto :eof 
12.
:end
Der Echo-Befehl soll simulieren, dass in deiner INI-Datei ein solcher Pfad steht.
Bitte warten ..
Mitglied: bastla
16.01.2009 um 12:18 Uhr
@Ren
Danke für's Mitdenken - ich war ja gerade erst dabei, Überzeugungsarbeit zu leisten ...

Eine Anmerkung zu Deiner "FOR"-Zeile: Sowohl "tokens=*" als auch das "echo" fallen eigentlich unter Luxus:
FOR /F "delims=" %%A IN ("c:\ablage \%%test%%") DO ...
Grüße
bastla
Bitte warten ..
Mitglied: BBUser
16.01.2009 um 22:17 Uhr
Danke für eure hilfe

Ich gehe erstmal davon aus, das die Nutzer in unserem Netz keine % in den Pfaden verwenden. Einen anderen Vorteil, als die Kompatibiltät mit Pfadnamen dieser Art, hätte es ja nicht, oder? Evtl. blicke ich das auch nach dem Arbeitstag nicht so schnell ;)

Mal etwas anderes zu dem Script, auch wenn das vllt. in ein eigenes Thema gehört (Möchte ungern gleich so viele Themen öffnen).

Ich prüfe vor dem Backup ob das System mit dem Netzwerk verbunden ist.

das mache ich z.B. so:

:CHECKLOGONSERVER
For /F "tokens=2 Delims=:" %%i in ('set^|Find /i "LOGONSERVER"') Do @Set LOGONSERVER=%%i
set LOGONSERVER=%LOGONSERVER:\=%
PING -n 3 %LOGONSERVER%|find "Reply from " >NUL
IF NOT ERRORLEVEL 1 goto :CHECKDNSSERVER
IF ERRORLEVEL 1 goto :FAILURE

:CHECKDNSSERVER
For /F "tokens=2 Delims=:" %%i in ('ipconfig /all^|Find /i "DNS"') Do @Set DNSSERVER=%%i
ping -n 1 %DNSSERVER%|find "Reply from " >NUL
IF NOT ERRORLEVEL 1 GOTO :CHECKGATEWAY
IF ERRORLEVEL 1 GOTO :FAILURE

:CHECKGATEWAY
:: Asuming the user has the defined gateway only at his local office
For /F "tokens=2 Delims=:" %%i in ('ipconfig /all^|Find /i "Standardgateway"') Do @Set CURRENT_GATEWAY=%%i
IF "%MYHOME_GATEWAY%"=="%CURRENT_GATEWAY%" GOTO :CHECKOUTLOOK


Für das testen hier zu hause sind DNS Server und Logon Server deaktiviert, aber das Gateway möchte ich prüfen. Myhome Gateway kommt aus einer ini.
Das dumme ist nun, ich habe hier verschiedene Netzwerkkarten u.a. Vmware Adapter im System (Vista), welche natürlich alle ein Gateway haben. Es ist aber nur ein Adapter derzeit wirklich aktiv. Mit einer Karte unter Win2000 funktioniet das super. Aber jetzt bekomme ich gar nichts für die Variable.
Einfach gefragt, wie komme ich an das Standardgateway dieses einen Adapters? Ist das möglich? Google etc. ergaben bisher keine Erleuchtung.

Gruß

P.S. Ich würde meinen Code auch gerne so formatieren wie ihr ;)
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
Wert aus Quelltext einer HP lesen
gelöst Frage von Nilbo91Batch & Shell11 Kommentare

Hallo zusammen! Wünsche erstmal ein frohes neues Jahr. Kurze Infos zu mir da ich neu in diesem Forum bin: ...

VB for Applications
Text in PDF lesen und nutzen
gelöst Frage von fautec56VB for Applications6 Kommentare

Hallo zusammen, meine erste Frage in diesem Forum betrifft das umbenennen von PDF-Dateien, die mit einem OCR-Scan erstelle wurden. ...

Batch & Shell

Variable aus Datei lesen ohne Datenverlust

gelöst Frage von Frank1993Batch & Shell5 Kommentare

Hallo Leute, ich habe ein Problem beim einlesen einer Variable aus einer Datei. Ich finde keinen Lösungsweg, deswegen wende ...

Batch & Shell

XML nach Liste mit Werten durchsuchen

Frage von bockerBatch & Shell12 Kommentare

Guten Morgen. Ich habe folgendes Problem: Ich habe eine XML Datei mit etlichen Angaben die ca 30.000 Datensätze hat. ...

Neue Wissensbeiträge
Windows 7

Windows 7 - Server 2008 R2: Exploit für Total Meltdown verfügbar

Information von kgborn vor 18 StundenWindows 7

Kleine Information für Administratoren, die für die Updates von Windows 7 SP1 und Windows Server 2008 R2 SP1 verantwortlich ...

Sicherheit

Zero Day-Schwachstelle im Internet Explorer - wird von APT bereits ausgenutzt

Information von kgborn vor 1 TagSicherheit

Im Kernel des Internet Explorer scheint es eine Zero Day-Lücke zu geben, die von staatlichen Akteuren (APT) im Rahmen ...

Microsoft
Folder Security Viewer-Lizenzen zu gewinnen
Information von kgborn vor 1 TagMicrosoft

Ich nehme das Thema mal in Absprache mit Frank hier auf, da es für den einen oder anderen Administrator ...

Hardware

Feueralarm killt Festplatten in Rechenzentrum - führt zu größerem Ausfall

Information von kgborn vor 1 TagHardware12 Kommentare

Noch ein kleiner Beitrag für Administratoren, die in Rechenzentren aktiv sind - so als Fingerzeig. Denn es gibt Szenarien, ...

Heiß diskutierte Inhalte
Linux
Linux Server oder Windows Server - lohnt eine Umstellung auf Linux und ebenso basierende SW bei einer langfristigen Planung?
Frage von motus5Linux27 Kommentare

Wir brauchen bei uns einen neuen Server. Dieser wird als Fileserver, Domäne Controller sowie Exchange Server verwendet. Wir versuchen ...

C und C++
Frage1 C Programmierung-Makefile Frage2 PHP-Programmierung HTTP-Fehler 404
Frage von KatalinaC und C++23 Kommentare

Hallo, ich habe 2 Fragen, die nichts miteinander zu tun haben aber mit denen ich mich gerade beschäftige: 1. ...

LAN, WAN, Wireless
Watchguard T15 VPN Einrichtung
gelöst Frage von thomasjayLAN, WAN, Wireless21 Kommentare

Hallo zusammen, wir möchten gerne über unsere Watchguard T15 einen VPN-Tunnel (Mobile VPN with IPSec) einrichten! Als Client nutzen ...

DSL, VDSL
ISP Wechsel auf Vodefone Koax, Gebäudeverkabelung nur per Cat 7
gelöst Frage von wusa88DSL, VDSL18 Kommentare

Hallo Zusammen, ich bin momentan bei Mnet als Glasfaser Kunde und möchte Preis/Leistungs-Technisch zu Kabel Deutschland / Vodafone wechseln. ...