亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > BAT > 正文

批處理技術內幕 ECHO命令介紹

2020-03-29 20:03:17
字體:
來源:轉載
供稿:網友
眾所周知,如果echo后面跟一個環境變量,但是該變量卻為空時,相當于不加任何參數的echo,即輸出當前echo是on還是off。很多文章或者教程給出的解決方案都是在echo后面加一個點號echo.,這樣就會輸出空行。
復制代碼 代碼如下:

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

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

@echo off

echo=
echo,
echo;

echo+
echo/
echo[
echo]

echo:
echo.
echo/
pause

這十種方法可以分為三組,每組的效率依次遞減??杀氖牵切┍环顬榻浀涞慕坛探o出的卻是效率最低那組中的echo.

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

@echo off
cd .>echo
echo.
pause

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

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

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

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

@echo off
echo
echo on
echo
pause

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

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

ECHO命令,批處理
可以看到,CMD對:./的處理跟+[]/不太一樣,如果是+[]/,CMD會直接把它們從命令中刪除并且添加到原有參數的前面;而如果是:./并且CMD拓展是開啟的話,那么會多調用一次GetFileAttributes函數獲取文件屬性,多調用一次函數自然會多花一些時間,所以第三組的效率又稍稍比第二組的低些。 ECHO命令,批處理

再來解釋一下為什么echo.有時候會引起錯誤。文件名中是不能出現:./的,理論上GetFileAttributes函數都應該返回-1(INVALID_FILE_ATTRIBUTES),然而事實卻不是如此,我也不知道這算不算GetFileAttributes函數的BUG:

復制代碼 代碼如下:

#include <stdio.h>
#include <windows.h>

int main()
{
FILE *fp = fopen("echo", "wb");
fclose(fp);
printf("0x%x/n", GetFileAttributes("echo:"));
printf("0x%x/n", GetFileAttributes("echo."));
printf("0x%x/n", GetFileAttributes("echo/"));
return 0;
}

如果你測試一下上面的C程序,就會發現echo.那行返回的不是-1。

如果GetFileAttributes函數返回的不是-1(一般表示文件不存在),也不是0×10(表示文件是文件夾),那么命令還是會保持原來的樣子,當成外部命令運行。
復制代碼 代碼如下:

@echo off
cd .>echo
echo.
pause

‘echo.' is not recognized as an internal or external command, operable program or batch file.
復制代碼 代碼如下:

@echo off
cd .>echo
setlocal disableextensions
echo.
pause

關閉了CMD拓展,沒有問題。
復制代碼 代碼如下:

@echo off
md echo
echo.
pause

echo是文件夾而不是文件,沒有問題。

最后總結一下吧,在大部分情況下,你都應該使用第一組的echo, echo; echo=來進行輸出,它們的效率跟echo (空格)是一樣的,并且可以用來輸出on或者off,在變量為空時還能輸出空行。

但是echo, echo; echo=卻不能輸出以/?開頭的行,如果你需要,可以使用第二組的echo+ echo/ echo[ echo],它們的效率低一些,但能保證原樣輸出。

我不建議你使用第三組的echo: echo. echo/,如果你仍然要像垃圾教程里面那樣用,我也沒有辦法。
作者: Demon
鏈接: http://demon.tw/reverse/cmd-internal-echo.html
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩av中文字幕在线| www.99久久热国产日韩欧美.com| 亚洲最大在线视频| 久久乐国产精品| 欧美夫妻性视频| 久久久人成影片一区二区三区观看| 国产精品露脸av在线| 亚洲老头同性xxxxx| 国产精品2018| 亚洲人成伊人成综合网久久久| 久久这里有精品| 精品久久久久久亚洲国产300| 欧美一级在线播放| 秋霞av国产精品一区| 91在线免费网站| 日韩中文综合网| 在线观看中文字幕亚洲| 91地址最新发布| 国产综合香蕉五月婷在线| 色琪琪综合男人的天堂aⅴ视频| 高清欧美电影在线| 91精品国产综合久久香蕉最新版| 欧美国产在线电影| 国产精品美女久久久免费| 中文字幕日韩av| 欧美乱大交xxxxx另类电影| 国内精品国产三级国产在线专| 亚洲天堂av在线免费| 国产精品网址在线| 亚洲综合精品伊人久久| 亚洲国产天堂久久综合| 欧美国产精品人人做人人爱| 亚洲一区二区中文| 国产亚洲精品久久久久动| 亚洲第一男人av| 久久久精品一区二区三区| 午夜免费在线观看精品视频| 成人午夜激情免费视频| 欧美午夜片欧美片在线观看| 日韩欧美高清在线视频| 亚洲男人天堂网站| 国产精品十八以下禁看| 国产精品观看在线亚洲人成网| 欧美亚洲另类制服自拍| 国产精品丝袜视频| 91人人爽人人爽人人精88v| 亚洲精品综合精品自拍| 色中色综合影院手机版在线观看| 国产精品丝袜久久久久久高清| 98视频在线噜噜噜国产| 97成人在线视频| 色综合久久精品亚洲国产| 日本久久久a级免费| 日韩中文字幕精品| 亚洲精品美女在线| 精品免费在线观看| 久久久精品国产| 91在线无精精品一区二区| 疯狂欧美牲乱大交777| 欧美日韩性生活视频| 国产欧美va欧美va香蕉在线| 国产精品丝袜久久久久久高清| 日日摸夜夜添一区| 97久久伊人激情网| 亚洲视频电影图片偷拍一区| 91久久久精品| 黄色成人在线播放| 91久久精品国产| 国产成人高潮免费观看精品| 狠狠躁夜夜躁人人躁婷婷91| 亚洲人成在线播放| 精品视频偷偷看在线观看| 国产精品久久久一区| 欧美黄网免费在线观看| 这里只有精品丝袜| 国产精品igao视频| 国产精品观看在线亚洲人成网| 国产美女精品视频免费观看| 91精品久久久久久久久久另类| 久国内精品在线| 色中色综合影院手机版在线观看| 午夜剧场成人观在线视频免费观看| 深夜成人在线观看| 欧美高清在线视频观看不卡| 日韩国产高清污视频在线观看| 91精品国产综合久久香蕉| 久久全球大尺度高清视频| 日韩在线观看免费高清完整版| 国产小视频国产精品| 精品美女永久免费视频| 欧美老女人bb| 亚洲电影第1页| 久久久精品国产亚洲| 在线观看国产成人av片| 韩国美女主播一区| 日韩欧美999| 国产精品成人aaaaa网站| zzijzzij亚洲日本成熟少妇| 91久久久在线| 亚洲欧美中文在线视频| 国产亚洲精品久久久久动| 久久久最新网址| 亚洲在线视频福利| 亚洲久久久久久久久久久| 国产精品视频最多的网站| 亚洲激情 国产| 欧美精品少妇videofree| 青青草成人在线| 国模私拍视频一区| 久久久精品中文字幕| 欧美三级欧美成人高清www| 国产精品偷伦视频免费观看国产| 91久久久久久久久| 国产一区二区精品丝袜| 亚洲国模精品私拍| 亚洲精品国产拍免费91在线| 91在线无精精品一区二区| 欧美高清视频在线观看| 精品欧美一区二区三区| 亚洲精品小视频在线观看| 精品国产依人香蕉在线精品| 精品亚洲国产成av人片传媒| 国产一区二区三区高清在线观看| 少妇精69xxtheporn| 久久成人精品视频| 青草青草久热精品视频在线网站| 国产精品男女猛烈高潮激情| 精品一区电影国产| 91av在线网站| 日韩欧美精品在线观看| 国产精品美乳一区二区免费| 黄色一区二区在线| 日韩综合视频在线观看| www.亚洲一二| 亚洲va国产va天堂va久久| 国产精品扒开腿做爽爽爽视频| 日韩成人久久久| 欧美电影免费观看电视剧大全| 欧美人交a欧美精品| 韩国三级日本三级少妇99| 欧美老女人xx| 欧美激情精品久久久久久大尺度| 久久影院资源站| 国产欧美精品日韩| 97在线免费观看| 日韩精品极品在线观看播放免费视频| 亚洲国产精品免费| 日韩在线视频观看正片免费网站| 日韩av在线一区二区| 精品福利樱桃av导航| 日韩中文在线视频| 97久久精品人搡人人玩| 亚洲国产一区二区三区四区| 国产精品扒开腿做爽爽爽的视频| 亚洲男人的天堂网站| 欧美日韩视频在线| 日韩成人网免费视频| 亚洲人成在线免费观看| 国产精品免费看久久久香蕉| 亚洲四色影视在线观看| 国产精品成人久久久久| 成人有码视频在线播放| 国产在线一区二区三区| 亚洲精品少妇网址|