28

バッチ ファイル内の特定の行を検索し、これらの行を編集できるバッチを作成したいと考えています。

例:

//TXTファイル//

ex1
ex2
ex3
ex4

バッチファイルに「ex3」を見つけさせ、これを「ex5」に編集して、次のようにしたい:

ex1
ex2
ex5
ex4
4

8 に答える 8

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    

myreplace.vbs として保存し、コマンド ラインで次のようにします。

c:\test> cscript /nologo myreplace.vbs  > newfile
c:\test> ren newfile file.txt
于 2009-07-12T08:30:23.117 に答える
15

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
于 2009-07-15T02:49:29.017 に答える
11

これまで vbs を書いたことがなく、それを行う必要があったため、ghostdog74 の例は私が必要としていたものの中核を提供してくれました。完璧ではありませんが、誰かが役に立つと思う場合に備えて、例を完全なスクリプトに肉付けしました.

'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
于 2011-02-03T19:17:29.810 に答える
10

Windows を使用している場合は、FART ( F ind A nd Replace Text )を使用できます。1 つの *.exe ファイルのみです (ライブラリは必要ありません)。

実行する必要があるのは次のとおりです。

fart.exe your_batch_file.bat ex3 ex5
于 2014-10-09T02:57:26.773 に答える
5

「FAR」=「検索と置換」はいつでも使用できます。これは Java で書かれているため、Java が動作する場所 (ほぼどこでも) で動作します。ディレクトリとサブディレクトリを操作し、ファイル内を検索して置換し、名前を変更することもできます。また、一括ファイルの名前を変更することもできます。ライセンス = 無料、個人または企業の両方。非常に高速で、開発者によって維持されます。ここで見つけてください:http://findandreplace.sourceforge.net/

また、GrepWin を使用することもできます。ほとんど同じように動作します。ここで見つけることができます: http://tools.tortoisesvn.net/grepWin.html

于 2011-12-22T09:23:32.680 に答える
5

これは、このようなもののために作成されたものsedです (もちろん、そのためにはシステムに sed が必要です)。

sed 's/ex3/ex5/g' 入力.txt > 出力.txt

これには、Unix システムまたは Windows Cygwinのようなプラットフォームが必要です。sed 用の GnuWin32
もあります。( GnuWin32 のインストールと使用法)。

于 2009-07-12T08:12:54.713 に答える