Пакет / Поиск и редактирование строк в TXT-файле

Я хочу создать пакет, который находит определенные строки в пакетном файле и может редактировать эти строки.

Пример:

// TXT FILE //

ex1 ex2 ex3 ex4 

Я хочу, чтобы пакетный файл нашел «ex3» и отредактировал его до «ex5», чтобы он выглядел так:

 ex1 ex2 ex5 ex4 

    на родной установке Windows вы можете либо использовать пакет (cmd.exe), либо vbscript без необходимости получать внешние инструменты. вот пример в 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 

    сохранить как myreplace.vbs и в командной строке

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

    Нет функции поиска и замены или редактирования streamа в командной строке в XP или 2k3 (не знаете о Vista или за ее пределами). Таким образом, вам нужно будет использовать скрипт, подобный тому, который был представлен Ghostdog, или инструмент для поиска и замены, например sed.

    Существует несколько способов сделать это, как показывает этот сценарий:

     @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 

    Пример ghostdog74 предоставил kernel ​​того, что мне было нужно, поскольку я никогда не писал никаких vbs раньше и не нуждался в этом. Это не идеально, но я придумал пример в полный сценарий, если кто-нибудь найдет его полезным.

     '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   " 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 

    Если вы находитесь в Windows, вы можете использовать FART ( F ind A nd R eplace T ext). Это всего лишь один файл * .exe (без библиотеки).

    Все, что вам нужно, запускается:

     fart.exe your_batch_file.bat ex3 ex5 

    Это тот материал, для которого был создан sed (конечно, для этого вам нужно sed для вашей системы).

    sed ‘s / ex3 / ex5 / g’ input.txt> output.txt

    Для этого вам понадобится система Unix или платформа Windows Cygwin .
    Существует также GnuWin32 для sed . ( Установка и использование GnuWin32 ).

    Вы всегда можете использовать «FAR» = «Найти и заменить». Он написан под java, поэтому он работает там, где работает Java (почти везде). Работы с каталогами и подкаталогами, поиск и замена в файлах также могут переименовывать их. Также можно переименовать массовые файлы. Licence = free, как для отдельных лиц, так и для comapnies. Очень быстро и поддерживается разработчиком. Найдите его здесь: http://findandreplace.sourceforge.net/

    Также вы можете использовать GrepWin. Работает почти так же. Вы можете найти его здесь: 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 

    Источник . Надеюсь, это поможет кому-то.

    Вы можете сделать так:

     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 
    Давайте будем гением компьютера.