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

Variable aus Text datei

Frage Entwicklung Batch & Shell

Mitglied: Turrex0100

Turrex0100 (Level 1) - Jetzt verbinden

28.10.2008, aktualisiert 29.10.2008, 4087 Aufrufe, 2 Kommentare

Eine genaue lösung habe ich nicht gefunden,
aber ich glaube,die lösung das die loesung in diesem beitrag verborgen liegt.
Leider verstehe ich nicht wie ich den "for"Befehl in bat anwende.

http://www.administrator.info/index.php?content=a1e9fecad81bf0f1320c1ff ...

Undzwar habe ich eine textdatei mit namen, unterschiedlicer länge.
in jeder zeile steht einer.
jetzt möchte ich wie auch der andere user einen namen zufällig auswählen. der ausgewählte name soll dan in der .bat datei als variable zu verfügung stehen.
d.h:
am anfang steht eine datei
namen.txt
mit dem inhalt:

johannes
bernd
dieter
usw

und in der bat datei soll eine variable mit einem zufälligen namen entstehn:
wie:
set zufall_name=dieter

würd mich über eine antwort sehr freuen
mfg Turrex
Mitglied: bastla
28.10.2008 um 22:32 Uhr
Hallo Turrex0100 und willkommen im Forum!

Das könnte etwa so gehen:
01.
@echo off & setlocal 
02.
set "N=d:\namen.txt" 
03.
set "T=%temp%\NamNum.txt" 
04.
 
05.
findstr /n "^" "%N%">%T% 
06.
for /f "delims=:" %%i in (%T%) do set /a Anzahl=%%i 
07.
set /a Nr=%Random% %% Anzahl+1 
08.
 
09.
for /f "tokens=1* delims=:" %%i in ('findstr /b "%Nr%:" %T%') do set "zufall_name=%%j" 
10.
del %T% 
11.
echo %zufall_name%
Wenn Du auf das Löschen von %T% verzichtest, kannst Du nachvollziehen, dass in der Temporär-Datei "%temp%\NamNum.txt" die Namen wie folgt aufgelistet werden:
1:johannes 
2:bernd 
3:dieter 
4:usw
Dies wird erreicht, indem mit "findstr" zunächst in jeder Zeile von "namen.txt" nach dem Zeilenanfang ("^") gesucht (den muss es ja geben) und das Suchergebnis (das demnach alle Zeilen enthält) nummeriert ausgegeben wird (siehe Zeile 5).

Die "for /f"-Schleife in Zeile 6 geht nun alle Zeilen durch und liest den vor dem ersten vorkommenden Trennzeichen ("delimiter") ":" stehenden Teil der Zeile (also die Nummer) ein und weist sie der Variablen %Anzahl% zu. Dabei wird der Inhalt von %Anzahl% immer wieder überschrieben, bis letztendlich die Nummer der letzten Zeile in %Anzahl% stehen bleibt. Damit steht fest, wieviele Namen es insgesamt gibt.

Die Verwendung von "Zufallszahl" (%Random%) und "Modulo-Funktion" (in einem Batch als "%%" geschrieben) hat Biber ja im oben verlinkten Beitrag schon erklärt. Die vorläufig ermittelte Nummer (%Nr%) ist eine Zahl zwischen 0 und %Anzahl%-1 (also im Beispiel 3), weshalb dann noch ein "+1" benötigt wird, damit tatsächlich eine Zeilennummer von 1 bis %Anzahl% (hier: 4) herauskommt.

Nach dem Vorkommen dieser %Nr% plus anschließendem ":" gleich am Zeilenanfang wird nun in der Temporärdatei gesucht (siehe Zeile 9), wobei dieses Mal der hinter dem ersten Tennzeichen (":") der Ergebniszeile stehende Teil ("token") interessiert, weswegen die Unterteilung in der "for /f"-Schleife in "Teil 1" und "Rest" ("tokens=1*") vorgenommen wird. Die Zeilennummer wird auch hier als "%%i" zurückgegeben, während der Name als "%%j" zur Verfügung steht und der Variablen %zufall_name% zugewiesen werden kann.

Grüße
bastla
Bitte warten ..
Mitglied: Turrex0100
29.10.2008 um 13:06 Uhr
Ok, grossen dank für deine schnelle antwort!
Es klapptt alles wie gewollt und ich verstehe jetzt sogar den befehl for.^^

mfg Turrex
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

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

Frage von Xaero1982 zum Thema Microsoft ...

Outlook & Mail
gelöst Outlook 2010 findet ost datei nicht (19)

Frage von Floh21 zum Thema Outlook & Mail ...

Windows Server
Server 2008R2 startet nicht mehr (Bad Patch 0xa) (18)

Frage von Haures zum Thema Windows Server ...

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

Frage von Unwichtig zum Thema Netzwerkmanagement ...