一、set 篇:
1、set(無(wú)開(kāi)關(guān))
set .=test
set.
::若一個(gè)變量以:/.這三個(gè)與路徑相關(guān)的符號(hào)開(kāi)頭,用set查看以該字符打頭的變量時(shí)可以省去一個(gè)空格。
echo %tmp:*/=%
::顯示tmp變量第一個(gè)/之后的部分,其余變量替換與變量偏移太簡(jiǎn)單不解釋
2、set /p 變量名=注釋<設(shè)備名
當(dāng)設(shè)備名為文件時(shí),因?yàn)槲募袚Q行符與回車(chē)符伴生,所以只取文件第一行作為var變量的內(nèi)容,但是不超過(guò)1024字節(jié);而當(dāng)設(shè)備名為nul或者com3時(shí),只顯示不換行的注釋,這種情況下可以省略變量名(如:set /p=Hello World
3、set /a,最具技巧的命令之一
set /a n=1,m=2
::同時(shí)把不同數(shù)值分別賦予兩個(gè)變量
set /a a=b=c=d=e=f=1
::用一條算式為多個(gè)變量同時(shí)賦值
set /a "1/n" 2>nul||echo 變量n非純數(shù)字或?yàn)榱?br />::利用分母不能為0的特征,用set判斷一個(gè)變量是否為非零純數(shù)字
set n=1
set /a "n=!!123|!!234&!!0"
::位運(yùn)算,!、^、|和&常用于布爾運(yùn)算,而邏輯位移常用于二進(jìn)制運(yùn)算(>>還可判斷數(shù)值是否為負(fù),見(jiàn)下例)
set /a n=-100,"1/(-100>>31)"||echo 變量n為負(fù)數(shù)
::順應(yīng)cmd中的正負(fù)數(shù)存儲(chǔ)特點(diǎn),可以用邏輯位移實(shí)現(xiàn)判斷正負(fù)數(shù)的“布爾運(yùn)算”,可以衍生出繁多的算法,比如稍加改動(dòng)就可以比較兩數(shù)甚至多個(gè)數(shù)的大小
set /a n=~-100
::利用~將所有二進(jìn)制的1、0逆轉(zhuǎn),負(fù)號(hào)在后或在前配合可以實(shí)現(xiàn)簡(jiǎn)單加1或減1,這個(gè)技巧主要用來(lái)減少括號(hào)的使用,因?yàn)閪號(hào)與負(fù)號(hào)的優(yōu)先級(jí)都是高于算數(shù)運(yùn)算符的
set /a test=%test:~5,1%-0
::可以避免%test:~5,1%為空時(shí)出錯(cuò)的情況
set /a 十進(jìn)制=0x十六進(jìn)制,十進(jìn)制=0八進(jìn)制
::快速將十六進(jìn)制與八進(jìn)制數(shù)轉(zhuǎn)為十進(jìn)制,可惜沒(méi)有二進(jìn)制...
:loop
set /a n+=1001
echo %n:~-3%
goto loop
::這比常規(guī)的補(bǔ)位方法更優(yōu)越
for %%a in (test 123 ABC test @#$ 123) do set /a ".%%a+=1"
set .|findstr /v /e "=1"
::經(jīng)典的獲取字符串的重復(fù)次數(shù)的方案
二、for 篇:
這是批處理中最強(qiáng)的內(nèi)部命令,沒(méi)有之一!
1、for(無(wú)開(kāi)關(guān))
::不帶參數(shù)的for與for /f配合,威力極大,僅舉此一例
|
新聞熱點(diǎn)
疑難解答