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

Frage Entwicklung Batch & Shell

GELÖST

Set name gleich findstr-Ausgabe. Wie Kriege ich das am besten hin... set oder for?

Mitglied: Apop85

Apop85 (Level 1) - Jetzt verbinden

09.04.2013, aktualisiert 00:55 Uhr, 1592 Aufrufe, 7 Kommentare

Hallo

Also habe mich durch das FOR tutorial gelesen aber habe einige Abschnitte wohl nicht ganz verstanden.
Ich möchte dass das Ergebnis von findstr als Variable gespeichert wird und wenn die Variable nicht mit dem eingegebenen übereinstimmt nach :a weiterleiten sonst nach :b

Erst mal SOrry für das zuspamen des Batch/Shell-Bereichs aber es hat mich grad gepackt und da ich an einem für mich schon etwas grösseren Projekt intensiv arbeite kommen Mehrere Fragen nacheinander auf.

Also ich versuche, dass das Ergebnis des findstr Befehls als Variable, nennen wir sie %V1%, gespeichert wird. Dies kann zum Beispiel sein: NAME = 12.34 Euro. %V1% soll dann mit dem bei der Abfrage eingegebenen Daten verglichen werden und wenn diese nicht übereinstimmen soll darauf aufmerksam gemacht werden.

Mittels cmd-Fenster habe ich folgendes Probiert:
01.
set zeile=(findstr %name% "database.txt") 
02.
%zeile% 
03.
Kohlenstoff = 12.05 g/mol
Wenn ich dies jedoch mittels Batch ausführe erhalte ich als "echo %V1%" folgende Ausgabe:
01.
findstr NAME  C:\Dokumente und Einstellungen\admin\Desktop\BATCH\database.txt
Ich versteh nun nicht ganz warum es im CMD-Fenster mit einzeleingabe funktioniert jedoch nicht mittels Batch

Wie schon geschrieben habe ich mir mal das FOR-Tutorial angesehen und hab mal was gebastelt.
01.
for /f %%zeile in (findstr %name% %cd%\database.txt) do goto :1
Jedoch könnte ich da auch gleich exit eingeben ;)
Dies habe ich aus dem Tutorial abgeleitet in welchem dies so aufgeführt ist:
01.
for /f %%c in ('echo %Number%^|findstr "[^0-9]"') do goto :InputNumber 
Dies ist das Versuchsscript in welchem ich die Funktion prüfe:
01.
@echo off 
02.
:START 
03.
set name=Kohlenstoff & set "mcg=12" & set "mcgnk=05" 
04.
echo %name% %mcg%.%mcgnk% 
05.
 
06.
set zeile=(findstr %name% %cd%\database.txt) 
07.
echo zeile = %zeile% 
08.
pause >NUL 
09.
 
10.
if findstr %name% %cd%\database.txt == %name% %mcg%.%mcgnk% g/mol echo Geschafft & goto START 
11.
echo NOPE 
12.
pause >NUL 
13.
goto START
Danke schonmals für eure Hilfe

Mitglied: Endoro
09.04.2013 um 07:47 Uhr
Hallo Apop85,

geht (wie meistens in Batch) mit einer Forschleife:

01.
for /f "tokens=1-3 delims=. " %%i in ('findstr "%name%" "%cd%\database.txt"') do set "DBname=%%i"& set "DBmcg=%%j"& set "DBmcgnk=%%k" 
02.
if "%name%"=="%DBname%" (echo %name% found) else echo %name% not found
.. wenn "database.txt" so aufgebaut ist:
01.
name mcg.mcgnk
Welches Tutorial meinst du?


Gruss!
Bitte warten ..
Mitglied: Apop85
09.04.2013, aktualisiert um 12:21 Uhr
Habe if /? angeschaut und
http://www.administrator.de/forum/if-befehl-wie-funktioniert-er-46913.h ...

Also ich versuche mal nachzuvollziehen was dieses FOR Script genau durchführt. Ich könnte jetzt auch Kopieren und Enfügen nur versteh ich beim Nächsten mal dann immer noch nicht wies geht ;) daher versuche ich dcas mal für mich auszudeutschen

01.
for /f "tokens=1-3 delims=. " %%i in ('findstr "%name%" "%cd%\database.txt"') do set "DBname=%%i"& set 
WENN (Eingabe Zeichenkette) "Lese Variablen 1-3 (%%i %%j %%k)
Trennzeichen=- "
%%Variabel1 findet man IN
('findstr "%name%" "%cd%\database.txt') MACHE set "DBname=%%Variabel1
</code>
Den Nächsten Teil verstehe ich nicht ganz warum du dies so geschrieben hast
01.
set "DBmcg=%%j"& set "DBmcgnk=%%k"

Wenn du versuchst hier die Zahlen der Datenbank auszulesen musst du mir das nochmals etwas erläutern. In der Datenbank sind die Einträge wie Folgt:

"STOFFNAME - %mcg%.%mcgnk% mcg/l"
z.B. "Kohlenstoff - 12.05 mcg/l"

Die IF Überprüfung ist mir dann wieder klar.

Hab aber noch allgemeine Fragen.

Du benutzt bei dir %%i das habe ich einigen Scripts schon so gesehen. Hat das eine bestimmte bedeutung dass als Variabel "i" gewählt wird oder hat sich das einfach so etabliert?

Habe ich das richtig verstanden das for / f bedeutet dass ich keinen Ort angebe sondern einen Befehl?

Wozu dient das Trennzeichen (delims)?

Danke für die Hilfe
Bitte warten ..
Mitglied: Endoro
09.04.2013, aktualisiert um 13:43 Uhr
Hallo Apop85,

damit meine Schleife richtig funktioniert, muss noch "-" bei den Tokentrennern eingefügt werden:
01.
for /f "tokens=1-3 delims=.- " %%i in ('findstr "%name%" "%cd%\database.txt"') do set "DBname=%%i"& set "DBmcg=%%j"& set "DBmcgnk=%%k" 
02.
if "%name%"=="%DBname%" (echo %name% found) else echo %name% not found
Wenn du mehr über Forschleifen wissen willst, brauchst du unbedingt dieses Tutorial. Da ist alles prima erklärt


Gruss!
Bitte warten ..
Mitglied: Apop85
10.04.2013, aktualisiert um 18:08 Uhr
Danke viel mals für deine mühe

Musste den Code noch etwas abändern damit er die Ausgabe gemacht hat die ich wollte
<EDIT> Dein Code Stimmt hab ihn bloss falsch interpretiert ;) </EDIT>
Habe die delims weg genommen weil ich die ganze Zeile der Ausgabe brauche aber vielen Dank für deinen Ansatz. Am Tutorial bin ich noch dran.

01.
for /f "tokens=1-3 delims=" %%i in ('findstr "%name%" "%cd%\database.txt"') do set "DBname=%%i"& set "DBmcg=%%j"& set "DBmcgnk=%%k" 
02.
if "%name%"=="%DBname%" (echo %name% found) else echo %name% not found

So macht es was ich gern möchte. Ich werd das Problem noch nicht als gelöst kennzeichnen weil ich die volle Funktion noch nicht in mein Script integriert habe.

Meine ganze Abfrage lautet.

Wenn %name% in der Datenbank vorhanden ist, lese Zeile aus und benutze die in der Zeile angegebenen Zahlen als Variablen. Sollte in der Datenbank kein Eintrag vorhanden sein frage den Benutzer ob dieser gerne auf Wikipedia nach der Information suchen will. Wurden die Informationen eingegeben erstelle eine neue Zeile in der Datenbank mit den eingegeben Variablen.

Das hinzufügen in die Datenbank sollte kein Problem darstellen sowie auch das Auslesen der Zahlen aus der Zeile muss aber noch den if-Befehl noch etwas studieren damit ich das so umsetzen kann...

Noch cooler wäre wenn zwei identische Zeilen in der Datenbank existieren müssen damit der Wert automatisch übernommen wird, somit müsste man zwei mal das Selbe eingeben um die Eingaben sozusagen zu verifizieren.

Gruss Apop
Bitte warten ..
Mitglied: Endoro
10.04.2013, aktualisiert um 18:06 Uhr
Hallo Apop,

wenn du die Tokentrenner aus der Schleife wirfst, kannst du auch die "tokens=1-3" rausschmeissen: du wirst ohne Trenner keine erhalten


Zitat von Apop85:
Noch cooler wäre wenn zwei identische Zeilen in der Datenbank existieren müssen damit der Wert automatisch

Das verstehe ich nicht. ME sind doppelte Datensätze in einer Datenbank eher Mist.

Gruss!
Bitte warten ..
Mitglied: Apop85
11.04.2013, aktualisiert um 03:36 Uhr
Hallo
Endoro

wenn du die Tokentrenner aus der Schleife wirfst, kannst du auch die "tokens=1-3" rausschmeissen: du wirst ohne Trenner keine erhalten
musste ich auch rausfinden ^^


Das verstehe ich nicht. ME sind doppelte Datensätze in einer Datenbank eher Mist.

Nunja es geht hier um die Umrechnung von Medizinischen Daten daher ist es eine vorsichtsmassnahme, dass die Eingabe des Stoffs doppelt vorhanden sein muss bevor er als "Verifiziert" gillt.

Bin jetzt soweit, dass ich überprüfen möchte ob die Eingabe nicht überschritten wurde.
die Trennung funktioniert bis anhin gut.

Ich habe es so geschrieben, dass er überprüft ob in der Nachkommastelle eine oder mehrere 0 vorhanden sind. Das Problem jedoch ist, dass wenn ich nur zwei Stellen angebe also z.b. 1.25 dann schmiert das Programm ab... das ist natürlich eher suboptimal und ich finde grad keine Lösung dazu...
01.
for /f "delims=. tokens=1-2" %%a in ("%mcg%") do ( 
02.
				Set "mcg=%%a" 
03.
				Set "mcgnk=%%b" 
04.
05.
 
06.
if %mcgnk% GEQ 999 goto REWA2 
07.
if %mcgnk:~0,3% == 000 if %mcgnk% GEQ 1 goto REWA2 
08.
if %mcgnk:~0,2% == 00 if %mcgnk:~2,3% GEQ 9 goto REWA2 -- hier schmiert er ab bei 1.25 
09.
if %mcgnk:~0,1% == 0 if %mcgnk:~1,4% GEQ 99 echo REWA2 -- ich nehm an spätestens hier bei 1.2 
10.
goto EINGPRUE2
Danke für deine bisherige Hilfe
<edit>
hab da schon mal einen ansatz gefunden wie ich den Absturz umgehen kann ausser bei einer Variabel
Dieses mal möchte ich noch einfügen, dass man auch einfach .123 eingaben kann anstatt 0.123

01.
if "%mcg%" == "" set /a mcg=0              <<-- hier schmiert er dieses mal ab. Könnte aber auch die For schleife sein... 
02.
if "%mcgnk:~2,3%" == "" if "%mcgnk:~1,4%" == "" set /a mcgnk=%mcgnk%*100 & goto EINGPRUE2 
03.
if "%mcgnk:~2,3%" == "" set /a mcgnk=%mcgnk%*10 & goto EINGPRUE2
</edit>
<edit2>
Hab gemerkt, dass wenn vor dem Punkt nichts steht er die Nachkommastelle als erste Variable definiert...
nun versuche ich dies zu drehen.

01.
if "%mcgnk%" == "" set mcgnk=%mcg% & set mcg=0
Nur Funktioniert dies leider nicht
Wenn ich .6 eingebe stellt er mcg zwar auf "0" jedoch mcgnk stellt er auf "6 " Dann schmeisst ihn die 3. Zeile vom ersten Edit zum Resultat... nur da wird dann "0.10 " angezeigt anstatt "0.100"
</edit2>
Apop85



P.S.
gibts für folgende Variabeleigenschaft irgendwo ein Tutorial?
01.
%variable:~0,1%
Was heisst genau was und kann ich z.B. auch von Hinten beginnen? Also dass er z.B. von 1.13456 nur die letzten 3 Zahlen ausliest (456)?
Ich kann aber keine bestimmte länge der variable voraussetzen kann also auch mal 4.123 sein und daraus soll er 123 auslesen.
Bitte warten ..
Mitglied: Apop85
11.04.2013 um 22:33 Uhr
Gelöst
Eigentlich ganz Simpel...

01.
if "%mcgnk%" == "" set /a mcgnk=%mcg%*1 & set mcg=0
einfach mcgnk als Rechnung x 1 nehmen und es kommt wie ichs möchte

also gesammte abfrage für die Zahl lautet;
01.
for /f "delims=. tokens=1-2" %%a in ("%mcg%") do ( 
02.
				Set "mcg=%%a" 
03.
				Set "mcgnk=%%b" 
04.
05.
 
06.
if "%mcgnk%" == "" set /a mcgnk=%mcg%*1 & set mcg=0 
07.
echo "%mcg%" "%mcgnk%" 
08.
pause 
09.
if %mcgnk% GEQ 999 goto REWA2 
10.
 
11.
echo "%mcg%" "%mcgnk%" 
12.
if "%mcgnk:~2,3%" == "" if "%mcgnk:~1,4%" == "" set /a mcgnk=%mcgnk%*100 & goto EINGPRUE2 
13.
if "%mcgnk:~2,3%" == "" set /a mcgnk=%mcgnk%*10 & goto EINGPRUE2 
14.
if %mcgnk:~0,3% == 000 if %mcgnk% GEQ 1 goto REWA2 
15.
if %mcgnk:~0,2% == 00 if %mcgnk:~2,3% GEQ 9 goto REWA2  
16.
if %mcgnk:~0,1% == 0 if %mcgnk:~1,4% GEQ 99 echo REWA2
Ich werd das Thema mal schliessen. Wenn jemand noch einen Link eines Tutorials hätte für folgenden Abschnitt wär ich ganz froh.
01.
%variable:~0,1%



Grüsse und Danke wieder mal für die Hilfe
Bitte warten ..
Ähnliche Inhalte
Webentwicklung
TYPO3: TCA, Ausgabe vom Namen aus FE-Users
Frage von d4shoerncheNWebentwicklung2 Kommentare

Guten Morgen, hoffe hier ist der ein oder andere der sich ein wenig mit TYPO3 auskennt. Ich habe eine ...

Batch & Shell
Variablen und Set
gelöst Frage von CerauxBatch & Shell2 Kommentare

Hallo, ich weiß nicht wie man mehrere Wörter in eine Variable machen? Also so: if %var1%%var2% echo Hallo %var1%=Dies ...

Windows Tools
Findstr und regex
gelöst Frage von tobmesWindows Tools5 Kommentare

Hi Experten, ich habe ziemlich viele PDF-Dateien, die ich mittels eines Batch-Files nach einem Bestimmten Muster durchsuchen möchte. Die ...

E-Mail
Kriege emails nicht wenn ich im CC bin
gelöst Frage von hepatocytE-Mail43 Kommentare

Hallo, auf der Arbeit versendet ein Mitarbeiter Emails mit Terminen für Treffen. Ich weiss, dass er mich von diesen ...

Neue Wissensbeiträge
Linux

Meltdown und Spectre: Linux Update

Information von Frank vor 2 TagenLinux

Meltdown (Variante 3 des Prozessorfehlers) Der Kernel 4.14.13 mit den Page-Table-Isolation-Code (PTI) ist nun für Fedora freigegeben worden. Er ...

Tipps & Tricks

Solutio Charly Updater Fehlermeldung: Das Abgleichen der Dateien in -Pfad- mit dem Datenobject ist fehlgeschlagen

Tipp von StefanKittel vor 3 TagenTipps & Tricks

Hallo, hier einmal als Tipp für alle unter Euch die mit der Zahnarztabrechnungssoftware Charly von Solutio zu tun haben. ...

Sicherheit

Meltdown und Spectre: Wir brauchen eine "Abwrackprämie", die die CPU-Hersteller bezahlen

Information von Frank vor 3 TagenSicherheit12 Kommentare

Zum aktuellen Thema Meltdown und Spectre: Ich wünsche mir von den CPU-Herstellern wie Intel, AMD oder ARM eine Art ...

Sicherheit

Meltdown und Spectre: Realitätscheck

Information von Frank vor 3 TagenSicherheit12 Kommentare

Die unangenehme Realität Der Prozessorfehler mit seinen Varianten Meltdown und Spectre ist seit Juni 2017 bekannt. Trotzdem sind immer ...

Heiß diskutierte Inhalte
Firewall
Penetrationstester-Labor - Firewalls
Frage von Oli-nuxFirewall10 Kommentare

Mich würde interessieren warum man beim Einrichten eines Penetrationstester-Labor (VMs) die Firewall der Systeme deaktivieren soll? Hat das nur ...

SAN, NAS, DAS
Wer kennt sich mit QNAP und CISCO aus ?
gelöst Frage von MachelloSAN, NAS, DAS9 Kommentare

Hallo Zusammen hier im Forum, Ich habe ein QNas 451+ und dieses NAS hat zwei GBit Lan Adapter die ...

Netzwerkgrundlagen
IPv6 Inter-VLAN Routing
gelöst Frage von clSchakNetzwerkgrundlagen9 Kommentare

Hi ich befasse mich gerade mit der Implementierung von IPv6 was bisher (in einem VLAN) korrekt funktioniert inkl. DNS ...

Windows Netzwerk
Zugriff auf den Desktop Ordner eines anderen Rechners in der gleichen Domäne
gelöst Frage von JensNomaWindows Netzwerk6 Kommentare

Guten Abend, ich war neulich mit unserem Admin am Tisch gesessen. Er an seinem Notebook angemeldet mit dem Domänen-Admin, ...