2009-07-12 22 views
22

Tôi muốn tạo một lô trong khi tìm các dòng cụ thể trong một tệp lô và có thể chỉnh sửa các dòng này.Hàng loạt/Tìm và Chỉnh sửa các dòng trong tệp TXT

Ví dụ:

// TXT FILE //

ex1 
ex2 
ex3 
ex4 

tôi muốn để cho các tập tin thực thi tìm 'ex3' và chỉnh sửa này để 'EX5' để cho nó trông như thế này:

ex1 
ex2 
ex5 
ex4 
+20

có vẻ rõ ràng nếu tôi nói ´BATCH´ –

Trả lời

27

trên bản cài đặt Windows gốc, bạn có thể sử dụng hàng loạt (cmd.exe) hoặc vbscript mà không cần phải lấy các công cụ bên ngoài. đây là một ví dụ trong 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  

tiết kiệm như myreplace.vbs và trên dòng lệnh

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

Đây là loại nội dung sed được tạo cho (tất nhiên, bạn cần sed trên hệ thống của bạn để làm điều đó).

sed 's/ex3/EX5/g' INPUT.TXT> output.txt

Bạn có thể sẽ cần một hệ thống Unix hoặc Windows Cygwin loại nền tảng cho việc này.
Ngoài ra còn có GnuWin32 for sed. (GnuWin32 installation and usage).

+0

đây là quá nhiều nội dung tôi cần. Tôi muốn đặt công khai này; vì vậy nó nên được thực hiện dễ dàng. –

12

Không có tìm kiếm và thay thế chức năng hoặc chỉnh sửa dòng tại dòng lệnh trong XP hoặc 2k3 (dont biết về vista hoặc hơn thế nữa). Vì vậy, bạn sẽ cần phải sử dụng một kịch bản như một Ghostdog được đăng, hoặc một công cụ tìm kiếm và thay thế có khả năng như sed.

Có nhiều hơn một cách để làm điều đó, như kịch bản này cho thấy: ví dụ

@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 
11

ghostdog74 của cung cấp cốt lõi của những gì tôi cần, vì tôi chưa bao giờ viết bất kỳ vbs trước và cần thiết để làm điều đó . Nó không hoàn hảo, nhưng tôi đã đưa ra ví dụ thành một kịch bản đầy đủ trong trường hợp ai đó thấy nó hữu ích.

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

Bạn luôn có thể sử dụng "FAR" = "Tìm và thay thế". Nó được viết dưới java, vì vậy nó hoạt động ở nơi Java hoạt động (khá nhiều ở khắp mọi nơi). Làm việc với các thư mục và thư mục con, tìm kiếm và thay thế trong các tệp, cũng có thể đổi tên chúng. Cũng có thể đổi tên các tệp hàng loạt.Licence = miễn phí, cho cả cá nhân hoặc comapnies. Rất nhanh và được duy trì bởi nhà phát triển. Tìm tại đây: http://findandreplace.sourceforge.net/

Bạn cũng có thể sử dụng GrepWin. Hoạt động khá giống nhau. Bạn có thể tìm thấy nó ở đây: http://tools.tortoisesvn.net/grepWin.html

6

Nếu bạn đang trên Windows, bạn có thể sử dụng FART (F ind Một nd R eplace T ext). Nó chỉ là 1 tệp * .exe duy nhất (không cần thư viện).

Tất cả các bạn cần phải được điều hành:

fart.exe your_batch_file.bat ex3 ex5 
+2

Họ phải dính ** T ** mở rộng, phải không? :) – akinuri

0

Bạn có thể làm như thế này:

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 
2
@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. Hy vọng nó sẽ giúp một số.

Các vấn đề liên quan