Den*_*man 25 edit lines batch-file find text-files
我想创建一个批处理,同时在批处理文件中查找特定行,并能够编辑这些行.
例:
// TXT FILE //
ex1
ex2
ex3
ex4
Run Code Online (Sandbox Code Playgroud)
我想让批处理文件找到'ex3'并将其编辑为'ex5'让它看起来像这样:
ex1
ex2
ex5
ex4
Run Code Online (Sandbox Code Playgroud)
gho*_*g74 30
在本机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
Run Code Online (Sandbox Code Playgroud)
保存为myreplace.vbs并在命令行上:
c:\test> cscript /nologo myreplace.vbs > newfile
c:\test> ren newfile file.txt
Run Code Online (Sandbox Code Playgroud)
小智 14
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
Run Code Online (Sandbox Code Playgroud)
小智 11
ghostdog74的例子提供了我所需要的核心,因为我以前从未编写任何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 <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
Run Code Online (Sandbox Code Playgroud)
如果您使用的是Windows,则可以使用FART(F ind A和R eplace T ext).它只有1个*.exe文件(不需要库).
你只需要运行:
fart.exe your_batch_file.bat ex3 ex5
Run Code Online (Sandbox Code Playgroud)
小智 5
您始终可以使用"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
Run Code Online (Sandbox Code Playgroud)
来源。希望它会有所帮助。