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

Variablenerweiterung im CMD-Fenster für OneLiner oder wie bekomme ich die Variable aufgelöst

Tipp Entwicklung Batch & Shell

Mitglied: pieh-ejdsch

pieh-ejdsch (Level 2) - Jetzt verbinden

19.09.2010 um 23:08 Uhr, 9097 Aufrufe, 4 Kommentare

Ausrufezeichen welche im CMD-Fenster über Einzeiler in Variablen gesetzt werden zeigten die Variable mittels gestarteter "CMD /von" ohne diese Ausrufezeichen dar.

Normal ist es nicht möglich Variablen in Einzeilern ohne Verzögerte Variablenerweiterung Anzuzeigen oder zu verändern.
Es gibt einen kleinen Umweg um Variablen in Einzeilern ohne DelayedExpansion darzustellen und zu erweitern.

Vorausetzung ist, dass die zu verwendende Variable vorher nicht Existiert.
set "test=123"&for /f "tokens=*" %i in ('echo "%Test%"') do echo %~i
oder für die Ersetzung von Worten in Textdateien
(for /f "usebackq tokens=*" %i in ("D:\Textfile.txt") do set "Line=%i"&for /f "tokens=*" %j in ('echo "%Line:Wort1=anderes Wort%") do echo %~j)>"D:\neues Textfile.txt"
um die Erweiterung der Variablen zu nutzen, müssen diese in AnführungsZeichen gesetzt werden.
für die Ersetzung von ProzentZeichen, muss dieses in eine weitere ForVariable gesetzt werden.

for %i in ("%") do for %j in (*.*) do set "File=%j"&for /f "tokens=*" %k in ('echo "%File:%i=%"') do ren "%j" %k
Du kannst natürlich auch die ganze Ersetzungsform in eine ForVariable eintragen (was natürlich nur bei zu ersetzenden % nötig ist.

for /f "tokens=*" %i in ("~0,-4") do for /f "tokens=*" %j in ('Dir /b') do set "Datei=%~nj"& for /f "tokens=*" %k in ('echo "%Datei:%i%"') do echo %k%~xj
Dieser Umweg dauert aber sehr lange in der Befehlsausführung!
PS. Ich habe bewusst auf @ für die auschaltung der Anzeige des Befehles Verzichtet, da ich auf der CMD-Line mit ECHO OFF gearbeitet habe.

Gruß Phil
Mitglied: jeb-the-batcher
21.09.2010 um 12:41 Uhr
Das geht auch einfacher

01.
set "test=123"& call echo "%Test%"
oder wenn man mit DelayedExpansion arbeiten möchte
01.
cmd /Von /c "set test=123& echo !Test!"
Dagegen klappt dieser Teil bei mir nicht

Zitat von pieh-ejdsch:
um die Erweiterung der Variablen zu nutzen, müssen diese in AnführungsZeichen gesetzt werden.
für die Ersetzung von ProzentZeichen, muss dieses in eine weitere ForVariable gesetzt werden.

for %i in ("%") do for %j in (*.*) do set "File=%j"&for /f "tokens=*" %k 
> in ('echo "%File:%i=%"') do ren "%j" %k

Ich kann mir eigentlich auch nicht vorstellen, dass das ohne DelayedExpansion klappen kann,
da man meiner Ansicht nach nicht in einem Prozentausdruck ein Prozent ersetzen kann.

jeb
Bitte warten ..
Mitglied: pieh-ejdsch
21.09.2010 um 21:40 Uhr
Hi jeb,
oder wenn man mit DelayedExpansion arbeiten möchte
01.
cmd /Von /c "set test=123& echo !Test!"
mir ging es ja darum die enthaltenen Ausrufezeichen nicht mit delayedexpansion wieder zu verlieren
Dagegen klappt dieser Teil bei mir nicht
....
Ich kann mir eigentlich auch nicht vorstellen, dass das ohne DelayedExpansion klappen kann,
da man meiner Ansicht nach nicht in einem Prozentausdruck ein Prozent ersetzen kann.

zwar werden die Variablen innerhalb CMD /von mit Ausrufezeichen richtig erstellt und auch dargestellt
jedoch mit delayedexpansion kann ich die !Variable! nicht in die For-schleife stecken wenn sie wieder Ausrufezeichen enthält, aber brauch ich auch nicht weil in dieser Umgebung die !Variable! keine Umschliesenden Anführungszeichen benötigt.

das heisst ich kann alle Variablen zum Erweitern mit den Zeilen so gestalten

set "test=123"&cmd /von /c echo !test!
oder für die Ersetzung von Worten in Textdateien

(for /f "usebackq tokens=*" %i in ("D:\Textfile.txt") do set Line=%i&cmd /von /c echo !Line:Wort1=anderes Wort!)>"D:\neues Textfile.txt"
die Ersetzung von AusrufeZeichen funktioniert so nicht
for %i in (!) do for %j in (*.*) do set "File=%j"&cmd /von /c echo ren !File:%i=! 
ist das gleiche Ergebnis wie vorher ohne Delayedexpansion und dem Prozenzeichen
PS. auf den Tipp bin ich über Deine Secrets gekommen.
Gruß Phil
Bitte warten ..
Mitglied: jeb-the-batcher
21.09.2010 um 23:13 Uhr
Hi pieh-ejdsch,

also ich fürchte ich verstehe immer noch nicht so ganz was eigentlich dein Ziel ist.

Zum einen verstehe ich nicht wozu du eine for-loop verwendest um genau einen Wert in eine Variable zu setzen.
01.
for %i in (!) do ...
Warum verwendest du das Ausrufezeichen nicht einfach, statt %i?

Und natürlich kann man in einem Delayed-Ausdruck kein direktes Ausrufezeichen selbst ersetzten
Kann also beides nicht klappen (sind auch beide praktisch identisch)
01.
 !File:!=! 
02.
oder 
03.
!File:%i=!
Aber vielleicht blicke ich einfach nicht durch.

Vielleicht war dein Ziel eine Datei einzulesen und die Daten eins zu eins wieder ausgeben zu können ohne was aus versehen zu verändern oder zu verlieren, oder mal das ein oder andere Wort dabei zu ersetzen.

Falls es das ist, bietet sich folgendes an (In einem BatchFile, auf der Kommandozeile aber ähnlich)
01.
setlocal EnableDelayedExpansion 
02.
FOR /F "usebackq tokens=*" %%i IN ("D:\Textfile.txt") DO ( 
03.
  setlocal DisableDelayedExpansion 
04.
  set Line=%%i 
05.
  setlocal EnableDelayedExpansion 
06.
  Echo unveränderte Ausgabe !Line! 
07.
  set NewLine=!Line:Wort1=anderes Wort! 
08.
)
Der Trick besteht darin, vor der Zuweisung von %i an Line das DelayedExpansion abzuschalten, das ist notwendig, weil sonst zerstört man dabei die Ausrufezeichen.
Für die Ausgabe und Bearbeitung sollte man aber gerade mit aktiver DelayedExpansion arbeiten, denn nur damit kann man die Daten kontrollieren.
Sonst muss man ständig mit unausgeglichenen Anführungszeichen, &,|,>,<,^ und % Zeichen kämpfen, die spielen aber in der Delayed-Phase alle keine Rolle mehr.

Falls dass aber doch nicht dein Anliegen war, versuch es mal so einfach zu erklären, damit ich es verstehen kann.

jeb
Bitte warten ..
Mitglied: pieh-ejdsch
23.09.2010 um 21:19 Uhr
Hi jeb,
warum aktivierst Du erst die Verzögerung und schaltest sie danach seperat in der For Anweisung wieder aus - dies hat im Batch ja nun Überhautp keine vorteilige Eigenschaft. Für mich wäre es ein bisschen überflüssiger Code.

der Ursprung des Treads ist ja die Variablendarstellung bzw. Erweiterung in der KommandoZeile ohne dabei die CMD mit Aktivierter DelayedExpansion gestartet zu haben, weil ja Ausrufezeichen in einer For-Schleife nicht dargestellt werden, wenn DelayedExpansion Aktiviert ist. Das es genauso mit "cmd /von /c BEFEHL" geht wie sowieso mit call ... ist Einleuchtend.

Der Einzige Nachteil in der CMD ist demnach entweder ich kann ProzentZeichen ersetzen oder ich kann AusrufeZeichen in Variablen ersetzen.

mehr wollt ich dann auch nicht loswerden.

Gruß Phil
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
Hab da mal was programmiert. (CMD-Ergänzung)
Tipp von PedantBatch & Shell7 Kommentare

Hallo Liebe Kollegen, hier mal etwas "Eigenwerbung" (Freeware) In letzter Zeit habe ich ein Tool, dass ich für mich ...

Batch & Shell
Umlaute in cmd-Datei darstellen
Tipp von frankenfrankBatch & Shell15 Kommentare

Umlaute lassen sich mit cmd sehr einfach darstellen. Es ist keine Konvertierung oder ein drittres Programm nötig. Der folgende ...

Hardware
Seriennummer per CMD auslesen
Tipp von kontextHardware2 Kommentare

Guten Morgen Mit-Administratoren, bin per Zufall über diesen Tipp gestolpert und wollte diesen euch nicht vorenthalten. Vielleicht ist er ...

Windows Tools
WMIC Serial Output in Variable
Tipp von MasterBaiterWindows Tools3 Kommentare

Mit diesem Befehl lässt sich die Ausgabe aus WMIC in eine Variable stecken: In diesem Beispiel ist es die ...

Neue Wissensbeiträge
Internet

USA: Die FCC schaff die Netzneutralität ab

Information von Frank vor 2 StundenInternet2 Kommentare

Jetzt beschädigt US-Präsident Donald Trump auch noch das Internet. Der neu eingesetzte FCC-Chef Ajit Pai ist bekannter Gegner einer ...

DSL, VDSL

ALL-BM200VDSL2V - Neues VDSL-Modem mit Vectoring von Allnet

Information von Lochkartenstanzer vor 6 StundenDSL, VDSL1 Kommentar

Moin, Falls jemand eine Alternative zu dem draytek sucht: Gruß lks

Windows 10

Microsoft bestätigt DMA-Policy-Problem in Win10 v1709

Information von DerWoWusste vor 6 StundenWindows 10

Wer sein Gerät mit der DMA-Policy absichert, bekommt evtl. Hardwareprobleme in v1709 von Win10. Warum? Weil v1709 endlich "richtig" ...

Verschlüsselung & Zertifikate

Die Hölle friert ein weiteres Stück zu: Microsoft integriert OpenSSH in Windows

Information von ticuta1 vor 10 StundenVerschlüsselung & Zertifikate

Interessant Die Hölle friert ein weiteres Stück zu: Microsoft integriert OpenSSH in Windows SSH-Kommando in CMD.exe und PowerShell

Heiß diskutierte Inhalte
Netzwerkmanagement
Mehrere Netzwerkadapter in einem PC zu einem Switch zusammenfügen
Frage von prodriveNetzwerkmanagement21 Kommentare

Hallo zusammen Vorweg, ich konnte schon einige IT-Probleme mit Hilfe dieses Forums lösen. Wirklich klasse hier! Doch für das ...

Windows Server
RODC kann nicht aus Domäne entfernt werden
Frage von NilsvLehnWindows Server19 Kommentare

HAllo, ich arbeite in einem Universitätsnetzwerk mit 3 Standorten. Die Standorte haben alle ein ESXi Cluster und auf diesen ...

Hardware
Kein Bild mit nur einer bestimmten Grafikkarten - Mainboard Konfiguration
gelöst Frage von bestelittHardware18 Kommentare

Hallo zusammen, ich hatte schon einmal eine ähnliche Frage gestellt. Damals hatte ich genau das gleiche Problem. Allerdings lies ...

Hardware
Links klick bei Maus funktioniert nicht
gelöst Frage von Pablu23Hardware16 Kommentare

Hallo erstmal. Ich habe ein Problem mit meiner relativ alten maus jedoch denke ich nicht das es an der ...