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
GELÖST

Batch Zeichenfolge ersetzen für Registryerstellung

Frage Entwicklung Batch & Shell

Mitglied: NickNack

NickNack (Level 1) - Jetzt verbinden

10.04.2007, aktualisiert 11.04.2007, 6375 Aufrufe, 17 Kommentare

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@

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
Nummer 4
  • regedit %TEMP%\test.reg
  • del %TEMP%\test.reg
Mitglied: 46503
10.04.2007 um 17:34 Uhr
Das Betriebssystem der Rechner ist unwichtig?
Bitte warten ..
Mitglied: NickNack
10.04.2007 um 17:38 Uhr
Hm wir haben WinNt basierte Systeme. Also ab 2000 aufwärts.
Von einer BAT-Datei, die unter 98 und Konsorten laufen und wo diese %% beachtet werden müssen, nein. Gott sei Dank nicht.
Bitte warten ..
Mitglied: Biber
10.04.2007 um 17:42 Uhr
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:
  • 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".
Und ein "Set var = xx" bedeutet anders als "Set var=xx".

Die eigentliche Frage, das Ersetzen aller Backslashes durch zwei Backslashes geht so:
01.
Set Verzeichnis=%~dp0 
02.
... 
03.
Set "verzeichnis=%verzeichnis:\=\\%" 
04.
REM Syntax: ....Set var=%variable:alt=neu%"
Gruss Biber
Bitte warten ..
Mitglied: 46503
10.04.2007 um 17:46 Uhr
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.
Bitte warten ..
Mitglied: NickNack
10.04.2007 um 17:52 Uhr
Okay ich hole mir mal kurz eine Papiertüre und ein Brecheisen. Zum hyperventilieren und das Brett vor dem Kopf wegzubekommen. ;)
So Ohm und nun Entspannung.

Also um die Sache der Sinnhaftigkeit. Wenn ich diese Frage meinen Chef stellen würde.
Ja es macht insofern Sinn weil Laufwerksbuchstaben bei USB-Sticks teilweise innerhalb der Firma nicht fix vergeben werden. Und wenn die Herren dann halt der Meinung sind ihre Daten zu verschieben und dann die Präsentation nicht läuft...

Das da Unterschiede gab wussste ich nicht, ob da nun Freizeichen dazwischen sind oder nicht. Richte ich mich an denjenigen der die meiste Ahnung hat. Sprich Du Biber.
Bitte warten ..
Mitglied: NickNack
10.04.2007 um 17:57 Uhr
Mit dem @ Symbol gibt es keine Probleme?
Muss das nicht nach dem Schema "Schlüssel" = "Wert" reingesetzt werden ?
Bitte warten ..
Mitglied: Biber
10.04.2007 um 18:11 Uhr
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:
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
Bitte warten ..
Mitglied: NickNack
10.04.2007 um 18:30 Uhr
Okay das ist die feine Unterscheidung. Ich habe halt solange im Board geschaut und mir war das echt schon peinlich mich überhaupt zu melden. Waren echt schwer überhaupt zu lesen was da gemeint ist.
Und ja es sollte
echo @="%Verzeichnis%Dateiname.Endung">>%TEMP%{ {ichbineinBackslash}}test.reg
heissen
Das Board lässt aber dieses Backslash nur bedingt zu. Hat den Eintrag extra 5 mal nachgearbeitet, immer wieder wird das Zeichen rausgenommen.
Bitte warten ..
Mitglied: 46503
10.04.2007 um 18:39 Uhr
%Temp%\\\\\\\\\\\


Das liegt an dem ">" ohne Leerzeichen vor dem "%"-Zeichen. Der Fehler ist bereits gemeldet.
Bitte warten ..
Mitglied: Biber
11.04.2007 um 14:45 Uhr
Moin NickNack,

können wir diesen Beitrag dann erstmal auf "erledigt" setzen oder sind noch Fragen offen?

Gruss
Biber
Bitte warten ..
Mitglied: 46503
11.04.2007 um 15:18 Uhr
'nabend Biber.

Ich habe keine Fragen. Ich hatte nur einen Vorschlag, aber den wollte ja niemand. :-P
Bitte warten ..
Mitglied: Biber
11.04.2007 um 15:42 Uhr
@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:
01.
reg add HKEY_LOCAL_MACHINE\Software\_test /ve /t REG_SZ /d %~dp0Dateiname.Endung /f 
02.
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]
Bitte warten ..
Mitglied: 46503
11.04.2007 um 15:54 Uhr
Klar doch. Warum sollte man (unnötigerweise) über temporäre Dateien gehen.

Du musst nur noch den fehlenden "\" einfügen. :-P
Bitte warten ..
Mitglied: NickNack
11.04.2007 um 17:08 Uhr
Vielen herzlichen Dank. Hat sich alles erledigt. Mein Chef ist glücklich gestellt und hat nicht schlecht geschaut über die Alternativen.

Ihr seit die besten.
Bitte warten ..
Mitglied: Biber
11.04.2007 um 18:20 Uhr
@46503
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:
01.
(=17:45:45  D:\temp=) 
02.
>(@echo @echo %~dp0>dp0.bat) & dp0 
03.
D:\temp\ 
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:
01.
copy "%0" "%~d0\%~n0_backup%~x0"      
02.
REM ----> hier muss ich den "\" zwischen die Variablen packen
Kopiere ich in ein Parallel-Verzeichnis auf einem anderen Laufwerk:
01.
REM ----> hier soll ich den "\" zwischen "X:" und "%~p0" sowie %~p0 und %~n0 weglassen????? 
02.
REM wer soll denn sowas lesen??? Man stelle sich das in einem Batch vor: 
03.
set LW=X: 
04.
Set Backupkennung=_backup 
05.
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:
01.
 ...REG_SZ /d %~dp0\Dateiname.Endung /f 
02.
REM ...was dann aufgelöst würde zu: 
03.
....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:
01.
......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
Bitte warten ..
Mitglied: 46503
11.04.2007 um 18:37 Uhr
Hier wird nicht gelabert. :-P

reg add HKEY_LOCAL_MACHINESoftware\_test /ve /t REG_SZ /d %~dp0Dateiname.Endung /f
-------------------------------------^ da fehlt ein "\"!
Bitte warten ..
Mitglied: Biber
11.04.2007 um 18:57 Uhr
Ach, den Backslash meintest Du.... *sichvornKoppklatsch*

Na gut, den ergänze ich....(oben im Posting).

Schönen Abend
Biber
Bitte warten ..
Neuester Wissensbeitrag
Microsoft

Lizenzwiederverkauf und seine Tücken

(5)

Erfahrungsbericht von DerWoWusste zum Thema Microsoft ...

Ähnliche Inhalte
Batch & Shell
gelöst Suchen und Ersetzen mehrerer Suchbegriffe per Batch (4)

Frage von makroll10 zum Thema Batch & Shell ...

Batch & Shell
Powershell - In Textdatei suchen und ersetzen (3)

Frage von Raaja89 zum Thema Batch & Shell ...

Windows Netzwerk
Windows Server 2003 SBS Netzwerk durch neuen Server Ersetzen (9)

Frage von MultiStorm zum Thema Windows Netzwerk ...

Heiß diskutierte Inhalte
Windows Netzwerk
Windows 10 RDP geht nicht (16)

Frage von Fiasko zum Thema Windows Netzwerk ...

Windows Server
Outlook Verbindungsversuch mit Exchange (15)

Frage von xbast1x zum Thema Windows Server ...

Microsoft Office
Keine Updates für Office 2016 (13)

Frage von Motte990 zum Thema Microsoft Office ...