最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

批處理函數(shù)的高效另類(lèi)應(yīng)用(免call)

 更新時(shí)間:2021年09月15日 10:18:44   投稿:mdxy-dxy  
高速的真正的批處理函數(shù)應(yīng)用方法!并非調(diào)用子過(guò)程我想這次應(yīng)該可以把批處理編程推向一個(gè)新的臺(tái)階,需要的朋友可以參考下

高速的真正的批處理函數(shù)應(yīng)用方法!并非調(diào)用子過(guò)程我想這次應(yīng)該可以把批處理編程推向一個(gè)新的臺(tái)階。

目前只支持一個(gè)參數(shù),

@echo off
::定義函數(shù)
set "d-h=setlocal enabledelayedexpansion&set/a dx=#a#&set xs=0123456789abcdef&(for /l %%z in (1,1,4) do set /a x%%z=dx%%16,dx=dx/16)&(for /f "tokens=1-4" %%1 in ("!x1! !x2! !x3! !x4!") do set hx=!xs:~%%4,1!!xs:~%%3,1!&(if !hx!==00 set hx=)&(for %%z in ("!hx!!xs:~%%2,1!!xs:~%%1,1!") do endlocal&set #a#=%%~z))"
::10進(jìn)制轉(zhuǎn)為16進(jìn)制的函數(shù),參數(shù)入口#a#
::要在開(kāi)啟變量延遲之前定義
setlocal enabledelayedexpansion
for /l %%a in (1,7,1024) do (
    set abc=%%a
    
(%d-h:#a#=abc%)
rem 函數(shù)調(diào)用

echo !abc!
)
pause

可以支持多參數(shù)了
len函數(shù)為兩個(gè)參數(shù),

@echo off

::定義函數(shù)
set "d-h=setlocal enabledelayedexpansion&set/a dx=#a#&set xs=0123456789abcdef&(for /l %%z in (1,1,4) do set /a x%%z=dx%%16,dx=dx/16)&(for /f "tokens=1-4" %%1 in ("!x1! !x2! !x3! !x4!") do set hx=!xs:~%%4,1!!xs:~%%3,1!&(if !hx!==00 set hx=)&(for %%z in ("!hx!!xs:~%%2,1!!xs:~%%1,1!") do endlocal&set #a#=%%~z))"
::10進(jìn)制轉(zhuǎn)為16進(jìn)制的函數(shù),調(diào)用方法:%d-h:#a#=變量名%

set "len=for /f "tokens=1-3" %%1 in ("#a#") do setlocal enabledelayedexpansion&(if defined %%2 (set /a z=8180,x=0&(for /l %%a in (1,1,14) do set/a "y=(z-x)/2+x"&(for %%b in (!y!) do if "!%%2:~%%b,1!" equ "" (set/a z=y) else (set/a x=y)))) else (set z=0))&(for %%z in ("!z!") do endlocal&set %%1=%%~z)"
::取字符串長(zhǎng)度函數(shù),調(diào)用方法:%len:#a#=結(jié)果變量名 字符串變量名%
setlocal enabledelayedexpansion

for /l %%a in (1,7,1024) do (
    set abc=%%a

        (%len:#a#=slen abc%)
        (%d-h:#a#=abc%)
        (%len:#a#=dlen abc%)
        rem 函數(shù)調(diào)用
        
        echo %%a轉(zhuǎn)成16進(jìn)制為:!abc!   轉(zhuǎn)換前字符數(shù):!slen!  轉(zhuǎn)換后字符數(shù):!dlen!
)
pause

思路確實(shí)夠新
但是因?yàn)閮蓚€(gè)原因不建議推廣
代碼的可閱讀性降低
環(huán)境變量的過(guò)分使用也會(huì)影響效率

對(duì)于函數(shù)的效率問(wèn)題
我覺(jué)得還是傳統(tǒng)的”goto對(duì)“來(lái)得更加簡(jiǎn)單、自由和高效

通常情況下

應(yīng)該避免在組合語(yǔ)句(括號(hào)對(duì)中的語(yǔ)句)中使用函數(shù)
如果綜合權(quán)衡后還是要使用
那么就需要保證組合語(yǔ)句的循環(huán)和遞歸級(jí)數(shù)滿(mǎn)足設(shè)計(jì)要求

這種方法,對(duì)于函數(shù)的內(nèi)部結(jié)構(gòu),可讀性是很差,但是對(duì)于主程序的可讀性卻表現(xiàn)得非常好

看:
(%len:#a#=slen abc%)
調(diào)用用函數(shù)len,作用是,計(jì)算變量abc中字符串的長(zhǎng)度,把結(jié)果存到變量slen中

使用函數(shù)的作用不就是為了簡(jiǎn)化主程序嗎?
而對(duì)于函數(shù),通常都是引用前人或者自己常用的功能代碼,只要根據(jù)注釋使用就可以了,
根本就不必去理會(huì)函數(shù)的內(nèi)部做了什么。就像其它編程語(yǔ)言調(diào)用api和dos中斷一樣,難道還要去了解其內(nèi)部是怎么運(yùn)行的嗎?

有了這種函數(shù),就算是批處理新手,也可以輕松寫(xiě)出高效的批處理來(lái),
就算是老手要寫(xiě)較大型的批程序時(shí),這些可是很好的磚瓦啊。
這種函數(shù)定義只要一行就可以了,不足處是要占用一個(gè)變量名,和環(huán)境變量空間,但是這對(duì)于效率來(lái)說(shuō),這點(diǎn)是微小的,因?yàn)橐粋€(gè)call :sub子過(guò)程用時(shí)相當(dāng)于30層的call,及執(zhí)行300次的set var=n,當(dāng)然有一點(diǎn),call sub.bat這種用法,要比call :sub 批處理內(nèi)部子過(guò)程要快一半,但也是比用%len:#a#=var%多出來(lái)的時(shí)間,效率可想而知了。

經(jīng)過(guò)這樣封裝的函數(shù),是不可能會(huì)破壞主程序的結(jié)構(gòu)的,4樓對(duì)len函數(shù)的使用,主程序和函數(shù)同進(jìn)使用了同一個(gè)for令牌%%a卻一樣可以得到正確的結(jié)果。函數(shù)內(nèi)部的變量使用完全是臨時(shí)的,在函數(shù)結(jié)束時(shí)已經(jīng)用endlocal清場(chǎng),只保存返回結(jié)果。

想說(shuō)些贊美的話(huà),不好說(shuō)出口。在一次創(chuàng)作中,突然想起netbenton這種函數(shù)的用法,于是也山寨了一個(gè),呵呵。確實(shí)如樓主所言,發(fā)展一些高效的、正確的、常用的函數(shù)很有必要,能夠充分?jǐn)U展批處理的功能,使得批處理累積起更大的功能,從而實(shí)現(xiàn)更高的跨越式的發(fā)展。

對(duì)于重復(fù)命令調(diào)用處理的方法和技術(shù),目前看來(lái)有幾種:
1、復(fù)制粘貼,重復(fù)出現(xiàn)。這種模式在執(zhí)行任務(wù)與命令比較少的情況下可以使用,比如使用echo產(chǎn)生兩三行空行,總比使用for產(chǎn)生的劃算吧?這種模式的結(jié)果是造成大量重復(fù)代碼,缺乏效率。
2、使用標(biāo)簽,GOTO跳轉(zhuǎn)。把那些反復(fù)使用的同一功能段的代碼做成一個(gè)標(biāo)簽,然后使用goto跳轉(zhuǎn),這是最基本的模式。但goto只負(fù)責(zé)跳出去而不跳回來(lái),要想代碼自動(dòng)回來(lái)則需要再跳一次。
3、使用標(biāo)簽,Call調(diào)用。call的好處是跳到其他標(biāo)簽后能夠自動(dòng)跳回來(lái)。之所以能夠自動(dòng)跳回來(lái),因?yàn)閏all在原來(lái)代碼后面使用了標(biāo)記,可能使用了更多的內(nèi)存存儲(chǔ)來(lái)暫停原來(lái)的進(jìn)程。所以,相對(duì)而言,會(huì)顯得較慢一些。但Call對(duì)參數(shù)有很好的支持,使得人們對(duì)其無(wú)法割舍。
4、使用FOR命令,化繁為簡(jiǎn)。將那些符合FOR特性的命令融合到FOR當(dāng)中,即可減少必要的重復(fù)操作。
5、使用函數(shù),擴(kuò)大變量。將一些命令組合賦值到某一個(gè)特定的變量中,變成通用函數(shù),支持參數(shù),它不需要重新建立標(biāo)簽,但它占據(jù)了一個(gè)變量空間。這種模式適用于所賦值的命令組合比較簡(jiǎn)短,占用空間不大的變量函數(shù)中。可以方便封裝以用于不同的批處理程序中。

相關(guān)文章

  • dos里執(zhí)行tracert命令只有一跳的原因及解決方法

    dos里執(zhí)行tracert命令只有一跳的原因及解決方法

    一直以來(lái),我在家電腦DOS里執(zhí)行Tracert命令時(shí)都只看到只有一跳的返回結(jié)果,令我非常不解。我原以為是電信運(yùn)營(yíng)商那邊的問(wèn)題,所以也就一直沒(méi)去追究是什么真正的原因
    2013-03-03
  • bat如何延時(shí)刪除指定文件夾中的文件

    bat如何延時(shí)刪除指定文件夾中的文件

    編寫(xiě)批處理文件時(shí),需要運(yùn)行一個(gè)命令后,延遲一二秒再運(yùn)行下一個(gè)命令,那么該如何實(shí)現(xiàn)呢?這篇文章就跟大家分享了bat延時(shí)刪除指定文件夾中的文件的方法,文中介紹的很詳細(xì),感興趣的朋友們可以參考借鑒,下面來(lái)一起看看吧。
    2016-11-11
  • dos 重命名文件(夾)ren

    dos 重命名文件(夾)ren

    ren取自rename的前三個(gè)字母,name在英文中有“為……取名”的意思,而re是前綴,有“重新做某事”的含義,結(jié)合起來(lái),rename就是重命名的含義。
    2009-04-04
  • 批處理批量拷貝當(dāng)前目錄及多級(jí)子目錄內(nèi)的txt文件到指定目錄下

    批處理批量拷貝當(dāng)前目錄及多級(jí)子目錄內(nèi)的txt文件到指定目錄下

    想做個(gè)批處理批量拷貝當(dāng)前目錄及多級(jí)子目錄(3級(jí))內(nèi)的文件到指定目錄下,并且只拷貝>100k的txt,有同名文件直接覆蓋,求大佬支持
    2023-08-08
  • 用批處理查找字符數(shù)最多的文本行的代碼

    用批處理查找字符數(shù)最多的文本行的代碼

    通過(guò)批處理查找出文本中字符數(shù)(不含空格)最多的行并輸出,大家可以根據(jù)需要參考下實(shí)現(xiàn)方法。
    2010-10-10
  • dos 流程跳轉(zhuǎn) goto

    dos 流程跳轉(zhuǎn) goto

    一般的批處理命令,都是按照自上而下的流程逐行執(zhí)行的,也就是說(shuō),只有第一行的命令執(zhí)行了之后,才可能執(zhí)行第二行,第二行執(zhí)行完之后,再執(zhí)行第三行……如此依次執(zhí)行。
    2009-04-04
  • 批處理中setlocal enabledelayedexpansion的作用詳細(xì)整理

    批處理中setlocal enabledelayedexpansion的作用詳細(xì)整理

    設(shè)置本地為延遲擴(kuò)展。其實(shí)也就是:延遲變量,全稱(chēng)延遲環(huán)境變量擴(kuò)展, 想進(jìn)階,變量延遲是必過(guò)的一關(guān)!所以這一部分希望你能認(rèn)真看。
    2011-12-12
  • cmd命令行大全 dos命令 cmd命令整理

    cmd命令行大全 dos命令 cmd命令整理

    cmd命令行大全 dos命令 cmd命令,方便學(xué)習(xí)cmd的朋友,大家可以通過(guò)Ctrl+F查找定位
    2012-10-10
  • 批處理解約瑟夫環(huán)應(yīng)用題代碼

    批處理解約瑟夫環(huán)應(yīng)用題代碼

    約瑟夫問(wèn)題是個(gè)有名的問(wèn)題:N個(gè)人圍成一圈,從第一個(gè)開(kāi)始報(bào)數(shù),第M個(gè)將被殺掉,最后剩下一個(gè),其余人都將被殺掉。例如N=6,M=5,被殺掉的人的序號(hào)為5,4,6,2,3。最后剩下1號(hào)。
    2010-10-10
  • 自動(dòng)修改本機(jī)IP地址的bat代碼

    自動(dòng)修改本機(jī)IP地址的bat代碼

    這篇文章主要介紹了自動(dòng)修改本機(jī)IP地址的bat代碼,下面的代碼因?yàn)闀r(shí)間問(wèn)題暫時(shí)沒(méi)有修復(fù),但里面的一些判斷還是值得學(xué)習(xí)的
    2019-12-12

最新評(píng)論

新河县| 柯坪县| 湘潭市| 安康市| 承德县| 深水埗区| 石棉县| 洮南市| 揭东县| 沁源县| 江永县| 依安县| 搜索| 常德市| 沁源县| 新竹市| 缙云县| 台安县| 宁都县| 厦门市| 石城县| 修水县| 阳曲县| 鄂伦春自治旗| 山东省| 偏关县| 册亨县| 齐河县| 宜兴市| 额敏县| 界首市| 五大连池市| 北海市| 嵊泗县| 江孜县| 临沂市| 平泉县| 中牟县| 大竹县| 博野县| 鸡东县|