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, 1024 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
Ä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 ...

VB for Applications
Excel Makro zum Suchen von Spalten und exportieren in CSV (3)

Frage von Raptox zum Thema VB for Applications ...

Heiß diskutierte Inhalte
Zusammenarbeit
Als Administrator im Großraumbüro (30)

Frage von Dopamin85 zum Thema Zusammenarbeit ...

Hardware
Laptop ins Salzwasser gefallen (18)

Frage von Marcel94 zum Thema Hardware ...

Hardware
Lenovo Yoga 500 über angeschlossene USB Tastatur booten (13)

Frage von thomasreischer zum Thema Hardware ...

CPU, RAM, Mainboards
Hardware Fragen (12)

Frage von xaver-2 zum Thema CPU, RAM, Mainboards ...