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

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, 1481 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 ..
Neuester Wissensbeitrag
Ähnliche Inhalte
Heiß diskutierte Inhalte
LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (18)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Windows Netzwerk
Windows 10 RDP geht nicht (18)

Frage von Fiasko zum Thema Windows Netzwerk ...

Windows Server
Outlook Verbindungsversuch mit Exchange (15)

Frage von xbast1x zum Thema Windows Server ...