Trouver la ligne et le modifier
-
12-09-2019 - |
Question
posté un autre sur ce ,, mais je dû modifier vraiment beaucoup ...
Qu'est-ce que la chose est bassicly qu'un lot (y compris peut-être VBScript) peut trouver la ligne 29 dans un txtfile ... il devrait modifier cette ligne.
Si la ligne 29 est comme ceci: 'option = 21' il devrait changer pour 'option = 22'
le problème est que cette ligne se trouve plus dans le fichier. il devrait juste modifier la ligne 29 ...
How-to ???
[il vous plaît pas de programmes personnalisés ;;; il doit être fait par chaque utilisateur sans installer quelque chose sur OK.]
La solution
Ce n'est pas quelque chose que vous faites habituellement dans le lot, mais il est assez simple:
@echo off
setlocal enableextensions enabledelayedexpansion
rem the input file
set inputfile=file.txt
rem temporary file for output, we can't just write into the
rem same file we're reading
set tempfile=%random%-%random%.tmp
rem delete the temporary file if it's already there
rem shouldn't really happen, but just in case ...
copy /y nul %tempfile%
rem line counter
set line=0
rem loop through the file
for /f "delims=" %%l in (%inputfile%) do (
set /a line+=1
if !line!==29 (
rem hardcoded, at the moment, you might want to look
rem here whether the line really starts with "options"
rem and just put another number at the end.
echo option=22>>%tempfile%
) else (
echo %%l>>%tempfile%
)
)
del %inputfile%
ren %tempfile% %inputfile%
endlocal
Il devrait vous indiquer dans la direction générale si vous voulez adapter.
Autres conseils
Je vois que vous demandez un script vb
,
En utilisant AWK
, il irait quelque chose comme ça,
peut-être vous aider à vb
de code.
awk « {if (FNR == 29) {gsub (/ option = 21 / "option = 22"); print} else {print $ 0;}} » input.txt> sortie.txt
Je n'ai pas essayé, donc pourrait avoir quelques problèmes légers ...
- le
FNR=29
vérifiera pour le traitementgsub
uniquement sur la ligne 29-
gsub
va remplacer toutes les occurrences deoption=21
sur la ligne avecoption=22
- d'autres lignes seront transmises par
-
voici un vbscript
Set objFS = CreateObject("Scripting.FileSystemObject")
strFile = "c:\test\file.txt"
Set objFile = objFS.OpenTextFile(strFile)
Do Until objFile.AtEndOfStream
linenum = objFile.Line
strLine = objFile.ReadLine
If linenum = 29 Then
strLine = Replace(strLine,"option=21","option=22")
End If
WScript.Echo strLine
Loop
comment utiliser:
c:\test> cscript /nologo myscript.vbs > newfile
c:\test> ren newfile file.txt