欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
關(guān)于“call :label(標簽)引發(fā)的問(wèn)題”的一些推測
關(guān)于“call :label(標簽)引發(fā)的問(wèn)題”的一些推測
2007-06-28 00:57

前言:

cn-dos上面有人提出了下面的問(wèn)題:

測試代碼:
一。
@echo off
echo.
echo.
call %^(set^)%(echo I love you.)%
pause

:%^(set^)%(echo I love you.)%
set n=1 2 3 4 5 6 7 8
echo     %n% %n% %n% %n%
echo                       %1% %1% %1% %1%
ping -n 3 127.1>nul
goto :eof
二。

@echo off
echo.
echo.
call %^(set&&echo I love you.^)%
pause

:%^(set&&echo I love you.^)%
set n=1 2 3 4 5 6 7 8
echo     %n% %n% %n% %n%
echo                       %1% %1% %1% %1%
ping -n 3 127.1>nul
goto :eof

經(jīng)過(guò)分析認為:call 調用的標簽不能含有系統內置命令或外部命令,否則就會(huì )得不到理想結果。請大家多測試?。?!
今天晚上,在cmd里測試call,發(fā)現call date 有意想不到的結果。???可能大家早就知道啦。
由于時(shí)間關(guān)系,我要下機啦,明天再和大家討論這個(gè)問(wèn)題。

=================================================================

本人湊了一下熱鬧分析了一下:

首先,使用call :label(標簽)時(shí)標簽前面要加冒號,如call :A;

-----------------------------------------------------------------

第二,貌似和標簽名后面的括號有關(guān),看看下面的代碼:

call :1(123)
pause
goto :EOF

:1(123)
echo a
goto :EOF

運行時(shí)發(fā)現報錯,而出錯提示是“系統找不到指定的批處理標簽 - 1”,括號后面的不見(jiàn)了,在看看下面的代碼:

call :1123)
pause
goto :EOF

:ddd
echo a
goto :EOF

這是出錯提示變?yōu)榱?#8220;系統找不到指定的批處理標簽 - 1123)”;

再測試一個(gè)代碼:

call :1(123)
pause
goto :EOF

:1
echo a
goto :EOF

這時(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)信息);

echo a
del %0

當時(shí)我做了下面的一些試驗和推測:

先做一個(gè)試驗,寫(xiě)一個(gè)批處理,內容為

@echo off
pause
echo a
pause

運行后先不要按任何鍵,在那個(gè)批處理上面右鍵——編輯,將echo a改為echo b,保存后轉為那個(gè)正在運行的批處理的窗口,按一下任意鍵,結果echo出來(lái)的是b而不是a!

再做一個(gè)試驗,批處理內容如下:

@echo off
pause
echo a
pause

同樣運行后不要按任何鍵,然后把那個(gè)批處理文件刪除或者重命名,接著(zhù)轉為批處理的運行窗口,按一下任意鍵,批處理直接退出而不執行下面的語(yǔ)句,看到一行報錯的語(yǔ)句;

關(guān)于這個(gè),以下為個(gè)人猜測:

批處理運行時(shí)并不會(huì )一開(kāi)始就將所有的代碼載入內存,而是每執行完一行才載入下一行的代碼,于是我們就產(chǎn)生了試驗里面中途改變代碼后執行的是修改后的代碼;

具體到樓主的那個(gè)批處理,由于批處理在運行時(shí)把自身刪除了,在執行完那個(gè)del的命令后系統想往下讀取下一行命令時(shí)卻發(fā)現找不到那個(gè)批處理文件,于是就報錯了。

-----------------------------------------------------------------

回到標簽的討論上來(lái),由于系統按照順序執行批處理里面的代碼,當執行到 call :標簽名,如果有標簽名里面含有變量,系統會(huì )替換掉那個(gè)變量,但由于后面的需要被調用的標簽上面的變量并沒(méi)有被替換,這時(shí)就會(huì )出現找不到標簽的錯誤信息了,看看下面的幾個(gè)代碼:

set "^date^=123"
call :%^date^%
pause
goto :EOF

:123
echo a
goto :EOF

這個(gè)執行成功了,從回顯那里可以看到被執行的代碼是 call :123 ,也就是執行call是系統就已經(jīng)把%^date^%替換為123了,再看看下面的代碼:

set "^date^=123"
call :%^date^%
pause
goto :EOF

:%^date^%
echo a
goto :EOF

系統提示“系統找不到指定的批處理標簽 - 123”,同樣系統已經(jīng)把call后面的標簽替換了,但系統并沒(méi)有替換后面的被調用的那個(gè)標簽,于是系統就報錯了。

=================================================================

綜合2、3點(diǎn),看看下面的代碼:

set "(date)=123("
call :%(date)%456
pause
goto :EOF

:123
echo a
goto :EOF

如果上面的看明白了,那應該可以猜出這個(gè)代碼是可以正常運行的

本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
批處理學(xué)習18(Goto 和 Call 的使用)
批處理函數簡(jiǎn)介
批處理 Set 命令詳解 讓你理解set命令
批處理遞歸概念,方便新手
[綜合類(lèi)]
bat命令批處理判斷32位還是64位系統的多種方法
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久