看板 ask 關於我們 聯絡資訊
TESTA.bat 內容: @echo off setlocal EnableDelayedExpansion If not defined myValue SET myValue=A :st echo !myValue! SET myValue=AA Call TESTB.bat echo !myValue! pause goto st TESTB.bat 內容: @echo off setlocal EnableDelayedExpansion If not defined myValue SET myValue=B echo !myValue! SET myValue=BB echo !myValue! 輸出結果: A AA BB AA 想請問為什麼輸出第四行,會是AA而非BB? 跳到TESTB.bat運行時,已經將myValue設為BB了 怎麼回到TESTA.bat,myValue仍然是AA 要如何修改才能符合我預期的結果? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 116.89.131.25 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/ask/M.1653931844.A.3C6.html
yzfr6: 設幾個中斷點看一下程式怎麼跑就知道了05/31 06:26
RedFox: 我知道這個批次檔怎麼跑的05/31 09:37
RedFox: 問題在於,我呼叫另個批次檔,讀取某變數,並對其修改05/31 09:37
RedFox: 回到原程序,該變數又變回原樣05/31 09:37
RedFox: 好像變數只修改表面?我自己google搜尋過,但沒找到說明05/31 09:37
weltschmerz: 你的變數只是區域的 不是全域變數05/31 11:29
weltschmerz: B繼承A 但A沒有繼承B05/31 11:31
成功了 把B的 setlocal EnableDelayedExpansion 這行拿掉就行了 謝謝指出原因! 不過我本來的程序 是在if的其中一條件中,可能還要輸入值,再把值丟入myValue 所以才會用到那行指令 那我再想想怎樣解決好了 ※ 編輯: RedFox (116.89.131.25 臺灣), 05/31/2022 13:12:06
OrzOGC: 改用PS啦 05/31 13:23