Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen (A bis Z)

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, 1044 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 ..
Ähnliche Inhalte
Microsoft Office
gelöst Text in mehreren .docx suchen und ersetzen (14)

Frage von DerWoWusste zum Thema Microsoft Office ...

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

Frage von GNLen1 zum Thema Batch & Shell ...

Festplatten, SSD, Raid
Kommentar: SSDs werden Festplatten nicht ablösen (9)

Information von Penny.Cilin zum Thema Festplatten, SSD, Raid ...

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

Frage von Raaja89 zum Thema Batch & Shell ...

Neue Wissensbeiträge
Windows Update

Novemberpatches und Nadeldrucker bereiten Kopfschmerzen

(15)

Tipp von MettGurke zum Thema Windows Update ...

Windows 10

Abhilfe für Abstürze von CDPUsersvc auf Win10 1607 und 2016 1607

(7)

Tipp von DerWoWusste zum Thema Windows 10 ...

RedHat, CentOS, Fedora

Fedora 27 ist verfügbar

Information von Frank zum Thema RedHat, CentOS, Fedora ...

Heiß diskutierte Inhalte
Router & Routing
Freigabe aus anderem Netz nicht erreichbar (19)

Frage von McLion zum Thema Router & Routing ...

Batch & Shell
Batch Programm verhalten bei shoutdown -p (18)

Frage von Michael-ITler zum Thema Batch & Shell ...

Windows Server
Kennwort vergessen bei Hyper vserver 2012r (17)

Frage von jensgebken zum Thema Windows Server ...

Festplatten, SSD, Raid
Raidcontroller funktioniert nur, wenn unter Legacy-Boot gestartet wird (13)

Frage von DerWoWusste zum Thema Festplatten, SSD, Raid ...