دفعة / العثور على وتحرير الخطوط في ملف TXT
-
12-09-2019 - |
سؤال
أريد إنشاء مجموعة بينما الذي يجد خطوط محددة في ملف دفعي و هي قادرة على تحرير هذه السطور.
على سبيل المثال:
//ملف 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
نصائح أخرى
لا يوجد بحث واستبدال وظيفة أو تيار التحرير في سطر الأوامر في نظام التشغيل XP أو 2k3 (لا أعرف عن ويندوز فيستا أو بعدها).لذلك, سوف تحتاج إلى استخدام برنامج نصي مثل واحد 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، يمكنك استخدام ضرطة (Fوان أاختصار الثاني رديئةإبرة بتحويلة). إنه ملف واحد فقط * .exe (لا حاجة إلى مكتبة).
كل ما تحتاج إليه هو تشغيل:
fart.exe your_batch_file.bat ex3 ex5
هذا هو نوع الأشياء sed
تم صنعه ل (بالطبع، تحتاج إلى SED على نظامك لذلك).
SED 'S / EX3 / EX5 / G' Input.txt> Output.txt
ستحتاج إما إلى نظام UNIX أو Windows cygwin. نوع من منصة لهذا.
يوجد ايضا gnuwin32 ل sed.. (تركيب GNUWIN32 واستخدامه).
يمكنك دائما استخدام "FAR" = "البحث واستبدال". يتم كتابته تحت Java، لذلك يعمل حيث يعمل Java (إلى حد كبير في كل مكان). يعمل مع الدلائل والدلائل الفرعية، والبحث والتبديل داخل الملفات، كما يمكن أيضا إعادة تسمية لهم. أيضا يمكن إعادة تسمية الملفات السائبة. leicence = مجانا، لكل من الأفراد أو 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
مصدر. وبعد على أمل أن يساعد أحد.
يمكنك أن تفعل مثل هذا:
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