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
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, 6453 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 ..
Ähnliche Inhalte
Batch & Shell
Zeichenfolge in Textdatei durch Inhalt einer Umgebungsvariable ersetzen
gelöst Frage von SarekHLBatch & Shell7 Kommentare

Hallo zusammen, wie kann ich mittels Batch in einer Textdatei die Zeichenfolge durch den Inhalt der Umgebungsvariable %username% ersetzen? ...

Batch & Shell
Die Zeichenfolge hat kein Abschlusszeichen - Batch mit mehrzeiligem Powershellbefehl
gelöst Frage von freshman2017Batch & Shell11 Kommentare

Hallo, leider finde ich hier den Fehler nicht, in der Doku finde ich auch nichts. Wer kann mir auf ...

Batch & Shell
Leerzeichen aus Zeichenfolge entfernen mit Batch FOR f Schleife
gelöst Frage von gexnerBatch & Shell2 Kommentare

Hallo! Ich möchte aus einer Zeichenfolge alle Leerstellen, egal ob vorne hinten oder in der Mitte, entfernen. In Anlehnung ...

Batch & Shell
XLXS zu CSV + Wert ersetzen - Batch
gelöst Frage von jochengBatch & Shell11 Kommentare

Hallo Leute ich habe ein Problem Ich brauch ein kleines Batch Script das ich täglich laufen lassen kann das ...

Neue Wissensbeiträge
Erkennung und -Abwehr

Necur-Botnet soll Erpressungstrojaner Scarab massenhaft verbreiten

Information von BassFishFox vor 13 StundenErkennung und -Abwehr

12,5 Millionen Spam-Mails aus einem Bot-Netz mit 6 Millionen Computern? Eigentlich eine schwache Leistung. Die Erpresser setzen dabei auf ...

Microsoft

Nadeldrucker-Problem unter Windows - Microsoft liefert Updates

Information von BassFishFox vor 14 StundenMicrosoft

Hat ja nicht lange gedauert. Nachdem die November-Updates für Windows 7, 8.1 und 10 zahlreiche Nadeldrucker lahmgelegt hatten, stellt ...

Linux

Limux-Ende in München: Wie ein Linux Projekt unter Ausschluss der Öffentlichkeit zerstört wurde

Information von Frank vor 21 StundenLinux14 Kommentare

Mein persönlicher Kommentar zum Thema "Limux-Ende". Die SPD-Politikerin Anne Hübner hat die Richtung von München ganz klar definiert: "Wir ...

Batch & Shell

Open Object Rexx: Eine mittlerweile fast vergessene Skriptsprache aus dem Mainframebereich

Information von Penny.Cilin vor 1 TagBatch & Shell9 Kommentare

Ich kann mich noch sehr gut an diese Skriptsprache erinnern und nutze diese auch heute ab und an noch. ...

Heiß diskutierte Inhalte
Windows Server
Kann man im KMS nachschauen , wieviele Clients den Key in Anspruch genommen haben
gelöst Frage von rainergugusWindows Server15 Kommentare

Hallo, wir haben einen KMS Windows 10 Key. Dieser ist ja W7 kompatibel. Aber unser Windows 7 Pool registriert ...

Linux
Limux-Ende in München: Wie ein Linux Projekt unter Ausschluss der Öffentlichkeit zerstört wurde
Information von FrankLinux14 Kommentare

Mein persönlicher Kommentar zum Thema "Limux-Ende". Die SPD-Politikerin Anne Hübner hat die Richtung von München ganz klar definiert: "Wir ...

Router & Routing
Zwei Netzwerke erstellen
Frage von bunteblumeRouter & Routing14 Kommentare

Hallo Zusammen, Ich möchte gerne ein backup von einem bestimmten Folder welcher auf dem Server regelmässig synchronisiert wird auf ...

Windows 10
Alle Programme mit bestimmtem Namen automatisch (per GPO) deinstallieren
gelöst Frage von lordofremixesWindows 1012 Kommentare

Hallo zusammen, gibt es eine Möglichkeit, alle Programme beginnend mit z.B. "Dell" im Namen per Script und somit per ...