Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

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
GELÖST

Variablen in Datei schreiben, auslesen und verarbeiten, inkl. Struktur-Problem

Frage Entwicklung Batch & Shell

Mitglied: amontillado

amontillado (Level 1) - Jetzt verbinden

20.11.2009, aktualisiert 30.11.2009, 3617 Aufrufe, 4 Kommentare

Ich weiß, sowas wird nicht gern gesehen, jedoch...: Dringend!

Hallo zusammen,

ich bin gerade dabei ein Script in Batch zu schreiben, für eine gewisse Aufgabe im Programm fehlt es mir aber an Ideen:

01.
:config 
02.
title=Startmen-Konfiguration 
03.
echo. 
04.
set /p server=Server angeben! (Z.B.: \\sstrf028\e010_hbr$\) 
05.
set /p ordner=Ordner angeben! (Z.B.: Startmen Raum 249) 
06.
dir %server% /s /b | find "%ordner%" | find /v "%ordner%\" > start.cfg 
07.
echo %ordner% >> start.cfg 
08.
attrib +s +h start.cfg 
09.
goto eof
Man gibt den Server sowie Ordnernamen an, der Ordner wird gesucht und der Pfad in eine Konfigurationsdatei geschrieben. Wenn der Ordner allerdings gar nicht erst gefunden wird, soll ein Fehler ausgegeben werden. Wie stelle ich das denn am Besten an?
Wie das mit Errorleveln hier funktionieren könnte weiß ich nicht...

Gute Nacht zusammen,
h


edit:
entschuldigt das dringend, ist es jedoch leider ;(
Mitglied: bastla
21.11.2009 um 00:13 Uhr
Hallo amortillado und willkommen im Forum!

Wenn Deine Zeile 6 für Dich (auch ohne "/i") funktioniert, könntest Du es so versuchen:
01.
:config 
02.
title=Startmen-Konfiguration 
03.
echo. 
04.
set /p server=Server angeben! (Z.B.: \\sstrf028\e010_hbr$\) 
05.
set /p ordner=Ordner angeben! (Z.B.: Startmen Raum 249) 
06.
 
07.
set "Pfad=" 
08.
for /f "delims=" %%i in ('dir %Server% /s /b 2^>nul^|find "%Ordner%"^|find /v "%Ordner%\"') do set "Pfad=%%i" 
09.
if defined Pfad ( 
10.
    >start.cfg  echo %Pfad% 
11.
    >>start.cfg echo %Ordner% 
12.
    attrib +s +h start.cfg 
13.
) else ( 
14.
    echo %ordner% nicht gefunden! 
15.
16.
goto :eof
Grüße
bastla
Bitte warten ..
Mitglied: amontillado
30.11.2009 um 17:50 Uhr
Hallo und vielen Dank für die schnelle Hilfe!

Deine Lösung funktioniert super, allerdings habe ich noch ein paar Fragen dazu:
  • Was bedeutet hier [ dir %Server% /s /b 2^>nul^ ] das ^ und wieso gibst du es in "nul" aus?
  • Welche Funktion hat das ' Zeichen [ find /v "%Ordner%\"' ]


Und dann habe ich noch eine anderes Thema, womit ich nicht weiter weiß:
Ich will ein Batchprogramm schreiben, das beim Ausführen bestimmte Netzlaufwerke verbindet. Die "Werte" der Netzlaufwerke sollen aus einer Konfigurationsdatei ausgelesen werden. Ist diese Datei gar nicht erst vorhanden, wird nach der Anzahl der Laufwerke sowie deren Kenndaten gefragt, woraufhin diese Daten in die Konfigurationsdatei geschrieben werden. Dabei ist es wichtig, dass die Informationen beim Abarbeiten zeilenweise aus der Konfig ausgelesen werden, da in dieser Datei auch noch andere Werte gespeichert sind. Darüber hinaus soll auch die Konfig extern verändert werden können, ohne dass damit irgendwelche Fehler auftreten.
...pff, das wird was ;)

Am besten ich informiere kurz über das gesamte Programm, denn die Laufwerksgeschichte ist nur Teil eines größeren Projekts. Es soll ein Programm geschrieben werden, das beim Autostart einen Ordner aus dem Netzwerk in den Startmenü-Ordner des Benutzers kopiert. Dabei soll dieses Programm für beliebige "Admins" anwendbar sein, d.h. alle Werte sind variabel und müssen jedes Mal aus der Konfigurationsdatei ausgelesen werden, mit dieser funktioniert soweit auch alles gut.
Hier das Programm:
01.
@echo off 
02.
if exist start.cfg (goto start) else (goto config) 
03.
 
04.
:config 
05.
title=Startmen-Konfiguration 
06.
cls 
07.
echo. 
08.
set /p server=Server angeben! (Z.B.: \\sstrf028\e010_hbr$\) 
09.
set /p ordner=Ordner angeben! (Z.B.: Startmen Raum 249) 
10.
for /f "delims=" %%i in ('dir %server% /s /b 2^>nul^|find "%ordner%"^|find /v "%ordner%\"') do set "pfad=%%i 
11.
echo. 
12.
if defined pfad (>start.cfg echo %pfad% 
13.
	>>start.cfg echo %ordner% 
14.
	attrib +s +h start.cfg 
15.
	echo Konfiguration erfolgreich!) else (echo "%ordner%" konnte nicht gefunden werden! 
16.
	echo Bitte berprfen Sie ihre Eingabe. & echo. 
17.
	pause 
18.
	call :config) 
19.
pause 
20.
goto :eof 
21.
 
22.
:start 
23.
title=Aktualisierung des Starmens 
24.
for /f "delims=" %%a in ('findstr "\Startmen" start.cfg') do set pfad=%%a 
25.
for /f "delims=" %%b in ('findstr "Startmen" start.cfg') do set ordner=%%b 
26.
for /f "delims=" %%c in ('findstr "Debug" start.cfg') do set debug=%%c 
27.
if exist "%pfad%" (goto upgrade) else (goto debug) 
28.
 
29.
:upgrade 
30.
rd /q /s "%userprofile%\Startmen\%ordner%" 
31.
xcopy /e /r /i /y /q "%pfad%" "%userprofile%\Startmen\%ordner%" 
32.
 
33.
:debug 
34.
if %debug%==Debug1 (goto ausgabe) else (goto :eof) 
35.
 
36.
:ausgabe 
37.
cls 
38.
echo. 
39.
echo Inhalt der start.cfg: 
40.
type start.cfg & echo. 
41.
echo. 
42.
echo Werte der eingelesenen Variablen: 
43.
echo Startmen-Pfad:	"%pfad%" 
44.
echo Ordnername:	"%ordner%" 
45.
echo ______________ 
46.
echo. 
47.
if exist "%pfad%" (echo Der Ordner "%ordner%" ist erreichbar) else (echo Der Ordner "%ordner%" ist nicht erreichbar) 
48.
echo. 
49.
pause
Nun wurde mir heute mitgeteilt, dass am Besten die Konfigurationsdatei auf dem Server liegen soll und jeder User am Terminal seine Werte aus dieser auslesen soll. Okay, soweit kein Problem dachte ich mir, dann gibt es eben eine Administrator-Version zur Erstellung der Konfigurationsdatei sowie eine Benutzer-Version, welche die Werte aus der Konfig holt. Aber wie wird am Besten eine Benutzer-Version erstellt, direkt über den Admin und die Konfigdatei? Ich bin ehrlich gesagt etwas überfordert und weiß nicht ganz welches letztendlich die einfachste und "beste" Lösung wäre.

Könnt ihr mir weiterhelfen?
Bitte warten ..
Mitglied: bastla
30.11.2009 um 19:37 Uhr
Hallo amontillado!

Vorweg ein Hinweis: Auch wenn Du den Titel dem erweiterten Inhalt angepasst hast, wäre es sinnvoller, einen neuen Thread zu erstellen - damit erreichst Du mehr potenzielle Helfer ...
Zu Deinen Fragen:
* Was bedeutet hier [ dir %Server% /s /b 2^>nul^ ] das ^ und wieso gibst du es in "nul" aus?
Da innerhalb der "for /f"-Schleife temporär eine neue CMD-Instanz aufgerufen wird, müssen einige Sonderzeichen "maskiert" werden, damit sie (noch) nicht als Steuerzeichen interpretiert, sondern unverändert "weitergereicht" werden.

Nach "nul" umgeleitet wird nur (der Ordnung halber) die auf Kanal 2 (STDERR) ausgegebene Fehlermeldung, wenn %Server% nicht gefunden werden konnte (diese Meldung soll ja auf keinen Fall weiterverarbeitet werden).

* Welche Funktion hat das ' Zeichen [ find /v "%Ordner%\"' ]
Damit wird das am Beginn des Befehlsblocks in der Klammer gesetzte andere ' geschlossen - die zwischen diesen Zeichen stehenden Anweisungen werden in der schon beschriebenen weiteren CMD-Instanz ausgeführt und deren Ergebnis wird zeilenweise von der "for /f"-Schleife übernommen.

Grüße
bastla
Bitte warten ..
Mitglied: amontillado
30.11.2009 um 19:42 Uhr
Danke für deine ausführliche Erläuterung! Ich werde für meine (neue) Frage einen anderen Thread erstellen.

Mit besten Grüßen
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Ähnliche Inhalte
Heiß diskutierte Inhalte
Router & Routing
gelöst Ipv4 mieten (22)

Frage von homermg zum Thema Router & Routing ...

Windows Server
DHCP Server switchen (20)

Frage von M.Marz zum Thema Windows Server ...

Exchange Server
gelöst Exchange 2010 Berechtigungen wiederherstellen (20)

Frage von semperf1delis zum Thema Exchange Server ...

Hardware
gelöst Negative Erfahrungen LAN-Karten (19)

Frage von MegaGiga zum Thema Hardware ...