سؤال

أريد إنشاء مجموعة بينما الذي يجد خطوط محددة في ملف دفعي و هي قادرة على تحرير هذه السطور.

على سبيل المثال:

//ملف 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
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top