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

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, 3970 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
Batch & Shell
Laufwerksbezeichnung (label) in Batch als Variable nutzen

Frage von tobias.mock zum Thema Batch & Shell ...

Microsoft Office
gelöst Micorsoft Excel: Variable Anzeige von mehreren Werten anhand von Stammdaten (1)

Frage von sammy65 zum Thema Microsoft Office ...

Batch & Shell
gelöst Variable in Regedit (3)

Frage von MeinSenfDazu zum Thema Batch & Shell ...

Batch & Shell
gelöst Variable aus Registrie mit varriabler Länger (4)

Frage von QandAt zum Thema Batch & Shell ...

Neue Wissensbeiträge
RedHat, CentOS, Fedora

Fedora, RedHat, Centos: DNS-Search Domain setzen

(13)

Tipp von Frank zum Thema RedHat, CentOS, Fedora ...

Drucker und Scanner

Samsung SL-M4025ND, firmware update und (kompatible) Tonerkassetten

(1)

Erfahrungsbericht von markus-1969 zum Thema Drucker und Scanner ...

Heiß diskutierte Inhalte
Exchange Server
Microsoft Exchange Weiterleitung mit anderer primären E-Mail Adresse (14)

Frage von Rene12345 zum Thema Exchange Server ...

Windows Userverwaltung
gelöst Wie verfahrt Ihr mit den Windows-Benutzerkonten und -dateien von ausgeschiedenen Mitarbeitern? (14)

Frage von Bl0ckS1z3 zum Thema Windows Userverwaltung ...

LAN, WAN, Wireless
Devolo DLAN 500 pro Wireless+ (13)

Frage von IceAge zum Thema LAN, WAN, Wireless ...

E-Mail
gelöst Probleme beim E-Mail Empfang (12)

Frage von TommyB83 zum Thema E-Mail ...