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

Systemdatei mit Batch bearbeiten, danach wieder zu einer Systemdatei machen

Frage Entwicklung Batch & Shell

Mitglied: TheDarkLord

TheDarkLord (Level 1) - Jetzt verbinden

25.01.2010, aktualisiert 11:13 Uhr, 4916 Aufrufe, 9 Kommentare

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:
01.
@echo off & setlocal 
02.
set "Datei=c:\systemdatei.ini"  
03.
set "Von=ALTESWORT" 
04.
set "Nach=NEUESWORT" 
05.
 
06.
set "t=%temp%\text.tmp"  
07.
if exist "%t%" del "%t%"  
08.
for /f "usebackq delims=" %%i in ("%Datei%") do set "Line=%%i" & call :ProcessLine 
09.
move "%t%" "%Datei%" 
10.
goto :eof 
11.
 
12.
:ProcessLine 
13.
call set "Line=%%Line:%Von%=%Nach%%%" 
14.
 
15.
>>"%t%" echo %Line% 
16.
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
Mitglied: Tommy70
25.01.2010 um 10:35 Uhr
Hallo,

versuchs mal mit attrib
Bitte warten ..
Mitglied: TheDarkLord
25.01.2010 um 10:46 Uhr
Hallo

Japp, vielen Dank! Das hab ich jetzt auch gerade gemacht.
Ich hatte das attrib +s +h nur an der falschen Stelle in der Batch, deshalb hat es nicht geklappt!

So funktioniert es mit der Batch und die Datei hat danach auch wieder HSA als Attribut:
01.
@echo off & setlocal 
02.
set "Datei=c:\systemdatei.ini"  
03.
set "Von=ALTESWORT" 
04.
set "Nach=NEUESWORT" 
05.
 
06.
set "t=%temp%\text.tmp"  
07.
if exist "%t%" del "%t%"  
08.
for /f "usebackq delims=" %%i in ("%Datei%") do set "Line=%%i" & call :ProcessLine 
09.
move "%t%" "%Datei%" 
10.
attrib +s +h %Datei% 
11.
goto :eof 
12.
 
13.
:ProcessLine 
14.
call set "Line=%%Line:%Von%=%Nach%%%" 
15.
 
16.
>>"%t%" echo %Line% 
17.
goto :eof
Vielen Dank für die schnelle Antwort, Tommy!

Gruß Dark
Bitte warten ..
Mitglied: Biber
25.01.2010 um 10:59 Uhr
Moin TheDarkLord,

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
Bitte warten ..
Mitglied: TheDarkLord
25.01.2010 um 11:12 Uhr
Hallo Biber,

japp das hab ich mir schon gedacht, deshalb wollte ich es garnicht erst auf einen Versuch ankommen lassen sondern gleich die Datei wieder mit den vorherigen Attributen versehen

Danke nochmal für die Erklärung!

Gruß Dark
Bitte warten ..
Mitglied: pieh-ejdsch
25.01.2010 um 20:07 Uhr
Hi DarkLord,

wenn schon Systemdateien dann würde ich aber auch nichts den Zufall überlassen.

01.
@echo on & setlocal 
02.
set "Datei=c:\hiberfil.sys" 
03.
set "Von=ALTESWORT" 
04.
set "Nach=NEUESWORT" 
05.
 
06.
set "t=%temp%\text.tmp" 
07.
if exist "%t%" del "%t%" 
08.
set "Oldset=" 
09.
for /f "delims=:" %%i in ('attrib "%Datei%"') do set "Attrib=%%~i" 
10.
for /f "usebackq delims=" %%i in ("%Datei%") do set "Line=%%i" & call :ProcessLine 
11.
move "%t%" "%Datei%" 
12.
for %%i in (%Attrib:~0,1% %Attrib:~3,1% %Attrib:~4,1% %Attrib:~5,1%) do call :Oldset %%i 
13.
 
14.
attrib%Oldset% "%Datei%" 
15.
goto :eof 
16.
 
17.
:ProcessLine 
18.
call set "Line=%%Line:%Von%=%Nach%%%" 
19.
 
20.
>>"%t%" echo.%Line% 
21.
goto :eof 
22.
 
23.
:Oldset 
24.
set "Oldset=%Oldset% +%1" 
25.
goto :eof
Das i Attribut für nicht indiziert ist ja bei XP glaub ich gar net vorhanden.

Gruß Phil
Bitte warten ..
Mitglied: Biber
25.01.2010 um 20:44 Uhr
Moin pieh-ejdsch,

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:

01.
>attrib datei.bla +h +s +r 
02.
 
03.
 
04.
(=20:36:13  D:\temp=) 
05.
>for %i in (datei.bla) do @echo %~ai 
06.
-rahs---- 
07.
 
08.
(=20:36:34  D:\temp=) 
09.
>attrib datei.bla 
10.
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
Bitte warten ..
Mitglied: TheDarkLord
25.01.2010 um 21:09 Uhr
Vielen Dank für die Hile ihr zwei

Gruß Dark

Nachtrag:
Wenn wir schon mal dabei sind, das gelöste Thema zu behandeln, noch eine "Schönheitsfrage"
Wie kann ich denn sozusagen überprüfen, ob NEUESWORT schon in der Datei vorhanden ist?
Genaueres Beispiel:
altes Wort: "Param 1"
neues Wort: "Param 1, Param 2, Param 3"
Ist das einfach zu machen, dass ich überprüfen kann, ob "Param 2, Param 3" schon in der Datei steht?
Weil ich hab mir überlegt, wenn ich die Batch ein zweites mal ausführe (oder jemand anderes, der nicht so versiert ist), dann wird ja beim ersten mal "Param 1" in "Param1, Param 2, Param3" geändert. Beim zweiten mal kommt dann aber "Param 1, Param 2, Param 3, Param 2, Param 3" heraus - könnt ihr mir folgen?
Vielleicht stehe ich auf dem Schlauch, aber ich komme einfach nicht darauf, wie ich das lösen kann...

Gruß Dark
Bitte warten ..
Mitglied: pieh-ejdsch
25.01.2010 um 23:53 Uhr
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.

01.
@echo on & setlocal 
02.
set "Datei=c:\hiberfil.sys" 
03.
set "Von=ALTESWORT" 
04.
set "Nach=NEUESWORT" 
05.
 
06.
findstr /c "%nach%" "%Datei%" 2>nul && goto :eof 
07.
 
08.
set "t=%temp%\text.tmp" 
09.
if exist "%t%" del "%t%" 
10.
set "Oldset=" 
11.
for %%i in ("%Datei%") do set "Attrib=%%~ai" 
12.
 
13.
for /f "usebackq delims=" %%i in ("%Datei%") do set "Line=%%i" & call :ProcessLine 
14.
move "%t%" "%Datei%" 
15.
for %%i in (%Attrib:~1,1% %Attrib:~2,1% %Attrib:~3,1% %Attrib:~4,1%) do if not "%%i"=="-" call :Oldset %%i 
16.
 
17.
attrib%Oldset% "%Datei%" 
18.
goto :eof 
19.
 
20.
:ProcessLine 
21.
call set "Line=%%Line:%Von%=%Nach%%%" 
22.
 
23.
>>"%t%" echo %Line% 
24.
goto :eof 
25.
 
26.
:Oldset 
27.
set "Oldset=%Oldset% +%1" 
28.
goto :eof
Gruß Phil
Bitte warten ..
Mitglied: TheDarkLord
26.01.2010 um 10:41 Uhr
Hey Phil, 100%ig, vielen Dank!

Hast nur einen kleinen Fehler in Zeile 6. findstr /c:SUCHSTRING ist die Syntax.
Das muss also heißen:
findstr /c:"%Nach%" "%Datei%" 2>nul && goto :eof

Hier nochmal das komplette Script für jemanden, der das vielleicht auch braucht.
In diesem Fall hier wird die boot.ini modifiziert, um eine "640x480 16Farben BMP", mit dem Namen "boot.bmp" in C:\Windows liegend, beim hochfahren Anstatt des WinXP Bootscreens anzuzeigen. Natürlich muss die bmp noch kopiert werden xD
01.
@echo on & setlocal 
02.
set "DATEI=c:\boot.ini" 
03.
set "VON=/fastdetect" 
04.
set "NACH=/fastdetect /bootlogo /noguiboot" 
05.
 
06.
findstr /c:"%NACH%" "%DATEI%" 2>nul && goto :eof 
07.
 
08.
set "t=%temp%\text.tmp" 
09.
if exist "%t%" del "%t%" 
10.
set "Oldset=" 
11.
for %%i in ("%DATEI%") do set "Attrib=%%~ai" 
12.
 
13.
for /f "usebackq delims=" %%i in ("%DATEI%") do set "Line=%%i" & call :ProcessLine 
14.
move "%t%" "%DATEI%" 
15.
for %%i in (%Attrib:~1,1% %Attrib:~2,1% %Attrib:~3,1% %Attrib:~4,1%) do if not "%%i"=="-" call :Oldset %%i 
16.
 
17.
attrib%Oldset% "%DATEI%" 
18.
goto :eof 
19.
 
20.
:ProcessLine 
21.
call set "Line=%%Line:%VON%=%NACH%%%" 
22.
 
23.
>>"%t%" echo %Line% 
24.
goto :eof 
25.
 
26.
:Oldset 
27.
set "Oldset=%Oldset% +%1" 
28.
goto :eof
Gruß Dark
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(5)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Batch & Shell
Neuere Datei per Batch ausfinding machen (2)

Frage von chattie zum Thema Batch & Shell ...

Batch & Shell
Batch zum bearbeiten mehrerer CSV (2)

Frage von Matzus87 zum Thema Batch & Shell ...

Batch & Shell
Batch-Variable nach Stichworten aus TXT Datei durchsuchen (3)

Frage von Markus5579 zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
LAN, WAN, Wireless
gelöst Server erkennt Client nicht wenn er ausserhalb des DHCP Pools liegt (28)

Frage von Mar-west zum Thema LAN, WAN, Wireless ...

Windows Server
Server 2008R2 startet nicht mehr (Bad Patch 0xa) (18)

Frage von Haures zum Thema Windows Server ...

Outlook & Mail
Outlook 2010 findet ost datei nicht (18)

Frage von Floh21 zum Thema Outlook & Mail ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (17)

Frage von Unwichtig zum Thema Netzwerkmanagement ...