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, 1500 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 ...

Batch & Shell
gelöst Poweshell Script soll String ersetzen und die leere Zeile löschen (4)

Frage von Mars123 zum Thema Batch & Shell ...

Neue Wissensbeiträge
Entwicklung

Exploit Development

Anleitung von burhanudinn123 zum Thema Entwicklung ...

Windows Update

Microsoft Update KB4034664 verursacht Probleme mit Multimonitor-Systemen

(1)

Tipp von beidermachtvongreyscull zum Thema Windows Update ...

Viren und Trojaner

CNC-Fräsen von MECANUMERIC werden (ggf.) mit Viren, Trojanern, Würmern ausgeliefert

(4)

Erfahrungsbericht von anteNope zum Thema Viren und Trojaner ...

Heiß diskutierte Inhalte
Netzwerkprotokolle
Leiten "dumme" Switches VLAN-Tags mit durch? (17)

Frage von coltseavers zum Thema Netzwerkprotokolle ...

Router & Routing
gelöst Linksys wrt1200ac v2 mit dd-wrt: keine vlan-einstellungen im GUI (15)

Frage von Pixi123 zum Thema Router & Routing ...

E-Business
Wo tragt ihr eure privaten Termine ein? (13)

Frage von honeybee zum Thema E-Business ...

Windows Server
Terminalserver starten willkürlich neu (12)

Frage von thaefliger zum Thema Windows Server ...