ตัวแปร DelayedExpansion ไม่ขยายภายในสำหรับการวนซ้ำ


0

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

for %%a in (!loadstream!) do (
    set /A "linecount=!linecount!+1"
    for /F "skip=!linecount!" %%i in (save\%1\%1.sav) do (
        echo %%i
    )
)

FOR แรกใช้งานได้ดี แต่อย่างใดอย่างหนึ่งภายในจะไม่ขยายตัวแปร แต่มันอยู่ในฐานะ! linecount! และให้!linecount!" was not expected at this time.มันทำงานได้ดีถ้าคุณใส่%linecount%แทน แต่ฉันต้องการตัวแปรที่จะนับหนึ่งขึ้นทุกครั้งที่มันลูปดังนั้นจึงไม่เป็นไป setlocal EnableDelayedExpansionถูกตั้งค่าแน่นอน

รหัสบล็อกนี้มีไว้เพื่อเรียกภายในสคริปต์เมื่อใดก็ตามที่จำเป็นต้องโหลดชุดตัวแปรบางชุด ฉันสามารถลองและสร้างวิธีแก้ปัญหา clunky แต่ฉันสามารถบอกได้ว่านี่เป็นวิธีที่จะทำและฉันก็ไม่เข้าใจว่าเกิดอะไรขึ้น

คำตอบ:


1

มันดูเหมือนว่าจะcmdไม่ขยายสิ่งที่อยู่ในตัวเลือกด้านการfor /f; เป็นรอบการทำงานฉันพยายามใช้ตัวแปรลูปfor /f "skip=%%n" ...และสิ่งนี้ก็ไม่สามารถขยายได้

ทางออกเดียวที่ฉันพบคือการข้ามตัวเอง: -

for %%a in (!loadstream!) do (
    set /A linecount=!linecount!+1
    set lineno=0
    for /F "delims=" %%i in (save\%1\%1.sav) do (
        set /A lineno+=1
        if !lineno! == !linecount! echo i: %%i
    )
)

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


ทำงานได้อย่างไร้ที่ติ! ฉันไม่เคยคิดที่จะทำสิ่งนี้ ขอบคุณ!
Mathys Oliveira
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.