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

Verknüpfungen aus Services erstellen bzw. Eine Textdatei Zeilenweise verarbeiten und Variablen ableiten

Frage Entwicklung Batch & Shell

Mitglied: holsthn

holsthn (Level 1) - Jetzt verbinden

21.02.2011 um 13:15 Uhr, 4123 Aufrufe, 6 Kommentare

Ich habe eine Datei erstellt, die mir Verknüpfungen baut. Leider komme ich mit Schleifen nicht wirklich klar, glaube aber für meine Aufgabe komme ich nicht drumrum eine zu nutzen.

Hi
Ich habe eine Batch-Datei erstellt die mir Verknüpfungen mit verschiedenen Abhängigkeiten erstellt.
In meiner Datei werden die Varibalen leider noch direkt eingegeben. Dies soll sich ändern - ich würde die Variablen gern mit Werten aus der services füllen.

Hier erstmal was ich bis jetzt habe:

01.
  
02.
@echo off & setlocal 
03.
 
04.
::ausgelesene Werte aus services 
05.
 
06.
::Version der Datenbank  
07.
::0-1 in jeder Zeile von services 
08.
set "DBVers=6"  
09.
::Version des ServicePacks  
10.
::1-3 in jeder Zeile von services 
11.
set "DBSP=01"  
12.
::Name der Datenbank  
13.
::3-erste Leertaste oder Tabstop in jeder Zeile von services 
14.
set "DBName=BeispielDatenbankTest"  
15.
::tcp-port  
16.
::erste Ziffer nach einem oder mehreren Leerschritten oder Tabstops bis / 
17.
::in jeder Zeile von services  
18.
set "DBPort=2437"  
19.
 
20.
 
21.
::Erstellung der Werte für Verknüpfung 
22.
 
23.
::IP des Datenbankservers 
24.
echo %DBName%|findstr /c:"Test">nul 
25.
IF %errorlevel%==0 ( 
26.
	set "DBIP=192.168.42.209" 
27.
) ELSE ( 
28.
	set "DBIP=192.168.42.205" 
29.
30.
 
31.
::Speicherort der Verknüpfung 
32.
echo %DBName%|findstr /c:"Test">nul 
33.
IF %errorlevel%==0 ( 
34.
	set "zielpfad=%userprofile%\Desktop\Symbolleisten\Test" 
35.
) ELSE ( 
36.
	set "zielpfad=%userprofile%\Desktop\Symbolleisten\Entwicklung" 
37.
38.
IF %DBNAME% EQU Beispielausnahme1 (set "zielpfad=%userprofile%\Desktop\Symbolleisten\") 
39.
IF %DBNAME% EQU Beispielausnahme2 (set "zielpfad=%userprofile%\Desktop\Symbolleisten\") 
40.
   
41.
::Name der Verknüpfung (ohne ".lnk")   
42.
set "progtitel=%DBvers%.%DBSP%%DBname%"   
43.
::Speicherort der Programmdatei (wird auch für "Ausführen in:" verwendet)   
44.
set "progdir=%ProgramFiles%\NAV\%DBvers%.%DBSP%"   
45.
set "progexe=fin.exe"  
46.
::Kommentar   
47.
set "beschreibung=Erklärung eigentlich unnötig ..."   
48.
   
49.
::Bei Bedarf Speicherordner der Verknüpfung erstellen (siehe oben "zielpfad"):   
50.
if not exist "%zielpfad%" md "%zielpfad%"   
51.
   
52.
::temporäres VBScript erzeugen ...   
53.
echo Set objShell=WScript.CreateObject("Wscript.Shell")>%temp%\MakeShortCut.vbs   
54.
echo Set objShortcut=objShell.CreateShortcut("%zielpfad%\%progtitel%.lnk")>>%temp%\MakeShortCut.vbs   
55.
echo objShortcut.TargetPath=("%progdir%\%progexe%")>>%temp%\MakeShortCut.vbs  
56.
echo objShortCut.Arguments=(" id=%DBVers%%DBName%, servername=%DBIP%:%DBPort%, nettype=tcp")>>%temp%\MakeShortCut.vbs  
57.
echo objShortcut.Description="%beschreibung%">>%temp%\MakeShortCut.vbs   
58.
echo objShortcut.WorkingDirectory="%progdir%">>%temp%\MakeShortCut.vbs   
59.
echo objShortcut.Save>>%temp%\MakeShortCut.vbs   
60.
   
61.
::... ausführen ...   
62.
cscript //nologo %temp%\MakeShortCut.vbs   
63.
   
64.
::... und wieder löschen.   
65.
del %temp%\MakeShortCut.vbs
Im ersten Block meiner Datei steht schon ausgelesene Werte aus services und vor den jeweiligen sets, wo dies in der services zu finden ist, z.B. 0-1 in jeder Zeile von services

Ein Beispiel für die Datei services:
01.
  
02.
# Copyright (c) 1993-2004 Microsoft Corp. 
03.
04.
# Diese Datei enthält die Portnummern für bekannte Dienste gemäß IANA. 
05.
06.
# Format: 
07.
08.
# <Dienstname>  <Portnummer>/<Protokoll>  [Alias...]   [#<Kommentar>] 
09.
 
10.
dccm             5679/tcp                           #Direct Cable Connect Manager 
11.
ms-licensing     5720/tcp                           #Microsoft Licensing 
12.
ms-licensing     5720/udp                           #Microsoft Licensing  
13.
directplay8      6073/tcp                           #DirectPlay8 
14.
directplay8      6073/udp                           #DirectPlay8 
15.
man              9535/tcp                           #Remote Man Server 
16.
rasadv           9753/udp 
17.
imip-channels   11320/tcp                           #IMIP Channels Port 
18.
directplaysrvr  47624/tcp                           #Direct Play Server 
19.
directplaysrvr  47624/udp                           #Direct Play Server 
20.
 
21.
# NAVStart 
22.
402BeispielTest	  2433/tcp			    # 402  
23.
402Beispiel1Test  2435/tcp			    # 402  
24.
402Beispiel2Test  2436/tcp			    # 402 
25.
403Beispiel4711Test 2444/tcp			    # 403 
26.
 
27.
601Beispieltest   2438/tcp	                    # 601  
28.
601Beispiel	  2439/tcp			    # 601 	
Was ich jetzt möchte:
Eine Schleife soll NAVStart suchen und in die nächste Zeile gehen. Das erste Zeichen - im Bsp. in der ersten Zeile nach NAVStart >4< - soll in der Variable DBVers gespeichert werden. Zeichen 2 und 3 soll in den Variable DBSP gespeichert werden, Zeichen 4 bis erstes Leerzeichen oder erster Tabstopp in Variable DBName und erste Ziffer nach einem oder mehreren Leerzeichen oder Tabstops bis / in DBPort.
Das ganze soll dann meine Verknüpfung erstellen und mit der nächsten Zeile forfahren. Hier sollen wieder die Variablen mit den jeweiligen Werten gefüllt und eine nächste Verknüpfung erstellt werden.
Dies soll sich fortsetzen bis zur letzten Zeile.

Ich denke, das ist keine besonders schwere Aufgabe, aber ich komme mit den for-Schleifen einfach nicht wirklich klar..

Wäre für Hilfe sehr dankbar.

Viele Grüße
Mitglied: Friemler
21.02.2011 um 14:04 Uhr
Hallo holsthn,

probiere mal folgendes Skript:
01.
@echo off 
02.
 
03.
setlocal 
04.
 
05.
set "Services=Services.txt" 
06.
 
07.
for /f "delims=:" %%l in ('findstr /i /n /c:"NAVStart" "%Services%"') do ( 
08.
  set "BegLine=%%l" 
09.
10.
 
11.
for /f "usebackq skip=%BegLine% tokens=1-2 delims=	/ " %%a in ("%Services%") do ( 
12.
  set "Part1=%%a" 
13.
  set "Part2=%%b" 
14.
  call :ProcessLine 
15.
16.
 
17.
exit /b 
18.
 
19.
 
20.
:ProcessLine 
21.
  set "DBVers=%Part1:~0,1%" 
22.
  set "DBSP=%Part1:~1,2%" 
23.
  set "DBName=%Part1:~3%" 
24.
  set "DBPort=%Part2%" 
25.
 
26.
  REM Hier der Code, der die Verknüpfung erzeugt 
27.
  REM Die ECHO-Befehle sind nur zur Kontrolle 
28.
  echo %DBVers% 
29.
  echo %DBSP% 
30.
  echo %DBName% 
31.
  echo %DBPort% 
32.
exit /b
In Zeile 11 das erste Zeichen nach dem Gleichheitszeichen von delims ist ein Tab-Zeichen (ASCII-Code 9).

Die erste FOR-Schleife sucht die Zeile mit NAVStart und speichert deren Zeilenummer in der Variablen BegLine. Ab der Zeile danach wird von der zweiten FOR-Schleife die Services.txt zeilenweise ausgelesen und in Tokens zerlegt (Trennzeichen sind Tab, / und Leerzeichen). Die Tokens werden den Variablen Part1 und Part2 zugewiesen und das Unterprogramm ProcessLine aufgerufen. Dort wird Part1 in seine Bestandteile zerlegt.

Gruß
Friemler
Bitte warten ..
Mitglied: holsthn
21.02.2011 um 17:20 Uhr
Hi
Vielen Dank für die schnelle Antwort!
Habe das jetzt mal getestet und kriege leider nach call:Processline nen Fehler.
Um zu verdeutlichen was ich meine hier einfach mal meine DOS-Ausgabe, wenn ich das @echo off rausnehme
01.
C:\Users\haho\Desktop>set "Services=\\srv\netlogon\services" 
02.
 
03.
C:\Users\haho\Desktop>for /F "delims=:" %l in ('findstr /i /n /c:"NAVStart" 
04.
"\\srv\netlogon\services"') do (set "BegLine=%l" ) 
05.
 
06.
C:\Users\haho\Desktop>for /F "tokens=1-2 delims=    / " %a in ('more + "\\srv\netlogon\services"') do ( 
07.
set "Part1=%a" 
08.
 set "Part2=%b" 
09.
 call :ProcessLine 
10.
11.
Auf die Datei C:\Users\haho\Desktop\+ kann nicht zugegriffen werden. 
12.
C:\Users\haho.BGL\Desktop>exit /b 
13.
 
noch ne Idee?

Viele Grüße
Bitte warten ..
Mitglied: Friemler
21.02.2011 um 17:44 Uhr
Hallo holsthn,

Du hast meine erste Version des Scripts verwendet (mit MORE im Kopf der zweiten FOR-Schleife) und dabei wohl auch einen Tippfehler gemacht. Nimm mal die aktuelle Version von oben.

[EDIT]
Das obige Fehlerbild kann eigentlich nur auftreten, wenn die Variable BegLine nicht definiert ist, was wiederum nur der Fall sein kann, wenn der String NAVStart in Deiner Services.txt nicht gefunden wurde. BTW: Hast Du die Variable Services in Zeile 5 angepasst? Sie sollte den Pfad zu Deiner "Services.txt" (oder nur "Services"?) enthalten.
[/EDIT]

Gruß
Friemler
Bitte warten ..
Mitglied: holsthn
21.02.2011 um 18:51 Uhr
Hi,
peinlich, dass ich oben so genau bin bei der Beschreibung und dann selbst son Fehler mache...
Schuldigung! In meiner Datei stand nicht NAVStart, sondern NAV Start...
Vielen Dank für die Hilfe und wie gesagt sorry, dass Du jetzt noch nach meinem Fehler suchen musstest.
Viele Grüße!
Bitte warten ..
Mitglied: Friemler
21.02.2011 um 19:18 Uhr
Hi holsthn,

und wo bleibt der grüne Haken?

Gruß
Friemler
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Java
gelöst Textdatei in Array speichern (zeilenweise) (1)

Frage von Bruchsal zum Thema Java ...

Windows Server
gelöst Powershell array zeilenweise in Textdatei ausgeben (6)

Frage von Peter0816 zum Thema Windows Server ...

Netzwerkgrundlagen
IPsec - .conf und .secret erstellen aus Gruppe und User (16)

Frage von MaxMLe zum Thema Netzwerkgrundlagen ...

Batch & Shell
gelöst Powershell - In Textdatei suchen und ersetzen (5)

Frage von Raaja89 zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (21)

Frage von Xaero1982 zum Thema Microsoft ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...

Windows Update
Treiberinstallation durch Windows Update läßt sich nicht verhindern (17)

Frage von liquidbase zum Thema Windows Update ...