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

Substring durch Variableninhalt mit DOS-Script ersetzen

Frage Entwicklung Batch & Shell

Mitglied: DocJunioR

DocJunioR (Level 1) - Jetzt verbinden

21.12.2009, aktualisiert 08:59 Uhr, 5903 Aufrufe, 3 Kommentare

Benötige Hilfe beim Ersetzen eines Kennzeichens "<USERNAME>" innerhalb einer Variablen durch den Inhalt von %USERNAME%

Aaalso erstmal Hallo ;)

Ich habe eine Konfigurationsdatei in der Schlüssel-Wertpaare stehen unter Anderem folgendes:

WORKSPACE=D:\<USERNAME>\workspace

(ursprünglich hatte ich hier %USERNAME% zu stehen, aber das gibt beim Ersetzen nur noch mehr Probleme)


Diese Datei lese ich über folgende Mimik ein:

01.
FOR /F "eol=# tokens=1* delims== " %%a IN (meine.config) DO ( 
02.
 REM TODO: Variablen anerkennen 
03.
 REM * Setzen der Debug Einstellungen 
04.
 REM ************************************************************ 
05.
 if /I "%%a" == "DEBUG" ( 
06.
  REM sorge dafür, dass debug nur im Falle von true definiert ist 
07.
  if /I "%%b" == "true" ( 
08.
   echo Setze Debugging auf TRUE 
09.
   SET DEBUG=true 
10.
11.
 ) else ( 
12.
  IF DEFINED DEBUG echo +  Setze %%a=%%b 
13.
  set %%a=%%b 
14.
15.
)

Jetzt möchte ich anstelle <USERNAME> den Inhalt der Umgebungsvariablen %USERNAME% setzen. Ich dachte mir ja sowas:

SET WORKSPACE=%WORKSPACE:<USERNAME>=%%USERNAME%% %

das Ergebnis dieser Zeile ist allerdings
D:\\workspacedocjunior

Was mache ich falsch und wie mache ich's richtig?
Mitglied: Biber
21.12.2009 um 12:00 Uhr
Moin DocJunior,

willkommen im Forum.
Was mache ich falsch und wie mache ich's richtig?
Bitte immer nur eine Frage pro Beitrag..

Wenn du eine Variable als "Ersetze-durch" angeben willst, dann musst du explizit der cmd.exe signalisieren, dass du erst diese Variable auflösen willst und die andere (%Workspace% erst danach, verzögert (auf neudeutsch. delayed)
Die zuerst aufzulösende Variable wird dann als !var! statt %var% geschrieben.

Dazu dient der Setlocal-Feintuning-Wert "SetLocal EnableDelayedExpansion", den du
  • entweder in die erste Code-Zeile der Batchdatei schreibst "@echo off & Setlocal EnableDelayedExpansion"
  • oder explizit "Setlocal EnableDelayedExpansion" als Zeile vor diese Ersetz-mir-in-der Workspace-Variablen und eine Zeile danach ein "EndLocal"

Demo an CMD-Prompt (das führende ">" nicht eingeben, ist mein Prompt)
01.
>set WORKSPACE=D:\#USERNAME#\workspace 
02.
 
03.
(=11:47:41  D:\temp=) 
04.
>echo %workspace:#username#=!username!% 
05.
D:\Biber\workspace
Anmerkung I: ich habe den Dummy #username# statt <username> genannt, weil auch die Kleiner/Größer-Zeichen im Batch spezielle Bedeutung haben.
Anmerkung II: Was spicht denn dagegen, direkt in der Ini-Datei " WORKSPACE=D:\%USERNAME%\workspace" zu schreiben? Reicht doch auch...

Grüße
Biber
Bitte warten ..
Mitglied: DocJunioR
21.12.2009 um 13:06 Uhr
Hallo noch einmal!

Das hat schon prima funktioniert. Allerdings eine Kleinigkeit.
Wenn ich vor dem Austausch ein IF DEFINED WORKSPACE ( ) absetze, funktioniert das Ganze nicht mehr. Kann es sein, dass da die Locale verlassen wird?
Bitte warten ..
Mitglied: Biber
21.12.2009 um 13:39 Uhr
Moin DocJunioR,

das kann ich mir zwar nicht vorstellen - aber wenn du nochmal dein jetziges Skript posten würdest (das mit diesem Effekt), dann klären wir das.

Grüße
Biber
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
Substring in einer Textvariablen ersetzen
gelöst Frage von donnyS73lbBatch & Shell3 Kommentare

Hallo, meine *.bat liest aus einer Textdatei die Textzeilen aus und befüllt damit Batch-Variablen. Nun möchte ich in der ...

Batch & Shell
Substring ? Batch
Frage von Antum-frischlingBatch & Shell5 Kommentare

Guten Tag liebe Programmierer, ich habe ein kleines Problem und zwar ich möchte von einem Datei die ersten 11 ...

C und C++
Anfängerproblem mit Substrings und Hexadezimalzahlen
gelöst Frage von Aicher1998C und C++8 Kommentare

Hallo Bislang hab ich nur leichte Arduino C Sachen gemacht, aber jetzt müsste ich HEX Zahlen in ein Array ...

Batch & Shell
Substring aus Parameter bzw. aus for-Variable
gelöst Frage von andimueBatch & Shell4 Kommentare

Hallo an alle, ich hab mal eine mehr oder weniger akademische Frage zum Windows Batch-Scripting: Mittels set-Kommando kann man ...

Neue Wissensbeiträge
Windows 10

Windows 10 Hello-Anmeldung per Foto ausgehebelt

Tipp von kgborn vor 3 StundenWindows 10

Windows Hello ist eine Funktion, um sich per Fingerabdruck-, Gesichts- oder Iriserkennung bei Windows 10-Geräten anzumelden (siehe), setzt aber ...

Perl

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

Information von Penny.Cilin vor 10 StundenPerl2 Kommentare

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 11 StundenSicherheit1 Kommentar

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 1012 Kommentare

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

Heiß diskutierte Inhalte
Windows Server
SCCM 2016: PXE Boot des Clients schlägt fehl
Frage von gabeBUWindows Server23 Kommentare

Hallo Zusammen Ich habe eine Testumgebung erstellt um über SCCM 2016 einen virtuellen Client aufzusetzen. Folgende Maschinen habe ich ...

Netzwerkgrundlagen
Belibiges Teilnetz einer Subnetzmaske rausfinden?
gelöst Frage von CenuzeNetzwerkgrundlagen19 Kommentare

Wundervollen Gutentag, mittlerweile kann ich Subnetting so einigermaßen, aber ein Problem habe ich noch. Netzwerkadresse und Boradcast errechnen ist ...

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

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

Exchange Server
Exchange empfängt Emails - Kann aber keine Senden
gelöst Frage von niklasschaeferExchange Server11 Kommentare

Hallo, ich stehe gerade bei mir zuhause vor folgender Problemstellung. Gegeben sind 2x Hyper-V Host mit Windows Server 2016 ...