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

Komplexen String in einer Textdatei durch einen anderen ersetzen

Frage Entwicklung Batch & Shell

Mitglied: erbertB

erbertB (Level 1) - Jetzt verbinden

20.08.2013 um 16:48 Uhr, 1506 Aufrufe, 4 Kommentare, 2 Danke

Hallo zusammen,

ich versuche ein automatisches Buildscript zur Versionserstellung unserer Software zu erstellen.
Dafür brauche ich unter anderem ein Batch welches mir in einer Textdatei eine Versionsnummer automatisch hochzählt.

Leider scheitere ich schon an den Grundlagen. Mit folgendem Code-Schnipsel versuche ich die derzeitige Version aus der Textdatei auszulesen und mit einem neuen String zu ersetzen.

Die Textdatei enthält nur:
$$ LOCAL cVersion := "V7 016.00"$$
$$ LOCAL cVersion := "V7 016.01"$$
$$ LOCAL cVersion := "V7 016.02"$$
$$ LOCAL cVersion := "V7 016.03"$$
$$ LOCAL cVersion := "V7 016.04"$$
$$ LOCAL cVersion := "V7 016.05"$$

01.
setLocal EnableDelayedExpansion 
02.
 
03.
 
04.
SET "filename=text.txt" 
05.
 
06.
SET "OldVersion=$$   LOCAL cVersion := "V7 016.03"$$" 
07.
SET "NewVersion=$$   LOCAL cVersion := "V7 016.04"$$" 
08.
 
09.
for /F "tokens=*" %%k IN (%filename%) DO ( 
10.
 
11.
	@ECHO ON 
12.
	IF %%k == %OldVersion% (ECHO TRUE) 
13.
)
Nach der Ausführung des Batchs sollte die Datei dann so aussehen:
$$ LOCAL cVersion := "V7 016.00"$$
$$ LOCAL cVersion := "V7 016.01"$$
$$ LOCAL cVersion := "V7 016.02"$$
$$ LOCAL cVersion := "V7 016.04"$$
$$ LOCAL cVersion := "V7 016.04"$$
$$ LOCAL cVersion := "V7 016.05"$$

Das haut aber nicht hin. Kann mir hiermit jemand helfen?
Mitglied: colinardo
20.08.2013, aktualisiert um 19:08 Uhr
Hallo erbertB, Willkommen im Forum.
wenn du Powershell nehmen kannst ist das nur eine Zeile:
01.
(gc "D:\test.txt") -replace 'V7 016\.03','V7 016.04' | sc "D:\test.txt"
Grüße Uwe
Bitte warten ..
Mitglied: bastla
20.08.2013, aktualisiert um 19:07 Uhr
... und wenn nicht Powershell würde ich zu VBS raten:
01.
filename = "text.txt" 
02.
OldVersion = "$$ LOCAL cVersion := ""V7 016.03""$$" 
03.
NewVersion = "$$ LOCAL cVersion := ""V7 016.04""$$" 
04.
 
05.
Set fso=CreateObject("Scripting.FileSystemObject") 
06.
T = fso.OpenTextFile(filename).ReadAll 
07.
If Instr(T, OldVersion) Then fso.CreateTextFile(filename).Write Replace(T, OldVersion, NewVersion)
Anmerkung: In einer Stringkonstanten enthaltene Anführungszeichen müssen verdoppelt werden.

Grüße
bastla

P.S.: Willkommen im Forum!
Bitte warten ..
Mitglied: Endoro
20.08.2013, aktualisiert 21.08.2013
Hallo,
ja, einen Einzeiler für das cmd Shell Fenster kann ich dir auch anbieten:
01.
for /f "delims=" %a in (file.txt) do @for /f tokens^=2delims^=^" %b in ("%a") do @if "%~b"=="V7 016.03" (echo($$ LOCAL cVersion := "V7 016.04"$$) else echo(%a
lg.

PS: hej Downvoter, lass einen Kommentar da, damit ich auch noch was lernen kann!
Bitte warten ..
Mitglied: erbertB
21.08.2013 um 16:07 Uhr
So ich hab es nun geschafft, mit PowerScript geht das wirklich einfacher als per Batch!

Ist sicherlich nicht die eleganteste Lösung aber es funktioniert, danke für die Hilfe!

01.
#Haupt Versionsname 
02.
$v = "V7 016." 
03.
#nach Versionsnummer suchen 
04.
$x= Select-String -path .\text.txt -pattern "LOCAL cVersion" 
05.
$x = $x.ToString() 
06.
#   LOCAL cVersion := "V7 016.03" 
07.
#gesamte Zeile aufspalten 
08.
$y = $x.SubString($x.length-3,3) 
09.
$x = $x.SubString($x.length-11,11) 
10.
#y wiederrum zerlegen um an die Zahl zu kommen 
11.
$y=$y.Substring(0,2) 
12.
#y in int konvertieren und um 1 erhöhen und wieder zurück 
13.
$y=[int]$y 
14.
$y=$y+1 
15.
$y=$y.ToString() 
16.
#y mit 0en auffüllen und Zeile wieder zusammensetzen 
17.
$y=$y.PadLeft(2,"0") 
18.
$y="`""+$v+$y+"`""   
19.
$x 
20.
$y 
21.
 
22.
 
23.
(gc "e:\autobuild\text.txt") -replace $x,$y | sc "e:\autobuild\text.txt"
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
gelöst Powershell - In Textdatei suchen und ersetzen (5)

Frage von Raaja89 zum Thema Batch & Shell ...

Batch & Shell
String aus Spalte in csv auslesen und ersetzen (4)

Frage von mIsSteR zum Thema Batch & Shell ...

Datenbanken
Komplexe und sichere Datenbanksysteme (2)

Frage von Yanmai zum Thema Datenbanken ...

Batch & Shell
gelöst String automatisch anpassen (erweitern oder kürzen) (9)

Frage von CreatorX zum Thema Batch & Shell ...

Neue Wissensbeiträge
LAN, WAN, Wireless

Schwachstelle im WPA2 Protokoll veröffentlicht

(3)

Information von colinardo zum Thema LAN, WAN, Wireless ...

Heiß diskutierte Inhalte