| 前言: cn-dos上面有人提出了下面的問(wèn)題: 測試代碼: ================================================================= 本人湊了一下熱鬧分析了一下: 首先,使用call :label(標簽)時(shí)標簽前面要加冒號,如call :A; ----------------------------------------------------------------- 第二,貌似和標簽名后面的括號有關(guān),看看下面的代碼: call :1(123) :1(123) 運行時(shí)發(fā)現報錯,而出錯提示是“系統找不到指定的批處理標簽 - 1”,括號后面的不見(jiàn)了,在看看下面的代碼: :ddd 這是出錯提示變?yōu)榱?#8220;系統找不到指定的批處理標簽 - 1123)”; 再測試一個(gè)代碼: :1 這時(shí)居然可以成功調用了! 我推測是那個(gè)括號(的問(wèn)題了,如果標簽名里面包含有(,那么系統將會(huì )忽略它本身和它后面的所有字符,于是就會(huì )報錯了;%!等變量里面可以存在(,因為系統會(huì )在命令執行前把相關(guān)的變量替換掉; 而具體樓主的那段代碼,由于前面的%^(set^)%沒(méi)有復制(即為空),而(和它后面的又被忽略了,所有出現了“系統找不到指定的批處理標簽 -”的錯誤提示也就可以解釋了; ----------------------------------------------------------------- 第三,我想這個(gè)應該很可能和系統執行批處理文件的方法有一定的關(guān)系: 記得以前有人問(wèn)過(guò)怎樣使得執行下面的類(lèi)似代碼運行時(shí)不會(huì )提示“找不到批處理文件”(拖到cmd窗口下執行可以看到相關(guān)信息); 當時(shí)我做了下面的一些試驗和推測: 先做一個(gè)試驗,寫(xiě)一個(gè)批處理,內容為 運行后先不要按任何鍵,在那個(gè)批處理上面右鍵——編輯,將echo a改為echo b,保存后轉為那個(gè)正在運行的批處理的窗口,按一下任意鍵,結果echo出來(lái)的是b而不是a! 再做一個(gè)試驗,批處理內容如下: 同樣運行后不要按任何鍵,然后把那個(gè)批處理文件刪除或者重命名,接著(zhù)轉為批處理的運行窗口,按一下任意鍵,批處理直接退出而不執行下面的語(yǔ)句,看到一行報錯的語(yǔ)句; 關(guān)于這個(gè),以下為個(gè)人猜測: 批處理運行時(shí)并不會(huì )一開(kāi)始就將所有的代碼載入內存,而是每執行完一行才載入下一行的代碼,于是我們就產(chǎn)生了試驗里面中途改變代碼后執行的是修改后的代碼; 具體到樓主的那個(gè)批處理,由于批處理在運行時(shí)把自身刪除了,在執行完那個(gè)del的命令后系統想往下讀取下一行命令時(shí)卻發(fā)現找不到那個(gè)批處理文件,于是就報錯了。 ----------------------------------------------------------------- :123 這個(gè)執行成功了,從回顯那里可以看到被執行的代碼是 call :123 ,也就是執行call是系統就已經(jīng)把%^date^%替換為123了,再看看下面的代碼: :%^date^% 系統提示“系統找不到指定的批處理標簽 - 123”,同樣系統已經(jīng)把call后面的標簽替換了,但系統并沒(méi)有替換后面的被調用的那個(gè)標簽,于是系統就報錯了。 ================================================================= 綜合2、3點(diǎn),看看下面的代碼: :123 如果上面的看明白了,那應該可以猜出這個(gè)代碼是可以正常運行的 |
聯(lián)系客服