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
GELÖST

Erweitertes for - interpretation von !und! in variable?

Frage Entwicklung Batch & Shell

Mitglied: halo7one

halo7one (Level 1) - Jetzt verbinden

20.06.2008, aktualisiert 21.06.2008, 3988 Aufrufe, 6 Kommentare

Wie wird ein "&" in einer variable interpretier, die durch "!" sofort ersetzt werden soll?

Hi @ all,

ich habe folgendes Problem/Frage mit/zu einem Code wie diesem:
01.
@echo off & SETLOCAL EnableDelayedExpansion 
02.
set "echo6=echo test 1 & echo test 2" 
03.
set "number=6" 
04.
set "option6=true" 
05.
 
06.
for /l %%n in (1,1,%number%) do ( 
07.
if "!option%%n!"=="true" ( 
08.
echo das soll gemacht werden: !echo%%n! 
09.
!echo%%n! 
10.
echo %echo6% 
11.
)) 
12.
pause
Wie wird hier das "&" in "!echo%%n!" interpretiert (also ich meine allgemein)? So wie ich das sehe wird es nicht als Trennzeichen für mehrere Befehle interpretiert sondern als normales Zeichen, als wenn ich "^&" schreiben würde.

Kann mir jemand sagen wie es sich damit verhält und wie ich das "&" als Trennzeichen interpretiert bekomme?

Und evtl. erwähnt auch jemand die korrekte Bezeichnung der Zeichen/Operatoren (wie auch immer) "&" "^" und "!" (bei for mit Befehlserweiterung) XD

MfG,
halo7one
Mitglied: bastla
20.06.2008 um 18:22 Uhr
Hallo halo7one!

Der unten verlinkte Artikel beantwortet (hoffentlich) einige Deiner Fragen (auch Bezeichnung und Funktion von "Ampersand" (&) und "Caret" (^) werden erwähnt), allerdings geht für mich daraus (siehe unterhalb von "Parsing and executing a batch script") auch hervor, dass sich Deine Absicht nicht wird umsetzen lassen: http://cypressor.twoday.net/stories/4480453/

So unschön das auch ist, aber eine bessere Idee als etwa
01.
@echo off & SETLOCAL EnableDelayedExpansion 
02.
set "echo6=echo test 1 & echo test 2" 
03.
set "number=6" 
04.
set "option6=true" 
05.
 
06.
for /l %%n in (1,1,%number%) do ( 
07.
    if "!option%%n!"=="true" ( 
08.
        echo echo das soll gemacht werden: !echo%%n! 
09.
        call :Opt%%n 
10.
11.
12.
pause 
13.
goto :eof 
14.
 
15.
:Opt1 
16.
%echo1% & goto :eof 
17.
 
18.
:: 
19.
:: 
20.
 
21.
:Opt6 
22.
%echo6% & goto :eof
habe ich derzeit nicht. Damit hättest Du zumindest (im Vergleich zu einem direkten "call :Opt%%n" oder "goto :Opt%%n" und Festlegung der Befehle erst im Unterprogramm) die Möglichkeit, durch die Zuweisung zu den einzelnen %echo#%-Variablen alle Befehlszeilen gesammelt an den Anfang des Batches setzen zu können - ob's das allerdings bringt ...

Grüße
bastla

P.S.: Mal schauen, was Biber dazu einfällt ...
Bitte warten ..
Mitglied: Biber
21.06.2008 um 00:19 Uhr
Moin halo7one und bastla,

da fällt mir kaum etwas ein... außer: KISS... Keep It Simple, Stupid!

Ich kann es so testen:
01.
::--- snipp 2echoes.cmd 
02.
@echo off & setlocal disableDelayedExpansion 
03.
set "twoechoes=echo one & echo two" 
04.
echo [1]%twoechoes% 
05.
echo [2]"%twoechoes%" 
06.
echo [3]^"%twoechoes%^" 
07.
echo [4] test ausführen %%twoechoes%% 
08.
%twoechoes% 
09.
echo [5] Ausführen !twoechoes! mit DelayedExpansion 
10.
setlocal enableDelayedExpansion 
11.
!twoechoes! 
12.
endlocal 
13.
::Runde 2 
14.
set "echoes3_andmore=echo three & echo four" 
15.
for /l %%i in (1,1,3) do if defined echoes%%%i_andmore ( 
16.
 echo [1b]!echoes%%i_andmore! 
17.
echo [2b]"!echoes%%i_andmore!" 
18.
echo [3b]^"!echoes%%i_andmore!^" 
19.
echo [4b] Ausführen ^!echoes%%i_andmore^! mit DelayedExpansion 
20.
setlocal enableDelayedExpansion 
21.
!echoes%%i_andmore! 
22.
endlocal 
23.
 
24.
echo [5b] Ausführen ^!echoes%%i_andmore^! mit DelayedExpansion 
25.
setlocal enableDelayedExpansion 
26.
cmd /c !echoes%%i_andmore! 
27.
endlocal 
28.
29.
goto :eof
Output:
01.
>2echoes.cmd 
02.
[1]echo one 
03.
two 
04.
[2]"echo one & echo two" 
05.
[3]"echo one 
06.
two" 
07.
[4] test ausführen %twoechoes% 
08.
one 
09.
two 
10.
[5] Ausführen !twoechoes! mit DelayedExpansion 
11.
one & echo two 
12.
[1b]!echoes3_andmore! 
13.
[2b]"!echoes3_andmore!" 
14.
[3b]"!echoes3_andmore!" 
15.
[4b] Ausführen !echoes3_andmore! mit DelayedExpansion 
16.
three & echo four 
17.
[5b] Ausführen !echoes3_andmore! mit DelayedExpansion 
18.
three 
19.
four
Die Varianten 4 OHNE DelayedExpansion und 5b MIT DelayedExpansion funktionieren.

Grüße
Biber
Bitte warten ..
Mitglied: halo7one
21.06.2008 um 13:03 Uhr
Ah vielen Dank bastla & Biber,
auf die Variante 5b mit cmd /c, die ich brauche, wäre ich nie gekommen!

Und wieder ist ein Problem gelöst ;)

Nur noch eine Frage zu deinem Code Biber: warum hast du bei
for /l %%i in (1,1,3) do if defined echoes%%%i_andmore
3mal % geschrieben und nicht 2?

Gruß zurück,
halo7one
Bitte warten ..
Mitglied: Biber
21.06.2008 um 13:40 Uhr
Moin halo7one,

warum hast du bei
for /l %%i in (1,1,3) do if defined echoes%%%i_andmore
3mal % geschrieben und nicht 2?

Weil Biber in meinem Alter um diese Uhrzeit speziell Freitagabends doch ziemlich schnell abbauen.
War ein ganz normaler Tippfehler - 2 %-Zeichen reichen natürlich.

Grüße
Biber
Bitte warten ..
Mitglied: bastla
21.06.2008 um 13:48 Uhr
... und ich hatte schon auf jugendlichen Übermut getippt ...

Grüße
bastla
Bitte warten ..
Mitglied: Biber
21.06.2008 um 14:05 Uhr
@bastla
Eine andere Interpretation wäre
  • ein Prozentzeichen = Kennzeichen für Laufvariablen am CMD
  • zwei Prozentzeichen = Kennzeichen für Laufvariablen im Batch
  • drei Prozentzeichen = Kennzeichen für Promille

Grüße
Biber
Bitte warten ..
Ähnliche Inhalte
Firewall
Hilfe bei Interpretation Firewall Logfile
Frage von sfar11Firewall9 Kommentare

Hallo zusammen! Ich bin neu hier ;) Kurz vorweg: ich bin Laie, versuche aber mich in Themen einzuarbeiten und ...

Windows Server
Leistungsüberwachung - Interpretation und Umrechung der Ergebnisse
Frage von 85232Windows Server8 Kommentare

Hallo Community, für ein Virtualisierungsprojekt versuche ich mich derzeit in die Leistungsüberwachung von Windows einzuarbeiten und habe dazu einige ...

Windows Server
Erweiterte Tastatur funktioniert in Citrix nicht..
Frage von keksdiebWindows Server

Moin moin community, ich hab ein Citrix XenApp Problem, das mir Kopfzerbrechen bereitet! Folgende Situation: Wir haben einen Standort ...

Drucker und Scanner
Erweiterte Druckereinstellungen auslesen
Frage von bonbastlerDrucker und Scanner9 Kommentare

Hallo Community, die Frage ist: wie kann man bei einem Netzwerkdrucker dessen Gerätestatus / zusätzliche Gerätefunktionen automatisiert abfragen, z.B. ...

Neue Wissensbeiträge
Perl

Perl hat heute Geburtstag: 30 Jahre Perl: Lange Gesichter zum Geburtstag

Information von Penny.Cilin vor 1 StundePerl1 Kommentar

Hallo, auch wenn es wenige wissen und noch weniger Leute es nutzen. Perl hat heute Geburtstag. 30 Jahre Perl ...

Sicherheit

Blackberry stirbt - Keine Updates für Priv mehr

Tipp von certifiedit.net vor 2 StundenSicherheit

Blackberry wird zu einer 08/15 Firma und geht wohl mehr und mehr den Weg, den HTC schon ging. Von ...

Windows 10

Autsch: Microsoft bündelt Windows 10 mit unsicherer Passwort-Manager-App

Tipp von kgborn vor 2 TagenWindows 108 Kommentare

Unter Microsofts Windows 10 haben Endbenutzer keine Kontrolle mehr, was Microsoft an Apps auf dem Betriebssystem installiert (die Windows ...

Sicherheits-Tools

Achtung: Sicherheitslücke im FortiClient VPN-Client

Tipp von kgborn vor 2 TagenSicherheits-Tools

Ich weiß nicht, wie häufig die NextGeneration Endpoint Protection-Lösung von Fortinet in deutschen Unternehmen eingesetzt wird. An dieser Stelle ...

Heiß diskutierte Inhalte
Batch & Shell
Kann man mit einer .txt Datei eine .bat Datei öffnen?
gelöst Frage von HelloWorldBatch & Shell20 Kommentare

Wie schon im Titel beschrieben würde ich gerne durch einfaches klicken auf eine Text oder Word Datei eine Batch ...

LAN, WAN, Wireless
WLAN Reichweite erhöhen mit neuer Antenne
gelöst Frage von gdconsultLAN, WAN, Wireless11 Kommentare

Hallo, ich besitze einen TL-WN722N USB-WLAN Dongle mit einer richtigen Antenne. Ich frage mich jetzt ob man die Reichweite ...

Router & Routing
Wieso kann ich den UPD 7000-9000 nicht freigeben?
Frage von Jayk0bRouter & Routing8 Kommentare

Router: Telekom W 723V Ports: UDP 7000-9000 Können nicht frei gegeben werden. Benutzgrund: Rocket League 7000 – 9000 UDP ...

Router & Routing
Fritzbox Gastnetz - exposed Host - zur Sophos IPTV
Frage von medikopterRouter & Routing8 Kommentare

Hallo zusammen, ich habe eine Frage bezüglich des Fritz box Gastzugangs an einer Sophos UTM Home. An liebsten wäre ...