ฉันจะทำให้แบทช์ไฟล์แทนที่สตริงย่อยภายในไฟล์ข้อความโดยไม่เปลี่ยนเค้าโครงได้อย่างไร


1

ฉันพยายามสร้างแบตช์ไฟล์ที่พบสตริงย่อยภายในไฟล์ที่กำหนดโดยไม่ต้องเปลี่ยนเลย์เอาต์ไวยากรณ์หรือรูปแบบที่มีอยู่ของไฟล์อินพุตที่มีอยู่ ฉันมีการจัดการที่จะได้รับสคริปต์นี้เพื่อแทนที่สตริงที่ฉันกำหนด แต่มันสมบูรณ์การเปลี่ยนแปลงรูปแบบเดิมของเอกสารของฉัน:

@echo off 
    setlocal enableextensions

    set "search=Test incomplete..."
    set "replace=Test successfully completed!"

    set "textFile=Testing document.txt"

    for /f "delims=" %%i in ('type "%textFile%" ^& break ^> "%textFile%" ') do (
        set "line=%%i"
        setlocal enabledelayedexpansion
        >>"%textFile%" echo(!line:%search%=%replace%!
        endlocal
    )

สิ่งสำคัญที่ฉันต้องการบรรลุคือสคริปต์ที่สามารถแก้ไขส่วนเดียวของไฟล์ข้อความที่ผู้ใช้กำหนด

คำตอบ:


1

ดูเหมือนว่าคุณจะต้องใช้เครื่องมือที่ต้องการหรือเป็นสิ่งที่sedต้องการให้คุณใช้

[ ที่มาของคำถาม & A ]


สิ่งนี้เป็นเรื่องดีที่จะรู้ แต่จะต้องทำในแบทช์เนื่องจากวิธีนี้จะถูกรวมเข้ากับแบทช์สคริปต์ที่มีอยู่ การใช้ภาษาอื่นจะทำให้ฉันต้องเขียนทุกอย่างที่ฉันมีอีกครั้ง
นาย Mendelli

หากคุณเลือกsed. exe แบบสแตนด์อโลนคุณควรจะสามารถโทรหาได้จากในไฟล์แบตช์ใด ๆ เช่นเดียวกับในสคริปต์ทุบตี เพียงแค่บอกไฟล์และสิ่งที่จะค้นหาและเปลี่ยนเป็น
Xen2050

ฉันไม่เคยใช้ทุบตีมาก่อน ฉันสามารถสร้างสคริปต์ PowerShell ตั้งค่าแบทช์ให้โทรก่อนแล้วกลับไปรันโค้ดที่เหลืออยู่ได้หรือไม่
Mr. Mendelli

1
ฉันคิดว่าอย่างนั้นฉันไม่คุ้นเคยกับ PowerShell แต่ไฟล์แบทช์ของ windows ปกติก็ค่อนข้างเหมือนกันทำงานทุกอย่างที่อยู่บนบรรทัดจากนั้นย้ายไปยังบรรทัดถัดไปเมื่อเสร็จสิ้น sed.exe แบบสแตนด์อโลนอาจจะง่ายกว่า
Xen2050

msys 2.0 เป็นเครื่องมือที่ดีกว่า cygwin มันมาพร้อมกับ git, sourcetree และเครื่องมืออื่น ๆ ในประสบการณ์ของฉันสภาพแวดล้อม cygwin สามารถเสียหายได้ง่ายเนื่องจากการพึ่งพาหนักในรีจิสทรีของ Windows การรัน wsl ต้องการการแม็พไดเร็กทอรีผ่าน / mnt / [drive] / ... และต้องการการรีสตาร์ทและการยกระดับสิทธิ์เพื่อติดตั้ง ขอบคุณสำหรับความคิด PowerShell!
TamusJRoyce
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.