Question

Je veux créer un lot tout qui trouve des lignes spécifiques dans un fichier de commandes et sont en mesure de modifier ces lignes.

Exemple:

// TXT // FILE

ex1
ex2
ex3
ex4

Je veux laisser le fichier batch trouver « EX3 » et modifier pour « EX5 » de le laisser ressembler à ceci:

ex1
ex2
ex5
ex4
Était-ce utile?

La solution

Sur un natif de Windows installer, vous pouvez utiliser lots (cmd.exe) ou vbscript sans qu'il soit nécessaire d'obtenir des outils externes. Voici un exemple vbscript:

Set objFS = CreateObject("Scripting.FileSystemObject")
strFile = "c:\test\file.txt"
Set objFile = objFS.OpenTextFile(strFile)
Do Until objFile.AtEndOfStream
    strLine = objFile.ReadLine
    If InStr(strLine,"ex3")> 0 Then
        strLine = Replace(strLine,"ex3","ex5")
    End If 
    WScript.Echo strLine
Loop    

Enregistrer sous myreplace.vbs et sur la ligne de commande:

c:\test> cscript /nologo myreplace.vbs  > newfile
c:\test> ren newfile file.txt

Autres conseils

Il n'y a pas de recherche et de remplacer l'édition de fonction ou d'un flux à la ligne de commande dans XP ou 2K3 (ne sais pas à propos de Vista ou au-delà). Ainsi, vous aurez besoin d'utiliser un script comme celui Ghostdog affiché, ou une recherche et remplacer outil capable comme sed.

Il y a plus d'une façon de le faire, comme ce script indique:

@echo off
    SETLOCAL=ENABLEDELAYEDEXPANSION

    rename text.file text.tmp
    for /f %%a in (text.tmp) do (
        set foo=%%a
        if !foo!==ex3 set foo=ex5
        echo !foo! >> text.file) 
del text.tmp

L'exemple de ghostdog74 fourni au cœur de ce que je avais besoin, puisque je ne l'ai jamais écrit de vbs avant et avait besoin de le faire. Ce n'est pas parfait, mais j'étoffée l'exemple dans un script complet tout le monde en cas trouve utile.

'ReplaceText.vbs

Option Explicit

Const ForAppending = 8
Const TristateFalse = 0 ' the value for ASCII
Const Overwrite = True

Const WindowsFolder = 0
Const SystemFolder = 1
Const TemporaryFolder = 2

Dim FileSystem
Dim Filename, OldText, NewText
Dim OriginalFile, TempFile, Line
Dim TempFilename

If WScript.Arguments.Count = 3 Then
    Filename = WScript.Arguments.Item(0)
    OldText = WScript.Arguments.Item(1)
    NewText = WScript.Arguments.Item(2)
Else
    Wscript.Echo "Usage: ReplaceText.vbs <Filename> <OldText> <NewText>"
    Wscript.Quit
End If

Set FileSystem = CreateObject("Scripting.FileSystemObject")
Dim tempFolder: tempFolder = FileSystem.GetSpecialFolder(TemporaryFolder)
TempFilename = FileSystem.GetTempName

If FileSystem.FileExists(TempFilename) Then
    FileSystem.DeleteFile TempFilename
End If

Set TempFile = FileSystem.CreateTextFile(TempFilename, Overwrite, TristateFalse)
Set OriginalFile = FileSystem.OpenTextFile(Filename)

Do Until OriginalFile.AtEndOfStream
    Line = OriginalFile.ReadLine

    If InStr(Line, OldText) > 0 Then
        Line = Replace(Line, OldText, NewText)
    End If 

    TempFile.WriteLine(Line)
Loop

OriginalFile.Close
TempFile.Close

FileSystem.DeleteFile Filename
FileSystem.MoveFile TempFilename, Filename

Wscript.Quit

Si vous êtes sous Windows, vous pouvez utiliser FART ( F ind A e R eplace T ext). Il est à seulement 1 seul fichier * .exe (pas de bibliothèque nécessaire).

Tout ce que vous devez exécuter est:

fart.exe your_batch_file.bat ex3 ex5

Ce genre de choses sed a été fait pour (bien sûr, vous avez besoin sur sed votre système pour cela).

sed 's / ex3 / EX5 / g' input.txt> output.txt

Vous aurez soit besoin d'un système Unix ou le type de Windows Cygwin de la plate-forme pour cela.
Il y a aussi
GnuWin32 sed. ( GnuWin32 installation et d'utilisation ).

Vous pouvez toujours utiliser « FAR » = « Rechercher et remplacer ». Il est écrit en Java, il fonctionne où Java fonctionne (à peu près partout). Fonctionne avec les répertoires et sous-répertoires, recherches et remplace dans les fichiers, peuvent également les renomme. peut également renommer en vrac files.Licence = libre, pour les particuliers ou comapnies. Très rapide et maintenu par le développeur. Trouvez ici: http://findandreplace.sourceforge.net/

Vous pouvez également utiliser grepWin. Fonctionne à peu près la même chose. Vous pouvez le trouver ici: http://tools.tortoisesvn.net/grepWin.html

@echo off
set "replace=something"
set "replaced=different"

set "source=Source.txt"
set "target=Target.txt"

setlocal enableDelayedExpansion
(
   for /F "tokens=1* delims=:" %%a in ('findstr /N "^" %source%') do (
      set "line=%%b"
      if defined line set "line=!line:%replace%=%replaced%!"
      echo(!line!
   )
) > %target%
endlocal

Source . En espérant qu'il aidera quelqu'un.

Vous pouvez faire comme ceci:

rename %CURR_DIR%\ftp\mywish1.txt text.txt
for /f %%a in (%CURR_DIR%\ftp\text.txt) do (
if "%%a" EQU "ex3" ( 
echo ex5 >> %CURR_DIR%\ftp\mywish1.txt
) else (
echo %%a >> %CURR_DIR%\ftp\mywish1.txt
)
)
del %CURR_DIR%\ftp\text.txt
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top