ค้นหาคำสองคำภายในไฟล์ .txt โดยใช้แบตช์ไฟล์

ฉันค้นคว้าบน Google เพื่อค้นหาคำตอบสำหรับคำถามของฉัน สิ่งเดียวที่ฉันพบว่าคล้ายกันเช่นกัน คำถามของฉันก็อยู่ในไซต์นี้: ค้นหาคำในไฟล์ .txt โดยใช้แบตช์ไฟล์

ฉันสร้างไฟล์แบตช์ที่สร้างไฟล์ .txt โดยมี 8 บรรทัดดังนี้:

สวัสดี

เพื่อน

ยังไง

เป็น

คุณ

ทำ

ลาก่อน

ลาก่อน

ฉันต้องการสร้างไฟล์แบตช์ที่สามารถตรวจจับคำสองคำภายในไฟล์ข้อความในไฟล์นี้ซึ่งจะต้องตรวจจับ Bye

ในแบตช์ไฟล์ที่สร้างไฟล์ .txt ด้วย 8 บรรทัด ฉันต้องการให้ตรวจพบคำคู่ Bye ในไฟล์ข้อความ และหลังจากการค้นคว้าบางอย่าง ฉันก็ได้ข้อสรุปว่าสิ่งนี้จะต้องเป็นไปได้ด้วย findstr

findtr สามารถตรวจจับได้ว่าคำว่า Bye เกิดขึ้นสองครั้งหรือไม่

ในไฟล์ของฉันฉันต้องการรับรายงานเช่นนี้

echo ในไฟล์ข้อความที่คุณสร้าง %is't or there is% double word ดังนั้นฉันต้องการผลลัพธ์ของ findstr ลงในตัวแปร %isn't or there is%

ขออภัยหากนี่เป็นคำถามที่ไม่ดี แต่ฉันยังใหม่กับ stackoverflow และฉันเป็นภาษาดัตช์ :/ (ข้อความจำนวนมากแปลด้วย Google แปล) และคุณช่วยอธิบายได้ไหมว่านี่เป็นคำถามที่ไม่ดี ฉันจะทำให้ชัดเจนยิ่งขึ้นสำหรับคุณได้อย่างไร


person hello    schedule 27.05.2016    source แหล่งที่มา
comment
คำสองคำต้องต่อเนื่องกันหรือไม่? หรือคุณยังคิดว่ามันเป็นสองเท่าหากมีคำอื่นอยู่ระหว่างนั้น?   -  person dbenham    schedule 28.05.2016


คำตอบ (2)


คำตอบของสเตฟานใช้งานได้ แต่จะพิมพ์ทุกคำที่ซ้ำกันหลาย ๆ ครั้งตามที่ปรากฏ นอกจากนี้ยังค่อนข้างไม่มีประสิทธิภาพ โดยอ่านไฟล์ทั้งหมดหนึ่งครั้งสำหรับทุกบรรทัดในไฟล์

นี่เป็นโซลูชันแบบแบตช์ที่ค่อนข้างง่ายที่จะพิมพ์คำที่ซ้ำกันแต่ละคำเพียงครั้งเดียว งานจะง่ายกว่ามากหากคุณใช้ SORT เพื่อจัดกลุ่มการจำลองทั้งหมดไว้ด้วยกัน อย่างไรก็ตาม คำสั่ง Windows SORT จะละเว้นตัวพิมพ์ ดังนั้น IF จะต้องละเว้นตัวพิมพ์ด้วย โซลูชันนี้จะอ่านไฟล์เพียงสองครั้งเท่านั้น โดยไม่คำนึงถึงขนาด หนึ่งครั้งสำหรับ SORT และหนึ่งครั้งสำหรับ FOR /F

@echo off
setlocal enableDelayedExpansion

set "prev="
set "dup="
for /f "delims=" %%W in ('sort test.txt') do (
  if /i %%W==!prev! (
    if not defined dup echo(%%W
    set dup=1
  ) else set "dup="
  set "prev=%%W"
)

หากคุณต้องการให้การเปรียบเทียบคำคำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ อัลกอริธึมด้านบนต้องใช้รูทีน SORT ที่คำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ ฉันได้เขียน JSORT.BAT เพื่อทำสิ่งนั้น (ในหมู่ สิ่งอื่น ๆ). เป็นสคริปต์ล้วนๆ (JScript แบบไฮบริด/แบทช์) ที่ทำงานบน Windows

แต่ถ้าคุณยินดีที่จะใช้ JScrpt/batch ไฮบริด การแก้ปัญหาจะง่ายมากหากคุณเพิ่ม JREPL.BAT นิพจน์ทั่วไปค้นหา/แทนที่ยูทิลิตี ตัวเลือก /M ช่วยให้ฉันค้นหาคำที่ซ้ำกันในการขึ้นบรรทัดใหม่ได้

jsort test.txt | jrepl "^(.+)$(\r?\n\1$)+" $1 /jmatch /m

มีเวลาเริ่มต้นที่สำคัญในการเริ่มการทำงานของเอ็นจิ้น JScript ดังนั้นโซลูชันนี้จึงช้ากว่าโซลูชันแบบแบตช์จริงเล็กน้อยหากไฟล์มีขนาดเล็ก แต่หากไฟล์มีขนาดใหญ่ ก็จะเร็วกว่าโซลูชันแบบแบตช์เพียงอย่างเดียว

person dbenham    schedule 29.05.2016
comment
ขอบคุณสำหรับโพสต์นี้ :) - person hello; 29.05.2016

นี่คือสิ่งที่จะเริ่มต้นด้วย:

@echo off
for /f %%i in (t.txt) do for /f %%a in ('type t.txt^|findstr /x "%%i"^|find /v /c "" ') do if %%a gtr 1 echo %%i

findstrนับไม่ได้ เลยต้องใช้ find /c เป็นตัวช่วย

ดู find /?, findstr /? และ for /? สำหรับข้อมูลเพิ่มเติม

person Stephan    schedule 27.05.2016
comment
ขอบคุณสำหรับการช่วยเหลือ! สิ่งนี้ช่วยฉันได้มาก - person hello; 27.05.2016
comment
ฉันสามารถแปลง/เปลี่ยน %%i นั้นเป็นตัวแปรปกติเช่น %i% ได้หรือไม่ - person hello; 27.05.2016
comment
เป็นไปได้ไหมที่จะส่งออกผลลัพธ์ของคำสั่ง for ไปที่ ( output.txt ) ? - person hello; 28.05.2016
comment
ตอนนี้ฉันมีรหัสนี้สำหรับ /f %%i in (t.txt) do for /f %%a in ('type t.txt^|findstr /x %%i^|find /v /c ') do if %%a gtr 1 echo %%i ›› result.txt มันใช้งานได้ แต่ฉันต้องการทำในไฟล์โปรแกรมและมันไม่ทำงานเช่นนี้: for /f %%i in (C:\Program Files\something.txt ) do for /f %%a in ('type some.txt^|findstr /x %%i^|find /v /c ') do if %%a gtr 1 echo %%i ฉันค้นคว้าและพบโปรแกรม^ ไฟล์และโปรแกรมไฟล์ต่างๆ แต่มันใช้งานไม่ได้ เป็นไปได้ไหมในไฟล์โปรแกรม? คุณสามารถอธิบาย? - person hello; 28.05.2016
comment
ในที่สุดฉันก็ทำเสร็จแล้วและมันก็ใช้งานได้! ขอบคุณสำหรับการช่วยเหลือ - person hello; 28.05.2016