2017-08-11 5 views
1

Dies ist nicht der volle Umfang dessen, was ich tue. Ich habe destilliert ... Ich bin sicher, dass es etwas Kleines und Dummes gibt, das ich hier nicht erklären kann, ich sehe es einfach nicht.Batch/cmd für Schleife Syntaxfehler

Kann mir bitte jemand sagen, warum ich erfolgreich die folgenden netsh Befehl ausführen können:

netsh wlan show profile name="SomeWifi" 

Doch es in einem nicht für Schleife?

for /F "tokens=1,2 delims=:" %a in ('netsh wlan show profile name="SomeWifi"') do echo %a 

Anstelle der Profilinformationen, in der for-Schleife spuckt es diese Fehlermeldung aus:

Es gibt keine solche drahtlosen Schnittstelle auf dem System.

Was fehlt mir? Wird der Kontext in der Klammer geändert (wie der Benutzer)? Gibt es ein Zeichen-Escape-Problem?

+1

'= verwenden können,' wird als Trennzeichen behandelt und entsorgt. Entkomme es mit 'name^=" SomeWifi "' –

+0

Das war's! Genial. Poste dies als Antwort und ich akzeptiere es. – BuvinJ

Antwort

4

Es gibt einige Zeichen, die maskiert werden müssen (unter Verwendung von ^ als Präfix), wenn sie direkt in einem for /f Befehl verwendet werden.

Einige von ihnen sind die üblichen & und |, dass an den Parser eine besondere Bedeutung haben scheinen, dass offensichtlich scaping benötigen. Ein weiteres problematisches Merkmal ist die schließende Klammer ()), die als die schließende Klammer der in-Klausel des Befehls for angesehen werden kann.

Einige Zeichen (z. B. ,, ;) müssen jedoch nur entfernt werden, weil sie als Trennzeichen erkannt und entfernt werden. In Ihrem Fall = erzeugt das Problem

Sie

for /F "tokens=1,2 delims=:" %a in ('netsh wlan show profile name^="SomeWifi"') do echo %a