Batch: รวมสองไฟล์เข้าด้วยกันตามลำดับที่เฉพาะเจาะจง


1

ให้ฉันเริ่มต้นด้วยการกล่าวว่าฉันใหม่ในการเขียนโปรแกรมนี้ในชุดไฟล์ ที่กล่าวว่าฉันต้องการรวมสองไฟล์และฉันเริ่มต้นด้วยรหัสต่อไปนี้:

copy Test1.sol + Test2.sol Test.sol /B

รหัสนี้ทำให้เนื้อหาของ Test2.sol ที่ด้านล่างของ Test1.sol ซึ่งไม่ใช่สิ่งที่ฉันต้องการทำ แต่ฉันอยากจะนำเนื้อหาของ Test2.sol ไปไว้ในที่เฉพาะเจาะจงใน Test1.sol

เพื่อให้ชัดเจนยิ่งขึ้น สมมติว่าเนื้อหาของ Test2.sol คือ:

401 TEXT1  12345       123444
401 TEXT2  12345       123444
401 TEXT3  12345       123444

และเนื้อหาของ Test1.sol คือ:

**********************
**     HEADER 1     **
**********************

Message1
Message2

**********************
**     HEADER 2     **
**********************

**********************
**     HEADER 3     **
**********************

Message3
Message4

ฉันจะวางเนื้อหาของ Test1.sol ไว้ใน HEADER 2 ใน Test2.sol ได้อย่างไร - เหมือนกับข้อความอื่น ๆ

ขอบคุณล่วงหน้า!


ฉันไม่คิดว่าไฟล์แบตช์สามารถทำได้ VBScript สามารถทำได้แม้ว่า
LPChip

แดงมัน บางทีคุณสามารถช่วยฉันด้วยสิ่งอื่นแล้ว ฉันต้องสร้างหัวข้อใหม่เพื่อจุดประสงค์นั้นหรือฉันจะถามคุณที่นี่
EMS

หากไม่เกี่ยวข้องกันให้สร้างโพสต์ใหม่
LPChip

@LPChip ที่สามารถทำได้ด้วยไฟล์ชุด แต่มันจะเป็นทางออกหนึ่งออกและมีความซับซ้อนมาก - ฉันไม่ได้เตรียมที่จะใช้เวลามากที่เขียนมัน :)
DavidPostill

น่าเสียดายที่ฉันสามารถสร้างเธรดใหม่ได้ทุกๆ 40 นาที เนื่องจากเป็นเรื่องเร่งด่วนเล็กน้อยฉันจึงสามารถส่งข้อความส่วนตัวจากหน้าแรกนี้ได้หรือไม่
EMS

คำตอบ:


0

ทางออกที่ดีที่สุดของคุณคือการแบ่งไฟล์

หากคุณไม่ต้องการแยกมันคุณจำเป็นต้องมี echos มากมายเช่นนี้

@echo off
@echo ********************** >results.txt
@echo **     HEADER 1     ** >>results.txt
@echo ********************** >>results.txt
type value1.txt >>results.txt

h1.txt

**********************
**     HEADER 1     **
**********************

message1

message2

h2.txt

**********************
**     HEADER 2     **
**********************

h3.txt

**********************
**     HEADER 3     **
**********************

Message3

Message4

type h1.txt >results.txt
type value1.txt >>results.txt
type h2.txt >results.txt
type value2.txt >>results.txt
type h3.txt >results.txt
type value3.txt >>results.txt

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

มันไม่ชัดเจนว่าจะเกิดอะไรขึ้นภายใต้ส่วนหัวแต่ละส่วน แต่ฉันจะแสดงตัวอย่าง

find "401 " values.txt >values1.txt
find "402 " values.txt >values2.txt
find "403 " values.txt >values3.txt

ที่สามารถทำงานได้


ที่ใช้งานได้จริงกับสามแผนก! ขอบคุณมาก!
EMS

1

มีความ "ง่าย" วิธีการแก้ปัญหาหนึ่งซับด้วยเป็นJREPL.BAT - บรรทัดคำสั่งแสดงออกปกติค้นหา / แทนที่ยูทิลิตี้การประมวลผลข้อความ JREPL.BAT เป็นสคริปต์บริสุทธิ์ (ชุดผสม / JScript) ที่ทำงานบนเครื่อง Windows ทุกเครื่องตั้งแต่ XP เป็นต้นไป - ไม่ต้องใช้ไฟล์ exe ของ บริษัท อื่น เอกสารฉบับเต็มมีให้จากบรรทัดคำสั่งผ่านjrepl /?หรือjrepl /??สำหรับความช่วยเหลือแบบเพจ

jrepl "^" "stdin.readAll()+'\r\n'" /j /inc "/^\*\*     HEADER 2     \*\*$//+3" /f test1.sol /o test.sol <test2.sol

คำอธิบายเกี่ยวกับวิธีการทำงานย้อนหลัง (เรียงลำดับ):

  • /f test1.sol ระบุไฟล์อินพุตหลัก
  • /o test.sol ระบุไฟล์เอาต์พุตที่จะสร้าง
  • <test2.sol จัดเตรียมไฟล์ที่ 2 เป็นอินพุตบน stdin
  • /inc "/...//+3"ระบุว่าการค้นหา / แทนที่จะเกิดขึ้นในบรรทัดที่ 3 หลังจากบรรทัด
    "Header 2" บรรทัดแรกเท่านั้น ข้อความระหว่างเครื่องหมายสแลชเป็นนิพจน์ทั่วไป
  • /j ระบุว่าอาร์กิวเมนต์ replace จะถูกตีความเป็น JScript
  • "^" อาร์กิวเมนต์ find เป็นนิพจน์ทั่วไปที่ตรงกับจุดเริ่มต้นของบรรทัด
  • "stdin..." อาร์กิวเมนต์ replace เป็นนิพจน์ JScript ที่ประเมินเป็นเนื้อหาทั้งหมดของ stdin (ไฟล์ที่ 2) รวมถึงตัวคั่นบรรทัดพิเศษ
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.