我想創建一個批處理,同時在批處理文件中查找特定的行並能夠編輯這些行。在TXT文件批處理/查找和編輯行
例子:
// txt文件//
ex1
ex2
ex3
ex4
我希望讓該批處理文件找到 'EX3' 和編輯本 '的EX5',讓它看起來像這樣:
ex1
ex2
ex5
ex4
我想創建一個批處理,同時在批處理文件中查找特定的行並能夠編輯這些行。在TXT文件批處理/查找和編輯行
例子:
// txt文件//
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
這是一種東西sed
是作了(當然,你需要sed在你的系統上)。
SED的/ EX3/EX5/G'input.txt中> output.txt的
你要麼需要一個Unix系統或Windows Cygwin樣的平臺這一點。
還有GnuWin32 for sed。 (GnuWin32 installation and usage)。
這是我需要的東西太多。我想設置這個公衆;所以它應該輕鬆完成。 – 2009-07-12 08:30:24
上的例子沒有搜索,並在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的例子提供了我需要的核心,因爲我以前從未編寫過任何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
您可以隨時使用「FAR」=「查找和替換」。它是用java編寫的,所以它在Java工作的地方工作(幾乎在任何地方)。與目錄和子目錄一起工作,搜索和替換文件,也可以重命名它們。也可以重新命名批量文件.Licence =免費,適用於個人或公司。非常快,由開發人員維護。在這裏找到它:http://findandreplace.sourceforge.net/
也可以使用GrepWin。工作幾乎相同。你可以在這裏找到它:http://tools.tortoisesvn.net/grepWin.html
你可以這樣做:
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
@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。希望它能幫助一些人。
它看起來很清楚,如果我說'BATCH' – 2009-07-12 09:14:14