webForumDet fria alternativet

Ersätta strängar genom bat-skript eller liknande?

Windows

2 svar · 197 visningar · startad av Chavez

Medlem sedan maj 20001 953 inlägg
Frågan#1

Hejsan!

Jag behöver ett skript i Windows miljö som ersätter ett som jag tidigare använt under Linux. Det har gjort så att det söker efter en sträng och ersätter den med en annan. För er som kan PHP blir det en str_replace().

Detta skall ske rekursivt, börjar jag i wwwroot skall den alltså söka igenom alla filer som finns där och i underkatalogerna (wwwroot/*). I Linux skötte jag detta med ett bash-skript och sed, i Windows (kör 2000) har jag ingen aning om hur jag skall göra. Visst kan jag lösa det med PHP men det känns väldigt bökigt!

Eller finns det någon inbyggd funktion i Windows som kan göra detta?

Tack på förhand!

Medlem sedan aug. 2001458 inlägg
#2

Tror inte w2k har någon medföljande sed-liknande funktion. Gör en fil "replace.vbs" som ser ut ungefär såhär:

option explicit

if wscript.arguments.count <> 2 then
   wscript.stderr.WriteLine "Usage: " & wscript.scriptname & " <old string> <new string>"
   wscript.quit(-1)
end if

dim oldstr
dim newstr
oldstr = wscript.arguments(0)
newstr = wscript.arguments(1)

dim stdin
dim stdout
set stdin  = wscript.stdin
set stdout = wscript.stdout

dim line

do while not stdin.AtEndOfStream
   line = stdin.ReadLine
   line = Replace(line, oldstr, newstr)
   stdout.WriteLine line
loop

För att köra replace.vbs skriver du såhär:

cscript replace.vbs oldstr newstr  <source.txt  >dest.txt

För att gå igenom att antal filer kan du göra genom att skapa en fil.cmd som ser ut typ såhär:

for /r c:\temp %%f in (*.txt) do (
    @echo %%f
)

Alla exempel är otestade, så du får förstås gå igenom och se så de verkar vettiga, samt förstås modifiera fil.cmd så den gör använder replace.vbs och byter ut det du vill istället för att som nu bara skriva ut filnamnen.

Medlem sedan maj 20001 953 inlägg
#3

Skall kolla om det fungerar som det ska. Men jag är verkligen grön när det gäller sådant här i Windows så blir det problem kommer jag tillbaka hit ;)

Göra en replace.vbs, hur?

Annars - stort tack. Hoppas det funkar!

276 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
136 ms — deklarationer (db)
0 ms — hämta statistik (cache)
137 ms — hämta tråd, inlägg och bilagor (db)
120 ms — ändringar (db)