バッチファイル内の特定の行を検出し、これらの行を編集できるバッチを作成します。
例:
// TXTファイル//
ex1
ex2
ex3
ex4
バッチファイルに 'ex3'を見つけさせ、これを 'ex5'に編集して、次のようにします。
ex1
ex2
ex5
ex4
ネイティブWindowsインストールでは、外部ツールを入手する必要なく、batch(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
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
Windowsを使用している場合は、 [〜#〜] fart [〜#〜] ([〜#〜] f [〜#〜]を使用できます= ind [〜#〜] a [〜#〜] nd [〜#〜] r [〜#〜] eplace [〜#〜] t [〜#〜] ext)。単一の* .exeファイルのみです(ライブラリは不要です)。
必要なのは実行するだけです:
fart.exe your_batch_file.bat ex3 ex5
常に「FAR」=「検索と置換」を使用できます。 Javaで書かれているため、Javaはどこでも動作します。ディレクトリとサブディレクトリで動作し、ファイル内で検索および置換し、名前を変更できます。バルクファイルの名前も変更できます。 =無料、個人または企業の両方。非常に高速で、開発者によって管理されています。ここで見つけることができます: http://findandreplace.sourceforge.net/
また、GrepWinを使用できます。ほぼ同じように機能します。ここで見つけることができます: http://tools.tortoisesvn.net/grepWin.html
これは、 sed
が作成されたものです(もちろん、そのためにはシステムにsedが必要です)。
sed 's/ex3/ex5/g' input.txt> output.txt
UnixシステムまたはWindows Cygwin のいずれかのプラットフォームが必要です。
GnuWin32 for sed もあります。 ( GnuWin32のインストールと使用法 )。
@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
ソース 。それが何かを助けることを願っています。
このようにすることができます:
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