国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > BAT > 正文

批處理技術(shù)內(nèi)幕 ECHO命令介紹

2020-06-09 14:21:21
字體:
供稿:網(wǎng)友
眾所周知,如果echo后面跟一個環(huán)境變量,但是該變量卻為空時,相當于不加任何參數(shù)的echo,即輸出當前echo是on還是off。很多文章或者教程給出的解決方案都是在echo后面加一個點號echo.,這樣就會輸出空行。
復(fù)制代碼 代碼如下:

@echo off
echo %demon.tw%
:: ECHO is off.
echo.%demon.tw%

pause據(jù)我所知,用echo輸出空行至少有十種方法:
復(fù)制代碼 代碼如下:

@echo off

echo=
echo,
echo;

echo+
echo/
echo[
echo]

echo:
echo.
echo/
pause

這十種方法可以分為三組,每組的效率依次遞減。可悲的是,那些被奉為經(jīng)典的教程給出的卻是效率最低那組中的echo.

echo.不僅效率低下,而且還容易引發(fā)錯誤:
復(fù)制代碼 代碼如下:

@echo off
cd .>echo
echo.
pause

我知道你很難接受,但事實的確如此。

第一組中echo后面的=,;都是批處理中的分隔符,所以CMD可以正確地解析出echo命令,并把=,;作為echo命令的參數(shù)。是的,你沒有看錯,分隔符并不是用來分隔命令與參數(shù),它們通常是參數(shù)的一部分。既然是參數(shù),那么為什么不會被輸出?那是因為echo命令直接跳過了參數(shù)的第一個字符,從第二個字符開始輸出,而第二個字符是NUL,所以輸出了空行。

你可能又要問,那為什么用空格做分隔符卻不能輸出空行呢?那是因為在輸出之前,CMD要檢查echo命令的參數(shù)是不是on或者off,或者參數(shù)為空:首先跳過所有空白字符,如果跳過之后字符串就結(jié)束了,那么就認為沒有加參數(shù),輸出echo是on還是off;如果字符串沒有結(jié)束,就調(diào)用wcsnicmp函數(shù)來判斷剩下的字符串是否為on或者off,進而修改echo的狀態(tài)。

因此加上很多空格也是一樣的效果:
復(fù)制代碼 代碼如下:

@echo off
echo
echo on
echo
pause

而對于第二和第三組,事情就沒那么簡單了,由于echo后面跟的并不是分隔符,所以解析之后會被當成一個整體,而echo+ echo/等等顯然又不是內(nèi)部命令,CMD會把它們當做外部命令進行搜索。嗯,你知道,搜索是很花時間的,這就是為什么它們的效率低于第一組。

可惜的是,CMD花了很大力氣搜索,卻仍然找不到這樣的外部命令,這時候它會嘗試著修復(fù)(Fix)命令,看看命令中是否有某些字符(如圖):

FindAndFix

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 辽阳市| 米泉市| 安吉县| 报价| 郯城县| 含山县| 洪泽县| 雅江县| 兴隆县| 泽普县| 江都市| 遂平县| 古丈县| 浦北县| 宁晋县| 扬中市| 仲巴县| 湖北省| 汪清县| 阿拉尔市| 沁阳市| 新民市| 琼海市| 新和县| 龙游县| 泰兴市| 建瓯市| 远安县| 贵定县| 皮山县| 遂川县| 南召县| 新疆| 平陆县| 红桥区| 安龙县| 阿拉尔市| 龙江县| 阜宁县| 朝阳市| 龙江县|