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 überprüfen mit Platzhaltern

Frage Entwicklung Batch & Shell

Mitglied: 107389

107389 (Level 1)

05.07.2012, aktualisiert 00:36 Uhr, 2534 Aufrufe, 6 Kommentare

Hallo liebe Administratoren

Ich lade mir den Namen des Ordners, aus dem die Batch ausgeführt wird in die Variable %ordner%. Jetzt möchte ich überprüfen, ob der Ordnername mit einem bestimmten Schema übereinstimmt. (z.B. AS_0000_00_00 - AS und die Unterstriche sind immer am selben Platz, für die Nullen können Zahlen zwischen 0 und 9 stehen)
Bei meinem Code springe ich allerdings immer zu :gefunden, auch wenn das Schema vom Ordner überhaupt nicht passt...
...was mache ich falsch?


01.
 
02.
     PushD "%1"  
03.
            for %%i in ("%cd:\=","%") do set "ordner=%%i"  
04.
        PopD 
05.
 
06.
 
07.
        echo %ordner%|findstr /L /C:"AS[0-9][0-9][0-9][0-9]_[0-9][0-9]_[0-9][0-9]" || goto gefunden 
08.
        goto nicht_gefunden 
09.
         
10.
        :gefunden 
11.
        echo gefunden 
12.
        pause 
13.
        goto weiter 
14.
        :nicht_gefunden 
15.
        echo nicht gefunden 
16.
        pause 
17.
        :weiter 
18.
        pause 
19.
 


Vielen Dank schonmal für die Hilfe
Mitglied: bastla
05.07.2012, aktualisiert um 09:46 Uhr
Hallo ne0nymous und willkommen im Forum!

Soferne Deine Beschreibung "AS_0000_00_00" richtig war, fehlt im Suchstring der "_" nach "AS" - ansonsten sind auch die verwendeten Schalter unnötig ("/c:" wird nur benötigt, wenn Leerzeichen enthalten sind) / kontraproduktiv "/L" sucht eben nicht als RegEx) - und schließlich wird mit "||" bei "nicht gefunden" der Sprung ausgeführt ...

... daher eher so:
01.
PushD "%1"  
02.
for %%i in ("%cd:\=","%") do set "ordner=%%i"  
03.
PopD 
04.
 
05.
echo %ordner%|findstr "AS_[0-9][0-9][0-9][0-9]_[0-9][0-9]_[0-9][0-9]">nul || goto nicht_gefunden 
06.
         
07.
echo gefunden 
08.
pause 
09.
goto weiter 
10.
 
11.
:nicht_gefunden 
12.
echo nicht gefunden 
13.
pause 
14.
 
15.
:weiter 
16.
pause
Grüße
bastla
Bitte warten ..
Mitglied: 107389
05.07.2012 um 11:51 Uhr
Hallo bastla. Danke für deinen Code, hat soweit super funktioniert (war AS0000_00_00, ohne Unterstrich)

Jetzt stehe ich aber vor nem anderen Problem.
Wenn die Variable / der Ordnername länger ist (z.B. "AS0000_00_00 (data)" , springt er trotzdem zu :gefunden.
Ist es möglich, dass man nach der Auswertung vom findstr alles aus der Variablen löscht, was nicht mit dem Schema übereinstimmt, dass man danach nurnoch "AS0000_00_00" darin stehen hat?

Grüße
Bitte warten ..
Mitglied: bastla
05.07.2012 um 12:02 Uhr
Hallo ne0nymous!
springt er trotzdem zu :gefunden.
In meinem Ansatz gibt es kein ":gefunden".
Um den gesamten String zu vergleichen, kannst Du den Schalter "/x" hinzufügen, um nur den Anfang/das Ende zu überprüfen gibt es "/b" bzw "/e" ...
Ist es möglich, dass man nach der Auswertung vom findstr alles aus der Variablen löscht, was nicht mit dem Schema übereinstimmt, dass man danach nurnoch "AS0000_00_00" darin stehen hat?
Dazu brauchst Du ja nur einen entsprechend (12 Zeichen) langen Teilstring zu bilden (siehe "set /?"):
set "ordner=%ordner:~,12%"
Grüße
bastla
Bitte warten ..
Mitglied: 107389
05.07.2012, aktualisiert um 12:33 Uhr
Zitat von bastla:
In meinem Ansatz gibt es kein ":gefunden".

Ich meinte natürlich dass er dann "echo gefunden" ausführt.


01.
 
02.
        PushD "%1"  
03.
            for %%i in ("%cd:\=","%") do set "ordner=%%i"  
04.
        PopD 
05.
            cd .. 
06.
 
07.
Das ist mein jetziger Code 
08.
 
09.
echo %ordner% 
10.
pause 
11.
 
12.
        echo %ordner%|findstr "AS[0-9][0-9][0-9][0-9]_[0-9][0-9]_[0-9][0-9]" || goto nicht_gefunden 
13.
        set "ordner=%ordner:~,12%" 
14.
        echo gefunden 
15.
        pause 
16.
        goto gefunden 
17.
        :nicht_gefunden 
18.
        set "ordner=%ordner:~,12%" 
19.
        echo nicht gefunden 
20.
        pause 
21.
        echo %ordner% 
22.
        pause 
23.
        :gefunden 
24.
        pause 
25.
        echo %ordner% 
26.
        pause 
27.
 
Ich hab jetzt nach dem "set "ordner=%ordner:~,12%" immer ein " am Anfang der Variable und die letzte Ziffer abgeschnitten.
Wie bring ich des " weg? Hab "set "ordner=%ordner:1,~,12%" probiert aber dann geht garnichmehr...

Vielen Dank!
Bitte warten ..
Mitglied: bastla
05.07.2012 um 12:42 Uhr
Hallo ne0nymous!

Du könntest zwar ganz genau
set "ordner=%ordner:~0,12%"
schreiben, aber es wird auch in diesem Fall natürlich der Inhalt von %ordner% den Ausschlag geben - versuch es daher mit folgender Zeile 3:
for %%i in ("%cd:\=","%") do set "ordner=%%~i"
damit wird der Ordnername nicht mehr in Anführungszeichen in die Variable geschrieben ...

Grüße
bastla
Bitte warten ..
Mitglied: 107389
05.07.2012 um 17:46 Uhr
Wunderbar. Hat einwandfrei funktioniert. Vielen Dank!
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
gelöst Mit zusammengesetzter Variable auf andere Variable zugreifen (2)

Frage von abiber zum Thema Batch & Shell ...

Router & Routing
Pfsense - QoS überprüfen

Frage von MegaGiga zum Thema Router & Routing ...

Batch & Shell
gelöst Batch: Aktuelle Codepage in Variable speichern (3)

Frage von tomaschku zum Thema Batch & Shell ...

VB for Applications
Auswahlliste mit variablen (3)

Frage von 94451 zum Thema VB for Applications ...

Neue Wissensbeiträge
Windows Update

Microsoft Update KB4034664 verursacht Probleme mit Multimonitor-Systemen

Tipp von beidermachtvongreyscull zum Thema Windows Update ...

Viren und Trojaner

CNC-Fräsen von MECANUMERIC werden (ggf.) mit Viren, Trojanern, Würmern ausgeliefert

(4)

Erfahrungsbericht von anteNope zum Thema Viren und Trojaner ...

Windows 10

Windows 10: Erste Anmeldung Animation deaktivieren

(3)

Anleitung von alemanne21 zum Thema Windows 10 ...

Heiß diskutierte Inhalte
Router & Routing
gelöst Linksys wrt1200ac v2 mit dd-wrt: keine vlan-einstellungen im GUI (15)

Frage von Pixi123 zum Thema Router & Routing ...

E-Business
Wo tragt ihr eure privaten Termine ein? (13)

Frage von honeybee zum Thema E-Business ...

Netzwerkprotokolle
Leiten "dumme" Switches VLAN-Tags mit durch? (13)

Frage von coltseavers zum Thema Netzwerkprotokolle ...

Windows Server
Terminalserver starten willkürlich neu (12)

Frage von thaefliger zum Thema Windows Server ...