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, 5885 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
Findstr Path CMD ja - Batch Script nein - FireFox Profiles (2)

Frage von ChrisIO zum Thema Batch & Shell ...

Peripheriegeräte
PowerChute Business Edition startet das Script nicht (11)

Frage von merome zum Thema Peripheriegeräte ...

Batch & Shell
gelöst In txt file an bestimmter Position zeichen ersetzen, Ideen ? (7)

Frage von buliwyf zum Thema Batch & Shell ...

Windows Server
Domänencontroller ersetzen ? (7)

Frage von uridium69 zum Thema Windows Server ...

Neue Wissensbeiträge
Heiß diskutierte Inhalte
Viren und Trojaner
Ransomware .nm4 (14)

Frage von Zyklo92 zum Thema Viren und Trojaner ...

Microsoft Office
+1.000 Ordner in Outlook: Wie besser? (11)

Frage von Matsushita zum Thema Microsoft Office ...

Zusammenarbeit
Administrator Verhalten nach Vertragskündigung (10)

Frage von sysbone zum Thema Zusammenarbeit ...