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

Suchen und Ersetzen, Kommentare und Leerzeilen behalten

Frage Entwicklung Batch & Shell

Mitglied: M3talH3ad

M3talH3ad (Level 1) - Jetzt verbinden

12.06.2014 um 14:13 Uhr, 1026 Aufrufe, 4 Kommentare

Hallo zusammen,

für viele hier bestimmt ein leichtes Spiel:

Ich möchte in einer ini-Datei per Batch suchen und ersetzen.
Das funktioniert soweit auch, nur werden mir sämtliche Kommentare (angeführt mit Semikolon) und Leerzeilen aus der Quelldatei entfernt. Gibt es einen Weg, das zu unterbinden?

Mittels SuFu bin ich soweit gekommen:
01.
@echo off & setlocal 
02.
Set Suchwort=123 
03.
Set Ersatz=456 
04.
Set Datei=C:\123.ini 
05.
 
06.
If exist %temp%\new.txt del %temp%\new.txt 
07.
 
08.
For /F  "delims=" %%i in (%Datei%) do ( 
09.
   Echo %%i|Findstr /B "%Suchwort%" >nul 
10.
   If Errorlevel 1 (  
11.
          echo %%i>>%temp%\new.txt 
12.
	  ) Else ( 
13.
          echo %Ersatz%>>%temp%\new.txt 
14.
)) 
15.
move %temp%\new.txt %Datei%
Vielen Dank im Voraus!
Mitglied: bastla
LÖSUNG 12.06.2014, aktualisiert um 22:18 Uhr
Hallo M3talH3ad und willkommen im Forum!

Versuch's mal so:
01.
@echo off & setlocal 
02.
set "Suchwort=123" 
03.
set "Ersatz=456" 
04.
set "Datei=C:\123.ini" 
05.
 
06.
set "TempDat=%temp%\new.txt" 
07.
(for /f  "delims=" %%i in ('findstr /n "^" "%Datei%"') do ( 
08.
    set "Zeile=%%i" 
09.
    setlocal enabledelayedexpansion 
10.
    echo(!Zeile:*:=!|findstr /b "%Suchwort%">nul && ( 
11.
        echo %Ersatz% 
12.
    ) || ( 
13.
        echo(!Zeile:*:=! 
14.
15.
    endlocal 
16.
))>%TempDat% 
17.
move %TempDat% "%Datei%"
Grüße
bastla
Bitte warten ..
Mitglied: M3talH3ad
12.06.2014 um 21:41 Uhr
Hi bastla!

das scheint zu funktionieren. Vielen Dank!
Wofür ist das "^" in Zeile 7 gut und was bewirkt !Zeile:*:=! genau?
Tue mich gerade schwer damit, das zu verstehen
Bitte warten ..
Mitglied: bastla
12.06.2014 um 21:58 Uhr
Hallo M3talH3ad!
Wofür ist das "^" in Zeile 7 gut
Das steht für "Zeilenanfang" - und den hat jede Zeile, womit sichergestellt ist, dass alle Zeilen verarbeitet werden.
was bewirkt !Zeile:*:=! genau?
Die Ersetzung des Teils am Anfang der Variablen %Zeile% (bzw, wegen "delayedExpansion", !Zeile!) bis zum ersten ":" (inklusive) durch Nichts - damit wird die Zeilennummer, die "findstr /n" erstellt, abgeschnitten; sollte eine Zeile mit ":" beginnen, wird so nur der erste ":" (stammt von "findstr") entfernt und nicht, wie bei der Alternative
for /f "tokens=1* delims=:" %%i in ('findstr /n "^" "%Datei%"') do echo %%j
auch der ursprünglich vorhandene ":" eliminiert.

Zum besseren Verständnis (siehe auch set /? bei "Ersetzen von Umgebungsvariablen"): Wenn in der Datei in Zeile 3 stünde
Wert1=5
enthielte die Variable Zeile zunächst
3:Wert1=5
Ein
echo %Zeile:*:=%
würde dann "3:" entfernen, sodass wieder "Wert=5" ausgegeben würde. Der Sinn der ganzen Aktion ist dabei nur das gewünschte Erhalten der Leerzeilen, da die Nummerierung dafür sorgt, dass in der Schleife jede Zeile verarbeitet wird (es ist ja eine Leerzeile wegen der Nummer zunächst noch nicht "leer", sondern wird es erst wieder durch das Entfernen von Zeilnennummer und ":") ...

Grüße
bastla
Bitte warten ..
Mitglied: M3talH3ad
12.06.2014 um 22:17 Uhr
Vielen Dank für die ausführliche Erklärung.
Hast mir echt weiter geholfen!

Schönen Abend noch!

LG,
M3talH3ad
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Sticky Notes - Autostart unterbinden

Tipp von Pedant zum Thema Windows 10 ...

Ähnliche Inhalte
Batch & Shell
gelöst Suchen ersetzen mit Sonderzeichen (2)

Frage von GNLen1 zum Thema Batch & Shell ...

Batch & Shell
gelöst Powershell - In Textdatei suchen und ersetzen (5)

Frage von Raaja89 zum Thema Batch & Shell ...

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

Frage von makroll10 zum Thema Batch & Shell ...

Administrator.de Feedback
gelöst Scoreboard Kommentare Wann erscheint der registrierte User ? (2)

Frage von holli.zimmi zum Thema Administrator.de Feedback ...

Heiß diskutierte Inhalte
Batch & Shell
gelöst Base64 Decode (Batch,VBS) (26)

Frage von clragon zum Thema Batch & Shell ...

Flatrates
DeutschlandLAN der Telekom - welche internen IPs? (19)

Frage von qualidat zum Thema Flatrates ...