akristina92 Skrevet 18. mai 2009 Del Skrevet 18. mai 2009 (endret) Ok, jeg har ei konfigurasjonsfil jeg vil endre på ved hjelp av å bruke en batch fil. Dette har jeg gjort så langt: @echo off echo Input: set INPUT= set /P INPUT=Type input: %=% echo %INPUT%>> testinput.txt pause Den skriver til tekst-filen, men problemet er at jeg ikke får den til å skrive noe midt inni filen. Filen jeg skal endre fungerer ikke om jeg forandrer på plasseringen av de forskjellige variablene, så å plassere variablen jeg vil endre verdien på helt i slutten av filen er dessverre ikke et alternativ. Så filen jeg vil endre ser for eksempel slik ut: playerhealth = 100 playerammo = 50 playermodel = jack playername = Lars crosshair = small crosshaircolor = red ... Jeg vil endre verdien til "playername" til noe annet ved hjelp av en batch-fil uten å endre på plasseringen av variablene, hvordan kan jeg oppnå dette? Noen som har noen idéer? Jeg tenkte på å skrive en helt ny fil med samme innholdet for hver gang jeg kjører batch-filen, men jeg klarer ikke helt å se hvordan det skal gå for seg. Endret 18. mai 2009 av Flaringo Lenke til kommentar
DeadManWalking Skrevet 23. mai 2009 Del Skrevet 23. mai 2009 Kan lage det for deg i Java vist det hjelper ? Lenke til kommentar
aklla Skrevet 24. mai 2009 Del Skrevet 24. mai 2009 ganske lett hvis filen alltid har samme ting på samme linje, er det slik? å søke gjennom filen blir litt vanskeligere, men det er mulig det også. Lenke til kommentar
jonnor Skrevet 24. mai 2009 Del Skrevet 24. mai 2009 (endret) Jeg vil endre verdien til "playername" til noe annet ved hjelp av en batch-fil uten å endre på plasseringen av variablene, hvordan kan jeg oppnå dette? Noen som har noen idéer? Bruk sed, awk eller andre stream processing "språk", hvor denne jobben er en one-liner. Hvis ikke slikt finnes til Windows ville jeg ha innstalert cygwin sporenstreks. Eksempel på løsning: sed -i "s/playername = .*/playername = nyverdi/" /sil/til/fil Endret 24. mai 2009 av jonnor Lenke til kommentar
akristina92 Skrevet 24. mai 2009 Forfatter Del Skrevet 24. mai 2009 Jeg vil endre verdien til "playername" til noe annet ved hjelp av en batch-fil uten å endre på plasseringen av variablene, hvordan kan jeg oppnå dette? Noen som har noen idéer? Bruk sed, awk eller andre stream processing "språk", hvor denne jobben er en one-liner. Hvis ikke slikt finnes til Windows ville jeg ha innstalert cygwin sporenstreks. Eksempel på løsning: sed -i "s/playername = .*/playername = nyverdi/" /sil/til/fil Om jeg har forstått riktig så gjør man dette i et shell i Linux? I så fall, hvordan kan jeg gjøre det samme i en kjørbar fil i Windows? Lenke til kommentar
jonnor Skrevet 24. mai 2009 Del Skrevet 24. mai 2009 (endret) Ja, eller i et annet Unix lignende miljø. Det er slik jeg ser det to muligheter, bruke sed for Windows eller å innstalere Cygwin. Utover det har jeg ikke peiling i det hele tatt. Windows ekke min greie. http://www.google.com/search?hl=en&cli...=Search&lr= http://www.google.com/search?hl=en&cli...mp;oq=&aqi= Endret 24. mai 2009 av jonnor Lenke til kommentar
GeirGrusom Skrevet 24. mai 2009 Del Skrevet 24. mai 2009 Kan bruke Windows PowerShell også. $fname = "D:\test.txt" $data = Get-Content -Path $fname foreach($s in $data) { $text += $s + [Environment]::Newline } [System.Text.RegularExpressions.Regex]::Replace($text, "playername =.*", "playername = Enannen" + [System.Environment]::Newline, [System.Text.RegularExpressions.RegexOptions]::Multiline) > $fname Jeg mistenker at det kunne blitt gjort med en linje med Set-Content, men jeg er ikke så kjent med PS enda :/ så jeg gjorde det på den vanskelige måten. Lenke til kommentar
backup Skrevet 25. mai 2009 Del Skrevet 25. mai 2009 Har mekka et sed-lignende vbscript, sed.vbs. Det kan brukes på enhver linje i bat-fila di. I kjørboksa taster du: cscript "C:\sed.vbs" "gammel linje/ny linje" som for eksempel: cscript "C:\sed.vbs" "playername = Lars/playername = Doffen" 'test.bat (bat-fila di) er her lagret direkte på C: 'sed.vbs er også lagret direkte på C: par = Split(WScript.Arguments(0),"/") Set fso = CreateObject("Scripting.FileSystemObject") Set f = fso.OpenTextFile("C:\test.bat", 1) inn = f.readall f.close inn = Replace(inn,par(0),par(1)) Set f = fso.OpenTextFile("C:\test.bat", 2,true) f.write inn f.close Lenke til kommentar
GeirGrusom Skrevet 26. mai 2009 Del Skrevet 26. mai 2009 Skrev om til én linje i PowerShell (Get-Content -Path "c:\test.txt") | Foreach-Object { [System.Text.RegularExpressions.Regex]::Replace($_, "playername =.*", "playername = " + "Nyttnavn", [System.Text.RegularExpressions.RegexOptions]::SingleLine) } | Set-Content "test.txt" Litt lenger en sed dog... Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå