Gå til innhold
🎄🎅❄️God Jul og Godt Nyttår fra alle oss i Diskusjon.no ×

Anbefalte innlegg

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 av Flaringo
Lenke til kommentar
Videoannonse
Annonse
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 av jonnor
Lenke til kommentar
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

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

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

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

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...