Batch Zeichenfolge ersetzen für Registryerstellung
Hallo bin neu und am totalen verzweifeln. Mein Chef meint das kann man doch sooo leicht lösen. Habe hier alles ähnliche schon ausprobiert und komm mit diesen Sachen nicht so klar.
Folgendes hat sich der liebe Chef ausgedacht.
Da es so viele liebe User gibt, die ab und zu die Dateien hin und her verschieben und damit Anwendungen nicht ganz korrekt laufen sollen die Anwendungen alternativ wieder neu nachgeregt werden, mit besagter CMD Datei.
-- das aktuelle Verzeichnispfad soll wo die Dateien drinliegen, temporär als Variable zwischengespeichert werden
-- dann soll die Variable dazu genutzt werden, mittels %Variable% eine Regdatei zu kreieren, wobei sich nur bestimmte Bereiche verändern, die CLSID sind davon nicht betroffen.
Für die RegDatei Erstellung sind als Zeichen notwendig "\" bzw das "@" Symbol
Sprich momentan sieht es so aus@
Folgendes hat sich der liebe Chef ausgedacht.
Da es so viele liebe User gibt, die ab und zu die Dateien hin und her verschieben und damit Anwendungen nicht ganz korrekt laufen sollen die Anwendungen alternativ wieder neu nachgeregt werden, mit besagter CMD Datei.
-- das aktuelle Verzeichnispfad soll wo die Dateien drinliegen, temporär als Variable zwischengespeichert werden
-- dann soll die Variable dazu genutzt werden, mittels %Variable% eine Regdatei zu kreieren, wobei sich nur bestimmte Bereiche verändern, die CLSID sind davon nicht betroffen.
Für die RegDatei Erstellung sind als Zeichen notwendig "\" bzw das "@" Symbol
Sprich momentan sieht es so aus@
Echo off
Nummer 1
- Set Verzeichnis = %~dp0
Als Ergebnis habe ich das aktuelle Verzeichnis in der Form "C:\Programme ... " Nun müsste eigentlich das eine "\" mit zweien "\\" ersetzt werden
jetzt kommt der Teil der Regdateierstellung mittels Umleitung
Nummer 2
- echo REGEDIT4 >> %TEMP%\test.reg
- echo >> %TEMP%\test.reg
- echo [HKEY_LOCAL_MACHINESoftware\_test] >>%TEMP%\test.reg
jetzt kommt das Problem mit dem @ Symbol und weswegen man Doppelbackslashs braucht
Nummer 3
- echo @="%Verzeichnis%Dateiname.Endung" >> %TEMP%\test.reg
- echo "ThreadingModel"="Apartment" >> %TEMP%\test.reg
- regedit %TEMP%\test.reg
- del %TEMP%\test.reg
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 56268
Url: https://administrator.de/forum/batch-zeichenfolge-ersetzen-fuer-registryerstellung-56268.html
Ausgedruckt am: 09.04.2025 um 20:04 Uhr
17 Kommentare
Neuester Kommentar

Das Betriebssystem der Rechner ist unwichtig?
Moin NickNick,
willkommen im Forum. Und sei nicht so aufgeregt. Du hast doch schon 95% beisammen.
Zu Deiner Skizze würde ich nur empfehlen zu überprüfen:
Die eigentliche Frage, das Ersetzen aller Backslashes durch zwei Backslashes geht so:
Gruss Biber
willkommen im Forum. Und sei nicht so aufgeregt. Du hast doch schon 95% beisammen.
Zu Deiner Skizze würde ich nur empfehlen zu überprüfen:
- macht das Sinn, den zufällig gerade aktuellen Pfad %~dp0, also den Pfad, in dem die aufgerufene Batchdatei liegt, in die Registry zu schreiben? Oder war das nur ein Beispiel?
- mache im Batch nur dort aus optischen Gründen Leerzeichen, wo sie unbedenklich sind, d.h wo es keinen Unterschied macht, ob dort ein Leerzeichen mehr oder weniger ist. Speziell ist "@ echo off" etwas anderes als "@echo off" und ein "echo >>datei.reg" ist etwas anders als ein "echo.>>datei.reg". Ein "echo hallo>>test.txt" ist etwas anderes als "echo hallo >>test.txt".
Die eigentliche Frage, das Ersetzen aller Backslashes durch zwei Backslashes geht so:
Set Verzeichnis=%~dp0
...
Set "verzeichnis=%verzeichnis:\=\\%"
REM Syntax: ....Set var=%variable:alt=neu%"
Gruss Biber

Ich würde den direkten Weg über REG gehen. Reg ist Bestandteil von XP Prof und läuft auch unter Windows 2000.
Reg /? in der Eingabeaufforderung bringt die Syntax.
Für das aktuelle Verzeichnis kannst du %cd% verwenden.
Reg /? in der Eingabeaufforderung bringt die Syntax.
Für das aktuelle Verzeichnis kannst du %cd% verwenden.
Nein, mit dem "@" gibt es keine Probleme. Eigentlich gibt es nie Problem beim Bätscheln.
Und in diesem Forum schon gar nicht... ich würde sagen, wir chatten hier nur ein bisschen rum....
Okay, im Ernst, Dein Vorschlag:
Das wird also "Echo irgendein x-beliebiger Text>>inEineDate.reg" rausgedrückt.
Und der Platzhalter @ für den Defaultwert darf OHNE Anführungszeichen bleiben.
Verbesserungswürdig bzw. immer fehlerträchtig im Batch sind die Leerzeichen vor dem ">>".
Sicherer:
Und der Zieldateiname soll bestimmt als nicht "%TEMP% est.reg" sein, sondern ein "%TEMP%\test.reg".
Beim Blättern im Bereich Batch & Shell (oder über Forumssuche "batch registry") findest Du aber ein paar Vorlagen.
Bzw., da Du ja auch fertig bist, "Vergleichsmöglichkeiten".
Gruss
Biber
Und in diesem Forum schon gar nicht... ich würde sagen, wir chatten hier nur ein bisschen rum....
Okay, im Ernst, Dein Vorschlag:
echo @="%Verzeichnis%Dateiname.Endung" >> %TEMP% est.reg
...enthält zwischen "echo" und den Umleitungszeichen ">>" NICHTS, was irgendwie Sonderzeichen im Batch wären.Das wird also "Echo irgendein x-beliebiger Text>>inEineDate.reg" rausgedrückt.
Und der Platzhalter @ für den Defaultwert darf OHNE Anführungszeichen bleiben.
Verbesserungswürdig bzw. immer fehlerträchtig im Batch sind die Leerzeichen vor dem ">>".
Sicherer:
echo @="%Verzeichnis%Dateiname.Endung">>%TEMP% est.reg
Und der Zieldateiname soll bestimmt als nicht "%TEMP% est.reg" sein, sondern ein "%TEMP%\test.reg".
Beim Blättern im Bereich Batch & Shell (oder über Forumssuche "batch registry") findest Du aber ein paar Vorlagen.
Bzw., da Du ja auch fertig bist, "Vergleichsmöglichkeiten".
Gruss
Biber

%Temp%\\\\\\\\\\\
Das liegt an dem ">" ohne Leerzeichen vor dem "%"-Zeichen. Der Fehler ist bereits gemeldet.
Das liegt an dem ">" ohne Leerzeichen vor dem "%"-Zeichen. Der Fehler ist bereits gemeldet.

'nabend Biber. 
Ich habe keine Fragen. Ich hatte nur einen Vorschlag, aber den wollte ja niemand. :-P
Ich habe keine Fragen. Ich hatte nur einen Vorschlag, aber den wollte ja niemand. :-P
@46503,
ach was, Deinen Vorschlag, doch diesen Registry-Eintrag mit "Reg Add" zu schreiben hab ich nicht überlesen.
Dann schreibe ich mal stellvertretend eine mögliche Alternative hin:
Besser?
Gruss Biber
[Edit] Fehlenden Backslash eingefügt, siehe hpdms Hinweis unten [/Edit]
ach was, Deinen Vorschlag, doch diesen Registry-Eintrag mit "Reg Add" zu schreiben hab ich nicht überlesen.
Dann schreibe ich mal stellvertretend eine mögliche Alternative hin:
reg add HKEY_LOCAL_MACHINE\Software\_test /ve /t REG_SZ /d %~dp0Dateiname.Endung /f
reg add HKEY_LOCAL_MACHINE\Software\_test /v ThreadingModel /t REG_SZ /d Apartment /f
Besser?
Gruss Biber
[Edit] Fehlenden Backslash eingefügt, siehe hpdms Hinweis unten [/Edit]

Klar doch. Warum sollte man (unnötigerweise) über temporäre Dateien gehen. 
Du musst nur noch den fehlenden "\" einfügen. :-P
Du musst nur noch den fehlenden "\" einfügen. :-P
@46503
Mitnichten :-PP.
Diese merkwürdige Redmonder Softwareklitsche muss vielleicht endlich mal den abschliessenden Backslash bei der Bereitstellung des Pfades bei %~p0 weglassen.
Selbst unter Kumpels würde man/frau das als Bug bezeichnen.
Aber Tatsache ist: unbeeindruckt von weltweiten Programmiererkonventionen und jeglichen Einflüsterungen des verbliebenen gesunden Menschenverstandes ist M$ so ...ähm......so individuell und kreativ, dass die Pfadangaben mit abschliessendem Backslash ausgeben.
Demo:
Oder deutlicher:
%~d0 == Drive == "D:" (ohne abschliessenden Backslash)
%~p0 == Path == "\temp\" (mit abschliessendem Backslash)
Bedeutet: Wenn ich z.B. die gerade ausgeführte Batch als "bisherigerName_backup.extension" auf das Rootverzeichnis kopieren wollte:
Kopiere ich in ein Parallel-Verzeichnis auf einem anderen Laufwerk:
Also, unterm Strich: Rein formal habe ich dich die "richtige" Syntax genommen.
Aber, da gebe ich Dir Recht, es sieht einfach Shice aus.
Und da die CMD.exe mir doppelte Backslashes in Pfadangaben nicht übelnimmt, würde ich auch schreiben:
Wenn ich das allerdings in (weiter) obigem Batch gemacht hätte vor der Anweisung "Ersetze alle "\" durch "\\",
dann wäre herausgekommen:
Da ich nun fest davon ausgehe, dass ich weitere potentielle Zwischenrufer hinreichend unter den Tisch gelabert habe, werde ich den Beitrag jetzt schliessen.
Grüße
Biber
Du musst nur noch den fehlenden "\" einfügen. :-P
Mitnichten :-PP.
Diese merkwürdige Redmonder Softwareklitsche muss vielleicht endlich mal den abschliessenden Backslash bei der Bereitstellung des Pfades bei %~p0 weglassen.
Selbst unter Kumpels würde man/frau das als Bug bezeichnen.
Aber Tatsache ist: unbeeindruckt von weltweiten Programmiererkonventionen und jeglichen Einflüsterungen des verbliebenen gesunden Menschenverstandes ist M$ so ...ähm......so individuell und kreativ, dass die Pfadangaben mit abschliessendem Backslash ausgeben.
Demo:
(=17:45:45 D:\temp=)
>(@echo @echo %~dp0>dp0.bat) & dp0
D:\temp\
%~d0 == Drive == "D:" (ohne abschliessenden Backslash)
%~p0 == Path == "\temp\" (mit abschliessendem Backslash)
Bedeutet: Wenn ich z.B. die gerade ausgeführte Batch als "bisherigerName_backup.extension" auf das Rootverzeichnis kopieren wollte:
copy "%0" "%~d0\%~n0_backup%~x0"
REM ----> hier muss ich den "\" zwischen die Variablen packen
REM ----> hier soll ich den "\" zwischen "X:" und "%~p0" sowie %~p0 und %~n0 weglassen?????
REM wer soll denn sowas lesen??? Man stelle sich das in einem Batch vor:
set LW=X:
Set Backupkennung=_backup
copy "%0" "%LW%%~p0%~n0%Backupkennung%%~x0"
Also, unterm Strich: Rein formal habe ich dich die "richtige" Syntax genommen.
Aber, da gebe ich Dir Recht, es sieht einfach Shice aus.
Und da die CMD.exe mir doppelte Backslashes in Pfadangaben nicht übelnimmt, würde ich auch schreiben:
...REG_SZ /d %~dp0\Dateiname.Endung /f
REM ...was dann aufgelöst würde zu:
....REG_SZ /d D:\temp\\Dateiname.Endung /f
Wenn ich das allerdings in (weiter) obigem Batch gemacht hätte vor der Anweisung "Ersetze alle "\" durch "\\",
dann wäre herausgekommen:
......REG_SZ /d D:\\temp\\\\Dateiname.Endung /f
Da ich nun fest davon ausgehe, dass ich weitere potentielle Zwischenrufer hinreichend unter den Tisch gelabert habe, werde ich den Beitrag jetzt schliessen.
Grüße
Biber

Hier wird nicht gelabert. :-P
reg add HKEY_LOCAL_MACHINESoftware\_test /ve /t REG_SZ /d %~dp0Dateiname.Endung /f
^ da fehlt ein "\"!
reg add HKEY_LOCAL_MACHINESoftware\_test /ve /t REG_SZ /d %~dp0Dateiname.Endung /f
^ da fehlt ein "\"!