Top-Themen

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

Mit Batch Datei suchen und ersetzen

Frage Entwicklung Batch & Shell

Mitglied: MTB4ever

MTB4ever (Level 1) - Jetzt verbinden

23.06.2011 um 13:22 Uhr, 4427 Aufrufe, 9 Kommentare

Hallo,

ich habe folgendes Problem: Und zwar habe ich eine Config Datei die ich mit Hilfe einer Batch Datei durchsuchen möchte und eine bestimmte Einstellung ersetzen möchte.
Ich habe aus den Beitrag https://www.administrator.de/index.php?content=90771 bereits folgendes Script entnommen und ein bisschen angepasst.

01.
@echo off & setlocal 
02.
set "Von=Modul.Einstellung=Einstellung1" 
03.
set "Nach=Modul.Einstellung=Einstellung2" 
04.
set "Datei=c:\temp\Config.properties" 
05.
If exist %temp%\new.txt del %temp%\new.txt 
06.
 
07.
For /F "delims=" %%i in (%Datei%) do ( 
08.
   Echo %%i|Findstr /b "%Von% >nul 
09.
   If Errorlevel 1 (  
10.
          echo %%i>>%temp%\new.txt 
11.
   ) Else ( 
12.
          echo %Nach%>>%temp%\new.txt 
13.
)) 
14.
move %temp%\new.txt %Datei%
Dieses Script funktioniert schon fast, aber in der Config-Datei werden momentan alle Leerzeilen (die für die Übersichtlichkeit enthalten sind) gelöscht und das sollte nicht passieren.

Ausserdem werden momentan noch extra Dateien angelegt (warum kann ich mir nicht erklären). Ich habe bereits rausgefunden, dass die Dateien die angelegt werden den Dateinamen haben, der nach einen > , [,] oder < folgt. Also wenn z.B. in der Config Datei ein Kommentar mit den Namen "### (siehe Programm-> Menü->Einstellung). [BSP:][200]" enthalten ist wird eine Datei mit den Namen "Einstellung)" erstellt. Dass müsste auch noch verboten werden, es soll wirklich nur die Eingangsdatei geändert werden und keine neue Datei (ausser eventuell die temp Datei) erstellt werden.

Kann mir da einer von euch weiter helfen ?

MfG Michael
Mitglied: Skyemugen
23.06.2011 um 13:49 Uhr
Aloha,

nur erst einmal kurz am Vorbeischauen: Zeile 8: "%Von% was fehlt? ja, das hat schon bei Bibers Ausführung gefehlt, dürfte dir aber hier auf den Fuß fallen

In Sachen gelöschte Leerzeichen gab's hier schon ein- oder zweimal etwas als Skript, müsstest du evtl. mal kurz suchen, ob du direkt fündig wirst.

greetz André
Bitte warten ..
Mitglied: bastla
23.06.2011 um 13:53 Uhr
Hallo MTB4ever!

Wenn's denn Batch (und nicht VBS) sein soll, versuch es damit:
01.
@echo off & setlocal 
02.
set "Von=Modul.Einstellung=Einstellung1" 
03.
set "Nach=Modul.Einstellung=Einstellung2" 
04.
set "Datei=c:\temp\Config.properties" 
05.
if exist %temp%\new.txt del %temp%\new.txt 
06.
 
07.
for /f "tokens=1* delims=:" %%i in ('findstr /n "^" "%Datei%"') do ( 
08.
    setlocal enabledelayedexpansion 
09.
    set "Zeile=%%j" 
10.
    echo !Zeile!|findstr /b "%Von%">nul && (echo %Nach%)||(echo\!Zeile!) 
11.
    endlocal 
12.
)>>%temp%\new.txt 2>nul 
13.
 
14.
move "%temp%\new.txt" "%Datei%"
Grüße
bastla

P.S.: Im Threadtitel gibt es für meinen Geschmack ein "Datei" zuviel ...
Bitte warten ..
Mitglied: Friemler
23.06.2011 um 14:12 Uhr
Hallo MTB4ever,

... oder gleich ein VBScript, dann gibt es überhaupt keine Probleme mit irgendwelchen Zeichen:
01.
Const ForReading = 1 
02.
Const ForWriting = 2 
03.
Const AsASCII    = 0 
04.
 
05.
strInfilePath = "C:\Temp\Config.properties" 
06.
strPattern    = "Modul.Einstellung=Einstellung1" 
07.
strReplace    = "Modul.Einstellung=Einstellung2" 
08.
 
09.
 
10.
Set objFSO = CreateObject("Scripting.FileSystemObject") 
11.
 
12.
Set objInFile = objFSO.OpenTextFile(strInfilePath, ForReading, False, AsASCII) 
13.
strContent    = objInFile.ReadAll 
14.
objInFile.Close 
15.
 
16.
strContent = Replace(strContent, strPattern, strReplace) 
17.
 
18.
strOutFile = objFSO.GetParentFolderName(strInFilePath) & "\" & _ 
19.
             objFSO.GetBaseName(strInFilePath) & "_new." & _ 
20.
             objFSO.GetExtensionName(strInFilePath) 
21.
 
22.
Set objOutFile = objFSO.OpenTextFile(strOutFile, ForWriting, True, AsASCII) 
23.
objOutFile.Write strContent 
24.
objOutFile.Close
Es wird im Verzeichnis der Quelldatei eine neue Datei erstellt, die den Namen der Originaldatei mit dem Zusatz _new erhält, die Dateierweiterung bleibt gleich.

Gruß
Friemler
Bitte warten ..
Mitglied: bastla
23.06.2011 um 15:05 Uhr
@Friemler
Bei dieser epischen Darstellung fehlt dann aber noch
01.
'... 
02.
strSuffix     = "_new" 
03.
'... 
04.
strOutFile = objFSO.GetParentFolderName(strInFilePath) & "\" & _ 
05.
             objFSO.GetBaseName(strInFilePath) & strSuffix & "." & _ 
06.
             objFSO.GetExtensionName(strInFilePath) 
07.
'... 
08.
Set objInFile  = Nothing 
09.
Set objOutFile = Nothing 
10.
Set objFSO     = Nothing
Grüße
bastla

P.S.: Die "Dim"-Zeilen habe ich uns erspart ...
Bitte warten ..
Mitglied: Friemler
23.06.2011 um 15:34 Uhr
@bastla
Von wegen episch: Ich hätte natürlich auch das hier schreiben können:
01.
sPattern = "Modul.Einstellung=Einstellung1" 
02.
sReplace = "Modul.Einstellung=Einstellung2" 
03.
Set oFSO = CreateObject("Scripting.FileSystemObject") 
04.
oFSO.CreateTextFile("C:\Temp\Config_new.properties", True).Write Replace(oFSO.OpenTextFile("C:\Temp\Config.properties", 1, False).ReadAll, sPattern, sReplace)
Aber wem wäre damit gedient gewesen? Nicht mal der effektiv auf der Festplatte belegte Speicher hätte sich dadurch geändert.

Dateien schließe ich lieber während des Programmlaufs, die Objekte kann ja VBS zum Scriptende vernichten.

Gruß
Friemler
Bitte warten ..
Mitglied: bastla
23.06.2011 um 15:40 Uhr
@Friemler
Die Zeile 4 ginge auch noch kürzer ...

... aber ein Mittelding wär' mein Ding :
01.
strInfilePath = "C:\Temp\Config.properties" 
02.
strPattern    = "Modul.Einstellung=Einstellung1" 
03.
strReplace    = "Modul.Einstellung=Einstellung2" 
04.
strSuffix     = "_new" 
05.
 
06.
Set objFSO = CreateObject("Scripting.FileSystemObject") 
07.
 
08.
strOutFile = objFSO.GetParentFolderName(strInFilePath) & "\" & _ 
09.
             objFSO.GetBaseName(strInFilePath) & strSuffix & "." & _ 
10.
             objFSO.GetExtensionName(strInFilePath) 
11.
 
12.
objFSO.CreateFile(strOutFile).Write Replace(objFSO.OpenTextFile(strInFilePath).ReadAll, strPattern, strReplace)
Dateien schließe ich lieber während des Programmlaufs
Ich auch (zumindest solche mit Schreibzugriff) - wenn's denn noch länger läuft ...

Grüße
bastla
Bitte warten ..
Mitglied: Friemler
23.06.2011 um 15:48 Uhr
@bastla
Tja, so hat halt jeder seinen Stil.

Ich schreibe lieber "Romane", die sich wie ein Buch lesen lassen, aber dadurch auf den ersten Blick auch verständlich sind. Ich mag keine unnötigen Bandwurmzeilen.

Gruß
Friemler
Bitte warten ..
Mitglied: bastla
23.06.2011 um 15:58 Uhr
@Friemler
Tja, so hat halt jeder seinen Stil.
Natürlich - wobei sich der meine über die letzten Jahre hinweg durchaus noch verändert hat ...
Ich mag keine unnötigen Bandwurmzeilen.
Für mich steigert sich das sogar noch zu: Ich mag überhaupt keine unnötigen Zeilen ...

Grüße
bastla
Bitte warten ..
Mitglied: MTB4ever
27.06.2011 um 12:10 Uhr
Hallo,

vielen Dank für eure Hilfe. Habe mich dazu entschlossen das VB-Script aus Kommentar 2 von Friemler (schreibt am 23.06.2011, 14:12:23 Uhr ) zu nehmen.
Problem wurde damit gelöst!

Viele Grüße
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
Batch: Dateien innerhalb einer Ordnerstruktur nach einem Sting suchen und ersetzen
Frage von yousaintBatch & Shell2 Kommentare

Hallo zusammen, wie oben erwähnt, würde ich gerne innerhalb einer Ordnerstruktur (Dateien innerhalb aller Unterordner) in den Dateien nach ...

Windows Tools
Suche Programm zum dateien suchen und Ersetzen mit Wildcat Suche
gelöst Frage von sfera-haizaWindows Tools5 Kommentare

Grüßt euch, ich nutze zzT. das Programm InfoRapid Suchen & Ersetzen um HTML / PHP Dateien zu durchsuchen bzw. ...

Batch & Shell
Zeile eine Datei per batch ersetzen
Frage von duckknightBatch & Shell2 Kommentare

Hallo die Damen und Herren, ich bin nun bei allen Suchanfragen immer wieder hier gelandet, habe aber das was ...

Batch & Shell
Neueste Datei mit Batch suchen
gelöst Frage von thilo-55Batch & Shell4 Kommentare

Ein herzliches Hallo an die Teilnehmer des Forums. Leider komme ich mit meinen batch/dos-Kenntnissen nicht mehr weiter. Evtl. kann ...

Neue Wissensbeiträge
DSL, VDSL

ALL-BM200VDSL2V - Neues VDSL-Modem mit Vectoring von Allnet

Information von Lochkartenstanzer vor 2 StundenDSL, VDSL1 Kommentar

Moin, Falls jemand eine Alternative zu dem draytek sucht: Gruß lks

Windows 10

Microsoft bestätigt DMA-Policy-Problem in Win10 v1709

Information von DerWoWusste vor 3 StundenWindows 10

Wer sein Gerät mit der DMA-Policy absichert, bekommt evtl. Hardwareprobleme in v1709 von Win10. Warum? Weil v1709 endlich "richtig" ...

Verschlüsselung & Zertifikate

Die Hölle friert ein weiteres Stück zu: Microsoft integriert OpenSSH in Windows

Information von ticuta1 vor 6 StundenVerschlüsselung & Zertifikate

Interessant Die Hölle friert ein weiteres Stück zu: Microsoft integriert OpenSSH in Windows SSH-Kommando in CMD.exe und PowerShell

Apple

IOS 11.2.1 stopft HomeKit-Remote-Lücke

Tipp von BassFishFox vor 1 TagApple

Das Update für iPhone, iPad und Apple TV soll die Fernsteuerung von Smart-Home-Geräten wieder in vollem Umfang ermöglichen. Apple ...

Heiß diskutierte Inhalte
Windows Server
RODC kann nicht aus Domäne entfernt werden
Frage von NilsvLehnWindows Server19 Kommentare

HAllo, ich arbeite in einem Universitätsnetzwerk mit 3 Standorten. Die Standorte haben alle ein ESXi Cluster und auf diesen ...

Hardware
Kein Bild mit nur einer bestimmten Grafikkarten - Mainboard Konfiguration
gelöst Frage von bestelittHardware18 Kommentare

Hallo zusammen, ich hatte schon einmal eine ähnliche Frage gestellt. Damals hatte ich genau das gleiche Problem. Allerdings lies ...

Netzwerkmanagement
Mehrere Netzwerkadapter in einem PC zu einem Switch zusammenfügen
Frage von prodriveNetzwerkmanagement17 Kommentare

Hallo zusammen Vorweg, ich konnte schon einige IT-Probleme mit Hilfe dieses Forums lösen. Wirklich klasse hier! Doch für das ...

Hardware
Links klick bei Maus funktioniert nicht
gelöst Frage von Pablu23Hardware16 Kommentare

Hallo erstmal. Ich habe ein Problem mit meiner relativ alten maus jedoch denke ich nicht das es an der ...