2009-07-12 16 views
0

j'ai posté un autre sur ce ,, mais je devais modifier vraiment beaucoup ...Trouver la ligne et le modifier

Qu'est-ce que la chose est bassicly qu'un lot (y compris peut-être VBScript) peut trouver la ligne 29 un fichier txt ... il devrait éditer cette ligne.

Si la ligne 29 est comme ceci: « option = 21 » il faut changer pour « option = 22 »

le problème est que cette ligne se trouve plus dans le fichier. donc il faut juste modifier la ligne 29 ...

Comment?

[s'il vous plaît pas de programmes personnalisés ;;; il doit être fait par tous les utilisateurs sans installer quelque chose sur OK.]

+0

Tu ne peux pas passer cela gpo ou quelque chose lorsque l'utilisateur connecté? Ou ce n'est pas une situation idéale pour ça non plus? Fondamentalement, copier le fichier w/le texte correct à partir d'un partage réseau commun et remplacer le fichier sur l'ordinateur de l'utilisateur où ce fichier est? –

Répondre

3

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.

+0

le fait. Merci. –

+0

Il donne une erreur. C'est quelque part pour/f. –

+0

J'ai essayé ce script exact ici sans aucune erreur. – Joey

0

Je vois que vous demandez un script vb,
En utilisant AWK, il irait quelque chose comme ça, peut-être
il vous aidera le code vb. Awk '{if (FNR == 29) {gsub (/ option = 21 /, "option = 22"); print} else {print $ 0;}} » input.txt> sortie.txt

N'a pas essayé, donc pourrait avoir quelques problèmes doux ...

  1. le FNR=29 vérifiera le traitement gsub seulement ligne 29
    • gsuboption=21 remplacera les occurrences sur la ligne avec option=22
    • autres lignes seront passés à travers
+0

Oui, je viens de corriger certaines des erreurs que j'ai capturées visuellement. Voulez-vous décrire le système? Je suis sûr que cela peut être fait avec VB aussi. – nik

+0

la commande awk peut être raccourcie: gawk "FNR == 29 {gsub (/ option = 21 /, \" option = 22 \ ")} 1" fichier.txt – ghostdog74

0

est ici 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