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

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, 5881 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
gelöst Poweshell Script soll String ersetzen und die leere Zeile löschen (4)

Frage von Mars123 zum Thema Batch & Shell ...

Java
gelöst Net user per script aus txt oder csv für FTP (13)

Frage von OlliPWS zum Thema Java ...

Windows Systemdateien
Windows 7 und 10 herunterfahren Knopf mit Script belegen (21)

Frage von c-o-o-p-e-r92 zum Thema Windows Systemdateien ...

Windows Server
Windows 2003 Domäne durch 2016er ersetzen (3)

Frage von Cenion zum Thema Windows Server ...

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
LAN, WAN, Wireless
gelöst Komplett neues Netzwerk, Ubiquiti WLAN, Router, Switch (16)

Frage von Freak-On-Silicon zum Thema LAN, WAN, Wireless ...

CMS
Lokales Wordpress im LAN - wie aufsetzen? (16)

Frage von Static zum Thema CMS ...

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
IP im privaten Netz nicht erreichbar (14)

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