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

Batch IF Befehl zum Abfragen eines einzelnen Wertes mit mehreren Werten in einer Variable...

Frage Entwicklung Batch & Shell

Mitglied: Beatzler

Beatzler (Level 1) - Jetzt verbinden

10.03.2011 um 14:21 Uhr, 4980 Aufrufe, 16 Kommentare

Hey,

könnte mir vielleicht bitte jemand bei folgendem Problem einen Tipp oder eine Hilfestellung geben ???

Wäre super! Vielen Dank im voraus!


In einer Batch wird ein Übergabeparameter %1 geprüft:

IF %1 == "STICHWORT!" ( SET AUSWAHL=1 ) else ( SET AUSWAHL=0 )

Soweit so gut.

Problem ist jetzt nur das in %1 aber immer mehrere Wörter / eine längere Zeile übergeben wird...

z.B.
%1="STICHWORT! Hier ist der restliche Text"

oder einfach nur

%1="Hier ist nochmals ein anderer restlicher Text"


Meine Abfrage oben greift aber nur wenn %1 wirklich nur "STICHWORT!" enthält ...

Wie kann ich %1 trotzdem abfragen und richtig zurordnen obwohl mehrere Wörter enthalten sind ?


Vielen Dank für einen Tipp!

Mit freundlichen Grüßen Beatzler
Mitglied: bastla
10.03.2011 um 14:29 Uhr
Hallo Beatzler!

Versuch es etwa so:
echo %1|findstr "STICHWORT!">nul && SET "AUSWAHL=1" || SET "AUSWAHL=0"
Grüße
bastla
Bitte warten ..
Mitglied: Beatzler
10.03.2011 um 16:12 Uhr
Hey bastla,

vielen Dank für deine schnelle Antwort mal wieder

Leider klappt es nicht so ganz ...

Dein Code oben ist nur Stichpunktartig oder?

Habe es jetzt nochmal so versucht:

echo %1 > C:\Test\test.txt
set "WORT=C:\Test\test.txt
findstr /c:"STICHWORT!" "C:\Test\test.txt">nul && for /f "usebackq delims=" %%i in ("%WORT%") do SET AUSWAHL=1

klappt aber auch nicht so richtig .....

Es muss doch auch direkt gehen %1abzufragen ohne erst in eine txt zu exportieren oder ?

Mit freundlichen Grüßen Beatzler
Bitte warten ..
Mitglied: bastla
10.03.2011 um 16:42 Uhr
Hallo Beatazler!
Dein Code oben ist nur Stichpunktartig oder?
Keineswegs - als etwas "verzierter" Batch "CheckParam.cmd"
01.
@echo off & setlocal 
02.
echo %1 
03.
echo %1|findstr "STICHWORT!">nul && SET "AUSWAHL=1" || SET "AUSWAHL=0" 
04.
echo %AUSWAHL%
liefert er folgende Ergebnisse
D:\>CheckParam.cmd "STICHWORT! Hier ist der restliche Text" 
"STICHWORT! Hier ist der restliche Text" 
 
D:\>CheckParam.cmd "Hier ist nochmals ein anderer restlicher Text" 
"Hier ist nochmals ein anderer restlicher Text" 
0
Um ev noch Unterschiede aufgrund der Groß-/Kleinschreibung auszuschließen, könntest Du "findstr /i" verwenden ...

Grüße
bastla
Bitte warten ..
Mitglied: Beatzler
10.03.2011 um 19:08 Uhr
Hey bastla.

Ich werde das nochmals in Ruhe testen. Dachte das Wäre nur nen Schnipsel oder so.

Vielen dank erstmal wieder an dich, super

Mit freundlichen Grüßen beatzler
Bitte warten ..
Mitglied: Beatzler
13.03.2011 um 19:54 Uhr
Hey,

das klappt soweit super

Nur leider hab ich aktuell schon knapp 200 findstr abfragen ....

Die Batch braucht schon ne gewisse Zeit jetzt bis sie durchgelaufen ist ...

Gibs ggf. zu findstr noch ne schnellere Alternative ???

Danke für Tipps!

Mit freundlichen Grüßen Beatzler
Bitte warten ..
Mitglied: Beatzler
14.03.2011 um 22:14 Uhr
Hey,

alsoo ich komm da irgendwie auf überhaupt keinen grünen Zweig Batch scheint dafür zu langsam zu sein ....

Habe nun versucht das ganze mit vbs anzufangen nur da hab ich noch weniger Ahnung von :/

z.B. mit einer weiteren Hilfe habe ich es aktuell soweit hinbekommen das folgende VBS grundlegen läuft ...

If Wscript.Arguments(0) = "test" Then wscript.echo "Ausgabetext"

Wird das so aufgerufen: skript.vbs test gibt er mir in einer extra box Ausgabetext aus

Soweit so gut

Problem 1 ist jetzt das mein beispielwert, hier test, ja leider real an einer belibigen stelle in einer längern Variablen stehen würde

Problem 2: Ich würde das vbs file dann ja aus der Batch starten ... wie bekomme ich den "gefilterten" Wert zurück in die Batch zum weiterverarbeiten und das die batch solange wartet ?!

Fragen über fragen ....

Danke für tipps nochmals !
Bitte warten ..
Mitglied: bastla
14.03.2011 um 22:24 Uhr
Hallo Beatzler!

Das VBScript müsste eher so aussehen (ungetestet):
If InStr(WScript.Arguments(0),WScript.Arguments(1))>0 Then WScript.Echo "Ausgabetext" Else WScript.Echo "Alternativtext"
bzw, wenn die Rückgabe von 0 oder 1 genügt, auch so:
WScript.Echo Abs(InStr(WScript.Arguments(0),WScript.Arguments(1))>0)
und der Aufruf könnte so erfolgen:
01.
set "AUSWAHL=" 
02.
for /f %%i in ('cscript //nologo script.vbs "%~1" "STICHWORT!"') do set "AUSWAHL=%%i" 
03.
if defined AUSWAHL echo %AUSWAHL% else echo Kein Rueckgabewert!
Grüße
bastla
Bitte warten ..
Mitglied: Beatzler
14.03.2011 um 22:46 Uhr
Hey Bastla,

danke für deinen erneuten Tipp vielmals!

Also den eigentlichen Aufruf habe ich denke ich soweit verstanden, konnte ich aber noch nicht testen weil das skript fehlt ...

Wo gebe ich denn bei deiner ersten vb skript variante den Suchwert ein ?

Mit freundlichen Grüßen Beatzler
Bitte warten ..
Mitglied: bastla
15.03.2011 um 07:43 Uhr
Hallo Beatzler!

Du übergibst dem Script den zu durchsuchenden Text (also den Batch-Parameter %1) und das Suchwort (im Beispiel "STICHWORT!") wie in der Zeile 2 des Batchbeispieles gezeigt - die beiden Scriptvarianten unterscheiden sich eigentlich nur dadurch, dass im ersten Fall die Rückgabewert als Text festgelegt werden (was allerdings auch im Batch per "if" erfolgen könnte) und im zweiten Ansatz immer 1 oder 0 als Ergebnis geliefert wird ...

Grüße
bastla
Bitte warten ..
Mitglied: Beatzler
15.03.2011 um 13:51 Uhr
Hey Bastla,

jetzt hab ich es verstanden und konnte es nachvollziehen.

Habe das ganze grad mal mit ein paar mehr werten getestet

dann müsste die Batch ja so aussehen:

"sinngemäß"

@ECHO OFF
set "AUSWAHL="
for /f %%i in ('cscript nologo script.vbs "%~1" "STICHWORT!1"') do set "AUSWAHL=%%i"
for /f %%i in ('cscript
nologo script.vbs "%~1" "STICHWORT!2"') do set "AUSWAHL=%%i"
for /f %%i in ('cscript nologo script.vbs "%~1" "STICHWORT!3"') do set "AUSWAHL=%%i"
for /f %%i in ('cscript
nologo script.vbs "%~1" "STICHWORT!4"') do set "AUSWAHL=%%i"
for /f %%i in ('cscript //nologo script.vbs "%~1" "STICHWORT!5"') do set "AUSWAHL=%%i"

Das ganze funktioniert soweit jetzt auch soweit nur leider noch langsamer als dein ursprünglicher Batch Abfrage aufruf von oben Mhhh
Bitte warten ..
Mitglied: bastla
15.03.2011 um 14:55 Uhr
Hallo Beatzler!

Vielleicht erklärst Du einmal, was das eigentliche Ziel der ganzen Aktion ist - was passiert aufgrund des Inhaltes von %AUSWAHL% dann weiter? Soll das übrigens eine "Oder"-Verknüpfung für alle Stichworte ergeben, oder muss tatsächlich jedes einzeln ausgewertet werden?

Grüße
bastla
Bitte warten ..
Mitglied: Beatzler
15.03.2011 um 15:19 Uhr
Hey,

also das ganze ist für ne kleine private sprachansage .... Anfangs sollte das ganze nur auf einen Fehlerzustand hinweisen z.B. unterscheiden zwischen einem " normalen" Fehler und dann Ansage normal aufrufen oder einem kritischem Fehler und dann den kritischen Fehler zur Playlist hinzufügen und abspielen ...

Das klappt ja dank deiner Hilfe auch schon super

In den Übergabeparametern befindet sich die Fehlermeldung und eine Fehlernummer ... diese soll ausgewertet werden. Dann wird mittels Batch eine Playlist erzeugt und diese mit dem WM Player einfach abgespielt und danach direkt gelöscht ...

So nun möchte ich aber auch ganz gerne noch die Fehlernummer auswerten und das sind aktuell ca. schon 200 verschiedene... Und wenn halt Fehler Nr 124 in der Übergabevariable enthalten ist dann soll zur Playlist erst die Ansage normaler Fehler und danach dann noch ein kurzes Stichwort zum Fehler 124 ausgegeben werden ....

Die Fehlerart wird sehr schnell ausgewertet und dann sofort wiedergegeben aber wenn das skript dann erst 20 oder 30 sek. Braucht um diesen Hinweistext auch auszuwerten passt das ganze ja nicht mehr gut zusammen ....

Ist Batch oder VB dafür wirklich so ungeeignet da zu langsam ?

Danke dir nochmals !

Mit freundlichen Grüßen Beatzler
Bitte warten ..
Mitglied: bastla
15.03.2011 um 17:08 Uhr
Hallo Beatzler!

Wenn Du schon eine Liste der Fehler hast, kannst Du die doch in einer Textdatei hinterlegen - zB in der Form
Fehlernummer@Fehlerbeschreibung
und musst nur noch anhand der Nummer (im Beispiel als %1 übergeben) suchen - etwa:
01.
@echo off & setlocal 
02.
set "Nr=%~1" 
03.
set "Liste=D:\Fehlerliste.txt" 
04.
set "Fehler=" 
05.
for /f "tokens=1* delims=@" %%i in ('findstr /b "%Nr%@" "%Liste%"') do set "Fehler=%%j" 
06.
if defined Fehler ( 
07.
    echo Fehler Nr %Nr%: %Fehler% 
08.
) else ( 
09.
    echo Fehler Nr %Nr% nicht gefunden! 
10.
)
Grüße
bastla
Bitte warten ..
Mitglied: Beatzler
15.03.2011 um 17:58 Uhr
Hey bastla,

das ist einfach super! Genausowas meinte ich, du hast mich verstanden AUf diesen Lösungsweg mit dem externen suchen lassen in einer txt bin ich nicht gekommen ... vielen Dank!

Dein Skript läuft soweit genau so wie es soll wenn die erste Übergabevariable z.B. genau 100 ist klappt es bestens!

Aber Problem ist jetzt ja leider das die 100 irgendwo in der Übergabevariable steht ... Also z.B:

%1 = "*STICHWORT!*Fehlerart*Fehlernummer 124 Details*"

Wie würde man sowas am besten lösen ? Habe schon div. findstr parameter versucht, leider ohne Erfolg.

Untersuche ich die Fehlervariable mit der obigen if variante funktioniert´s genauso wie es soll auch auf einen Fehlercode:

echo %1|findstr "100">nul && SET "AUSWAHL=100" || SET "AUSWAHL=0"


UND

Kann man dir mal irgendwie was gutes tun ? Hast mir hier ja wirklich schon sooo viel geholfen !?!
Bitte warten ..
Mitglied: bastla
15.03.2011 um 18:44 Uhr
Hallo Beatzler!

Entspricht Dein Beispiel dem grundsätzlichen Aufbau des übergebenen Parameters (inkl der Sterne als Trennzeichen)? Wenn ja und daher die Fehlernummer immer an der selben Position (also zB wie oben als 2. Wort - gezählt anhand der Leerzeichen) steht, könntest Du sie so isolieren:
01.
set "Nr=" 
02.
for /f "tokens=2" %%i in ("%~1") do set "Nr=%%i" 
03.
if defined Nr echo Fehler Nr %Nr%
Grüße
bastla

P.S.:
Kann man dir mal irgendwie was gutes tun ?
Danke für das Angebot - aber vielleicht kannst Du ja selbst einmal jemandem (womit auch immer) helfen ...
Bitte warten ..
Mitglied: Beatzler
16.03.2011 um 17:20 Uhr
HEy Bastla,


viiiilen Dank für deine super Unterstützung !!! Dank deiner Hilfe habe ich es nun endlich hinbekommen und es läuft so wie es soll einfach super !!!

Danke nochmals

Mit freundlichen Grüßen Beatzler
Bitte warten ..
Neuester Wissensbeitrag
Internet

Unbemerkt - Telekom Netzumschaltung! - BNG - Broadband Network Gateway

(3)

Erfahrungsbericht von ashnod zum Thema Internet ...

Heiß diskutierte Inhalte
Windows Server
Outlook Verbindungsversuch mit Exchange (15)

Frage von xbast1x zum Thema Windows Server ...

Grafikkarten & Monitore
Tonprobleme bei Fernseher mit angeschlossenem Laptop über HDMI (11)

Frage von Y3shix zum Thema Grafikkarten & Monitore ...

Microsoft Office
Keine Updates für Office 2016 (11)

Frage von Motte990 zum Thema Microsoft Office ...