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: ne0nymous

ne0nymous (Level 1) - Jetzt verbinden

05.07.2012, aktualisiert 00:36 Uhr, 2517 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: ne0nymous
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: ne0nymous
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: ne0nymous
05.07.2012 um 17:46 Uhr
Wunderbar. Hat einwandfrei funktioniert. Vielen Dank!
Bitte warten ..
Neuester Wissensbeitrag
CPU, RAM, Mainboards

Angetestet: PC Engines APU 3a2 im Rack-Gehäuse

(1)

Erfahrungsbericht von ashnod zum Thema CPU, RAM, Mainboards ...

Ähnliche Inhalte
Batch & Shell
gelöst Selected Gridview Value in Variable schreiben (4)

Frage von reissaus73 zum Thema Batch & Shell ...

Batch & Shell
gelöst Batch Abfrage Vergleiche mit Variable goto (4)

Frage von Zunaras zum Thema Batch & Shell ...

Batch & Shell
Variable setzen können während timeout (3)

Frage von DontFlameMeITryMyBest zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
DSL, VDSL
DSL-Signal bewerten (13)

Frage von SarekHL zum Thema DSL, VDSL ...

Switche und Hubs
Trunk für 2xCisco Switch. Wo liegt der Fehler? (9)

Frage von JayyyH zum Thema Switche und Hubs ...

Windows Server
Mailserver auf Windows Server 2012 (9)

Frage von StefanT81 zum Thema Windows Server ...

Backup
Clients als Server missbrauchen? (9)

Frage von 1410640014 zum Thema Backup ...