
48046
12.05.2007, aktualisiert am 14.05.2007
Mit Batch einen Installationspfad aus der Registry lesen und in eine Datei schreiben
Hallo Leute !
Bin in Sachen Batchprogrammierung nicht so fix, dass ich folgende Aufgabe alleine lösen könnte. Also ich möchte einen Installationspfad aus der Registry lesen, und zwar in folgendem Schlüssel:
[HKEY_CURRENT_USER\Software\Ghisler\Total Commander]
"IniFileName"=".\\wincmd.ini"
"FtpIniName"=".\\wcx_ftp.ini"
"InstallDir"="C:\\Programme\\TotalCommander"
Jetzt interessiert mich wie gesagt nur der Installationspfad. Anschließend möchte ich den soeben ausgelesenen Pfad in eine INI einfügen als 4'te Zeile. Die in der INI stehende 4'te Zeile soll dabei komplett ersetzt werden.
(4'te Zeile in der INI die überschrieben werden soll)
InstallDir=c:\totalcmd
Wäre toll, wenn jemand dafür einen Lösungsansatz hat. Das i-Tüpfelchen wäre natürlich noch, das (falls die besagte 4'te Zeile mal nicht an 4'ter Position stehen sollte, warum auch immer), diese in der INI ausfindig gemacht und dann ebenfalls ersetzt werden könnte. Demzufolge müßte in der INI also nach dem Texteil "InstallDir" gesucht werden...
Aber selbst wenn das nicht machbar sein sollte, würde mir die feste Zuordnung mit Zeile 4 auch völlig genügen.
MfG
Elmi
Bin in Sachen Batchprogrammierung nicht so fix, dass ich folgende Aufgabe alleine lösen könnte. Also ich möchte einen Installationspfad aus der Registry lesen, und zwar in folgendem Schlüssel:
[HKEY_CURRENT_USER\Software\Ghisler\Total Commander]
"IniFileName"=".\\wincmd.ini"
"FtpIniName"=".\\wcx_ftp.ini"
"InstallDir"="C:\\Programme\\TotalCommander"
Jetzt interessiert mich wie gesagt nur der Installationspfad. Anschließend möchte ich den soeben ausgelesenen Pfad in eine INI einfügen als 4'te Zeile. Die in der INI stehende 4'te Zeile soll dabei komplett ersetzt werden.
(4'te Zeile in der INI die überschrieben werden soll)
InstallDir=c:\totalcmd
Wäre toll, wenn jemand dafür einen Lösungsansatz hat. Das i-Tüpfelchen wäre natürlich noch, das (falls die besagte 4'te Zeile mal nicht an 4'ter Position stehen sollte, warum auch immer), diese in der INI ausfindig gemacht und dann ebenfalls ersetzt werden könnte. Demzufolge müßte in der INI also nach dem Texteil "InstallDir" gesucht werden...
Aber selbst wenn das nicht machbar sein sollte, würde mir die feste Zuordnung mit Zeile 4 auch völlig genügen.
MfG
Elmi
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 58832
Url: https://administrator.de/forum/mit-batch-einen-installationspfad-aus-der-registry-lesen-und-in-eine-datei-schreiben-58832.html
Ausgedruckt am: 22.05.2025 um 13:05 Uhr
8 Kommentare
Neuester Kommentar
Hallo Elmi55 und willkommen im Forum!
Du könntest es so versuchen:
Den Pfad zur INI-Datei in Zeile 2 musst Du natürlich noch anpassen, und wenn Du die letzte Zeile weglässt, bleibt die ursprüngliche INI-Datei im Temp-Ordner bis zum nächsten Durchlauf gespeichert.
Grüße
bastla
Du könntest es so versuchen:
@echo off & setlocal
set "IniFile=D:\Test\Testini.ini"
set "IniTemp=%Temp%\TestIni.tmp"
set "Key=InstallDir="
if not exist "%IniFile%" echo Datei %IniFile% nicht gefunden! & goto: eof
move /y "%IniFile%" "%IniTemp%"
for /f "tokens=2*" %%i in ('reg query "HKCU\Software\Ghisler\Total Commander" /v InstallDir') do set "Pfad=%%j"
for /f "delims=" %%i in ('type "%IniTemp%"') do echo %%i|findstr /v "%Key%">nul && echo %%i>>"%IniFile%" || echo %Key%%Pfad%>>"%IniFile%"
del "%IniTemp%"
Grüße
bastla
Moin Elmi55,
auch von mir willkommen im Forum und danke für die vorbildliche Rückmeldung.
Eine Anmerkung wollte ich loswerden.
Wenn Du nicht so vertraut bist mit Batchskripting (und bastla schreibt ja schon eine relativ kompakte Form *g), dann solltest Du lieber ein paar mehr Zeilen schreiben, damit Du das Skript auch später selbst warten/anpassen kannst.
Denn die Strategie für Deine Anforderung ist noch relativ übersichtlich:
---> entsprechend würde ich diese 6 Zeilen dann auch einzeln nacheinander mit "Echo InstallDir=%installDir%>>%myNewIni%" etc schreiben
Sonst kannst Du den (prima funktionierenden) bastla-Schnipsel nicht auf Dauer pflegen.
Gruss
Biber
auch von mir willkommen im Forum und danke für die vorbildliche Rückmeldung.
Eine Anmerkung wollte ich loswerden.
Wenn Du nicht so vertraut bist mit Batchskripting (und bastla schreibt ja schon eine relativ kompakte Form *g), dann solltest Du lieber ein paar mehr Zeilen schreiben, damit Du das Skript auch später selbst warten/anpassen kannst.
Denn die Strategie für Deine Anforderung ist noch relativ übersichtlich:
- Du willst eine abzählbare Anzahl Zeilen ( 5 oder 6 oder so die Größenordnung) in eine Textdatei schreiben
- alle Zeilen kannst Du einzeln definieren, alle haben eine ID, einen Key (z.B. "InstallDir")
- und die Werte nach dem Schlüsselwort liest Du entweder aus der Registry oder der Original-Ini
---> entsprechend würde ich diese 6 Zeilen dann auch einzeln nacheinander mit "Echo InstallDir=%installDir%>>%myNewIni%" etc schreiben
Sonst kannst Du den (prima funktionierenden) bastla-Schnipsel nicht auf Dauer pflegen.
Gruss
Biber
Moin Elmi55,
nun denn, wenn denn jetzt die "originale" wincmd.ini nur aus dieser einen Section bestehen würde...
... dann würde ich erst die Originaldatei sichern ..
... mit FindStr.exe/Find.exe alles außer den Zeilen mit "InstallDir=" und "pluginbasedir=" in eine temporäre Datei schreiben:
Und an diese neue Datei zwei Zeilen anhängen:
Sollte die originale WinCmd.ini mehr als diese eine Section haben, würde ich allerdings alle die Section-Zeilen mit FindStr /v entfernen...
Gruss
Biber
nun denn, wenn denn jetzt die "originale" wincmd.ini nur aus dieser einen Section bestehen würde...
[Configuration]
StartupScreen=0
DirBrackets=0
InstallDir=???Pfad???
pluginbasedir=???Pfad???\plugins
... dann würde ich erst die Originaldatei sichern ..
copy /y wincmd.ini wincmd_original.ini
>findstr /i /v "installDir= pluginbaseDir=" wincmd_original.ini>>myNewWinCmd.ini
--ergibt... --
[Configuration]
StartupScreen=0
DirBrackets=0
Und an diese neue Datei zwei Zeilen anhängen:
echo InstallDir=%myInstallDir%>>myNewWinCmd.ini
echo PlugInBaseDir=%myMyBSEDir%>>myNewWinCmd.ini
::: und als letztes diese Datei über die Bestehende Wincmd.ini kopieren.
copy /y myNewWinCmd.ini WinCmd.ini
Sollte die originale WinCmd.ini mehr als diese eine Section haben, würde ich allerdings alle die Section-Zeilen mit FindStr /v entfernen...
..
set "Keys2delete=[Configuraution} StartUpScreen= DirBracket= installDir= pluginbaseDir="
findstr /i /v "%Keys2Delete%" wincmd_original.ini>>myNewWinCmd.ini
:: und die 5 Zeilen einzeln anfügen...
echo [Configurtion] >>myNewWinCmd.ini
echo StartUpScreen=0 1>>myNewWinCmd.ini
echo DasBrikett=0 1>>myNewWinCmd.ini
...
Gruss
Biber
Moin Elmi55,
In diesem Fall dann zuerst die handgebastelten Zeilen der [Configuration]-Section schreiben...
...danach den um die "alte" Configuration-Section bereinigten Rest der Originaldatei...
Oder im ganzen Satz:
[ungetestete Skizze]
Gruss
Biber
Nur könnte man statt am Ende anfügen, das Ganze auch an den Anfang setzen?
Das sollte keine unüberwindliche Hürde sein.In diesem Fall dann zuerst die handgebastelten Zeilen der [Configuration]-Section schreiben...
...danach den um die "alte" Configuration-Section bereinigten Rest der Originaldatei...
Oder im ganzen Satz:
....
Set installDir = ,,,,,, (wie auch immer ermittelt)
Set BSEDir=......(wie auch immer ermittelt)
REM zuerst die Section [Configuration] komplett neu schreiben
(echo [Configuration]
echo StartupScreen=0
echo DirBrackets=0
echo InstallDir=%InstallDir%
echo pluginbasedir=%BSEDir% )>myNewWinCmd.ini
set "Keys2delete=[Configuration} StartUpScreen= DirBracket= installDir= pluginbaseDir="
findstr /i /v "%Keys2Delete%" wincmd.ini>>myNewWinCmd.ini
REM ...und dann die neue komplette myNewWinCmd.ini über die bisherige WinCmd.ini kopieren.
...
Gruss
Biber