Пакет/Поиск и редактирование строк в TXT файле
Я хочу создать пакет, который найдет определенные строки в пакетном файле и сможет редактировать эти строки.
Пример:
//TXT FILE//
ex1
ex2
ex3
ex4
Я хочу, чтобы пакетный файл нашел "ex3" и отредактировал его на "ex5", чтобы он выглядел так:
ex1
ex2
ex5
ex4
Ответы
Ответ 1
в исходной установке 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
Ответ 2
В командной строке XP или 2k3 нет функции поиска и замены или редактирования потока (не знаете о Vista или за ее пределами). Таким образом, вам нужно будет использовать script как тот, который был представлен Ghostdog, или инструмент для поиска и замены, например sed.
Существует несколько способов сделать это, так как это script показывает:
@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
Ответ 3
Пример ghostdog74 послужил основой того, что мне нужно, поскольку я никогда не писал никаких vbs раньше и не нуждался в этом. Это не идеально, но я привёл пример в полный script, если кто-нибудь найдет его полезным.
'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
Ответ 4
Если вы находитесь в Windows, вы можете использовать FART ( F ind A nd R eplace T ext). Это всего лишь один файл *.exe(без библиотеки).
Все, что вам нужно запустить:
fart.exe your_batch_file.bat ex3 ex5
Ответ 5
Вот что такое sed
(для этого, конечно, вам нужна команда sed).
sed 's/ex3/ex5/g' input.txt > output.txt
Для этого вам понадобится система Unix или Windows Cygwin.
Существует также GnuWin32 для sed. (Установка и использование GnuWin32).
Ответ 6
Вы всегда можете использовать "FAR" = "Найти и заменить". Он написан под Java, поэтому он работает там, где работает Java (почти везде). Работы с каталогами и подкаталогами, поиск и замена в файлах также могут переименовывать их. Также можно переименовать массовые файлы. Licence = free, как для отдельных лиц, так и для comapnies. Очень быстро и поддерживается разработчиком. Найдите его здесь: http://findandreplace.sourceforge.net/
Также вы можете использовать GrepWin. Работает почти так же. Вы можете найти его здесь: http://tools.tortoisesvn.net/grepWin.html
Ответ 7
@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
Источник. Надеюсь, это поможет кому-то.
Ответ 8
Вы можете сделать следующее:
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