วิธีการหลีกเลี่ยงการเข้าร่วมข้าม?


1

ฉันต้องการอัปเดต / แทนที่ข้อมูลตารางโดยใช้ไฟล์แบตช์ และฉันเก็บ old_data ไว้ในไฟล์ old.txt และ new_data ในไฟล์ new.txt

old.txt:
101
India

new.txt:
1001
0891

และนี่คือแบทช์สคริปต์ของฉัน: demo.bat

@echo off
for /f "tokens=1* delims= " %%a in (old.txt) do (
for /f "tokens=1* delims= " %%b in (new.txt) do (

mysql -u root -p tiger -host localhost -database empsrc -e "update table_name set col_name='%%b' where col_name='%%a'"

)
)
pause

เมื่อฉันรันไฟล์แบตช์ข้างต้น

101 is replaced with 1001 and 
india is also replaced with 1001

แต่ผลลัพธ์ที่คาดหวังของฉันคือ

101 is replaced  with 1001
India should be replaced with 0891

ฉันจะแก้ปัญหานี้อย่างไร บางคนสามารถช่วยฉันได้โปรด

คำตอบ:


1

คำสั่ง FOR จะดำเนินการอย่างใดอย่างหนึ่งภายในอื่น ๆ สร้างการรวมกันของ:

101, 1001
India, 1001
101, 0891
India, 0891

คุณต้องการหนึ่งลูปที่อ่านในหนึ่งรายการจากแต่ละไฟล์จากนั้นเรียกใช้โค้ด

ตามคำตอบนี้นี่คือสคริปต์ที่จะสะท้อนสตริงเป็นคู่:

@echo off
setlocal EnableDelayedExpansion
Rem First file is read with FOR /F command
Rem Second file is read via standard handle 3
3< old.txt (for /F "delims=" %%a in (new.txt) do (
  Rem Read next line from file2.txt
  set /P line2=<&3
  Rem Echo lines of both files
  echo %%a,!line2!
))

นี่คือผลลัพธ์:

ป้อนคำอธิบายรูปภาพที่นี่


อีกหนึ่งข้อสงสัยคุณจะทำอย่างไรถ้าฉันต้องการข้ามบรรทัดที่ 1 ในไฟล์. txt เก่า .. ฉันจะวางข้ามสำหรับไฟล์ old.txt ได้อย่างไรฉันหมายถึงอะไรสำหรับไฟล์ new.txt ที่เราใช้สำหรับลูปเช่น (สำหรับ / F "skip = 1 delims =" %% a in (new.txt) ทำ (..
seepana avinash
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.