Systemdatei mit Batch bearbeiten, danach wieder zu einer Systemdatei machen
Hallo
Ich lasse in einer Systemdatei in Windows XP ein Wort suchen und durch ein anderes ersetzen.
Das funktioniert auch gut, allerdings ist das Attribut nach der Bearbeitung nicht mehr HSA wie vorher sondern nur noch A.
Gibt es eine Möglichkeit, nach dem Ersetzen die Datei wieder zu einer Systemdatei zu machen?
Hier die Batch:
Kann ich irgendwie mit der Batch die Attribute wieder setzen? Ich habe aber auch mittels Rechtsklick auf die Datei nichts gefunden, um sie wieder als Systemdatei zu deklarieren. Habe auch noch nicht ausprobiert, ob das System danach meckert, wenn ich die Datei mittels Batch und nicht z.B. über msconfig.exe bearbeite...
Hat jemand damit Erfahrung und weiss, dass das Attribut egal ist beim Systemstart?
Gruß Dark
Ich lasse in einer Systemdatei in Windows XP ein Wort suchen und durch ein anderes ersetzen.
Das funktioniert auch gut, allerdings ist das Attribut nach der Bearbeitung nicht mehr HSA wie vorher sondern nur noch A.
Gibt es eine Möglichkeit, nach dem Ersetzen die Datei wieder zu einer Systemdatei zu machen?
Hier die Batch:
@echo off & setlocal
set "Datei=c:\systemdatei.ini"
set "Von=ALTESWORT"
set "Nach=NEUESWORT"
set "t=%temp%\text.tmp"
if exist "%t%" del "%t%"
for /f "usebackq delims=" %%i in ("%Datei%") do set "Line=%%i" & call :ProcessLine
move "%t%" "%Datei%"
goto :eof
:ProcessLine
call set "Line=%%Line:%Von%=%Nach%%%"
>>"%t%" echo %Line%
goto :eof
Kann ich irgendwie mit der Batch die Attribute wieder setzen? Ich habe aber auch mittels Rechtsklick auf die Datei nichts gefunden, um sie wieder als Systemdatei zu deklarieren. Habe auch noch nicht ausprobiert, ob das System danach meckert, wenn ich die Datei mittels Batch und nicht z.B. über msconfig.exe bearbeite...
Hat jemand damit Erfahrung und weiss, dass das Attribut egal ist beim Systemstart?
Gruß Dark
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 134262
Url: https://administrator.de/contentid/134262
Ausgedruckt am: 22.11.2024 um 01:11 Uhr
9 Kommentare
Neuester Kommentar
Moin TheDarkLord,
zu der Teilfrage
Einige (meiner Wahrnehmung nach der überwiegende Teil der) Systemdateien/Systemordner MÜSSEN neben einem feststehenden Namen zusätzlich auch die Attribute System/Hidden gesetzt haben, seltener wird auf gesetztes Readonly-Attribut geprüft.
Unabhängig davon gilt aber in WGs wie auch beim Bätchen: "Verlasse den Raum so, wie du ihn vorzufinden wünscht, mindestens aber so, wie du ihn vorgefunden hast".
Wenn du also vorher weißt, dass du eine RSH-Datei (bzw. eine Datei mit sehr speziellen Attributen) anfasst, dann sollte es selbstverständlich sein, diesen Zustand zu restaurieren.....
Grüße
Biber
zu der Teilfrage
Hat jemand damit Erfahrung und weiss, dass das Attribut egal ist beim Systemstart?
Ja, nein, eher umgekehrt.Einige (meiner Wahrnehmung nach der überwiegende Teil der) Systemdateien/Systemordner MÜSSEN neben einem feststehenden Namen zusätzlich auch die Attribute System/Hidden gesetzt haben, seltener wird auf gesetztes Readonly-Attribut geprüft.
Unabhängig davon gilt aber in WGs wie auch beim Bätchen: "Verlasse den Raum so, wie du ihn vorzufinden wünscht, mindestens aber so, wie du ihn vorgefunden hast".
Wenn du also vorher weißt, dass du eine RSH-Datei (bzw. eine Datei mit sehr speziellen Attributen) anfasst, dann sollte es selbstverständlich sein, diesen Zustand zu restaurieren.....
Grüße
Biber
Hi DarkLord,
wenn schon Systemdateien dann würde ich aber auch nichts den Zufall überlassen.
Das i Attribut für nicht indiziert ist ja bei XP glaub ich gar net vorhanden.
Gruß Phil
wenn schon Systemdateien dann würde ich aber auch nichts den Zufall überlassen.
@echo on & setlocal
set "Datei=c:\hiberfil.sys"
set "Von=ALTESWORT"
set "Nach=NEUESWORT"
set "t=%temp%\text.tmp"
if exist "%t%" del "%t%"
set "Oldset="
for /f "delims=:" %%i in ('attrib "%Datei%"') do set "Attrib=%%~i"
for /f "usebackq delims=" %%i in ("%Datei%") do set "Line=%%i" & call :ProcessLine
move "%t%" "%Datei%"
for %%i in (%Attrib:~0,1% %Attrib:~3,1% %Attrib:~4,1% %Attrib:~5,1%) do call :Oldset %%i
attrib%Oldset% "%Datei%"
goto :eof
:ProcessLine
call set "Line=%%Line:%Von%=%Nach%%%"
>>"%t%" echo.%Line%
goto :eof
:Oldset
set "Oldset=%Oldset% +%1"
goto :eof
Das i Attribut für nicht indiziert ist ja bei XP glaub ich gar net vorhanden.
Gruß Phil
Moin pieh-ejdsch,
als (geplant) letzte Spitzfindigkeit zu diesem Thema...
zumindest optisch eleganter und vermutlich etwas flotter als deine Zeile 09
...fände ich den Weg über die von %~ai (der Attribut-Variante) der abgeleiteten Laufvariablen:
Beispiel am CMD-Prompt:
Zu beachten ist nur für die anschließende Substring-Arie, dass die Reihenfolge der Atrribute -wie von RedmonderInnen zu erwarten war-- bei der Anzeige von ATTRIB eine vollkommen andere als bei %~ai ist ...
Grüße
Biber
als (geplant) letzte Spitzfindigkeit zu diesem Thema...
zumindest optisch eleganter und vermutlich etwas flotter als deine Zeile 09
for /f "delims=:" %%i in ('attrib "%Datei%"') do set "Attrib=%%~i"
...fände ich den Weg über die von %~ai (der Attribut-Variante) der abgeleiteten Laufvariablen:
Beispiel am CMD-Prompt:
>attrib datei.bla +h +s +r
(=20:36:13 D:\temp=)
>for %i in (datei.bla) do @echo %~ai
-rahs----
(=20:36:34 D:\temp=)
>attrib datei.bla
A SHR D:\temp\datei.bla
Zu beachten ist nur für die anschließende Substring-Arie, dass die Reihenfolge der Atrribute -wie von RedmonderInnen zu erwarten war-- bei der Anzeige von ATTRIB eine vollkommen andere als bei %~ai ist ...
Grüße
Biber
Hi DarkLord,
findstr löst dieses Problem zu beginn der Batch Zeile 06
@Biber ja das mit dem Attribut aus der FOR vari direkt zu holen ist mir gar net bewusst gewesen.
am besten ich mach noch mal nen CrashKurs über die Variablen damit da mehr hängenbleibt.
Gruß Phil
findstr löst dieses Problem zu beginn der Batch Zeile 06
@Biber ja das mit dem Attribut aus der FOR vari direkt zu holen ist mir gar net bewusst gewesen.
am besten ich mach noch mal nen CrashKurs über die Variablen damit da mehr hängenbleibt.
@echo on & setlocal
set "Datei=c:\hiberfil.sys"
set "Von=ALTESWORT"
set "Nach=NEUESWORT"
findstr /c "%nach%" "%Datei%" 2>nul && goto :eof
set "t=%temp%\text.tmp"
if exist "%t%" del "%t%"
set "Oldset="
for %%i in ("%Datei%") do set "Attrib=%%~ai"
for /f "usebackq delims=" %%i in ("%Datei%") do set "Line=%%i" & call :ProcessLine
move "%t%" "%Datei%"
for %%i in (%Attrib:~1,1% %Attrib:~2,1% %Attrib:~3,1% %Attrib:~4,1%) do if not "%%i"=="-" call :Oldset %%i
attrib%Oldset% "%Datei%"
goto :eof
:ProcessLine
call set "Line=%%Line:%Von%=%Nach%%%"
>>"%t%" echo %Line%
goto :eof
:Oldset
set "Oldset=%Oldset% +%1"
goto :eof
Gruß Phil