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

首頁 > 編程 > BAT > 正文

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

2020-07-26 20:19:01
字體:
來源:轉載
供稿:網友
眾所周知,如果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

這十種方法可以分為三組,每組的效率依次遞減。可悲的是,那些被奉為經典的教程給出的卻是效率最低那組中的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)命令,看看命令中是否有某些字符(如圖):

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

再來解釋一下為什么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
欧美日在线观看| 国产91久久婷婷一区二区| 国产精品成人观看视频国产奇米| 性欧美xxxx| 久久综合电影一区| 日韩一区二区欧美| 亚洲精品久久久久久下一站| 亚洲精品v天堂中文字幕| 精品福利在线视频| 欧美日韩国产色视频| 亚洲区bt下载| 国产成人av在线| 欧美精品情趣视频| 日韩极品精品视频免费观看| 亚洲欧美国产va在线影院| 久久国产精品99国产精| 日韩电影大全免费观看2023年上| 成人免费看吃奶视频网站| 国产精品久久久久久久久久99| 亚洲国产欧美久久| 欧美成人全部免费| 91国自产精品中文字幕亚洲| 亚洲欧洲在线播放| 久久久女女女女999久久| 成人在线观看视频网站| 亚洲精品久久久久中文字幕欢迎你| 日韩视频免费大全中文字幕| 高清日韩电视剧大全免费播放在线观看| 岛国av在线不卡| 亚洲欧美制服综合另类| 日韩欧美中文字幕在线播放| 最近中文字幕mv在线一区二区三区四区| 狠狠色狠狠色综合日日五| 亚洲国产精品热久久| 精品久久久在线观看| 欧洲美女免费图片一区| 国产精品大片wwwwww| 国产精品久久久久久久7电影| 国产精品18久久久久久麻辣| 国产va免费精品高清在线观看| 日韩欧美在线视频日韩欧美在线视频| 亚洲欧美视频在线| 久久人人爽人人爽人人片av高请| 欧美精品在线观看91| 最近2019中文字幕mv免费看| 欧美人在线视频| 亚洲午夜色婷婷在线| 中文字幕亚洲欧美| 俺去亚洲欧洲欧美日韩| 亚洲国产私拍精品国模在线观看| 美日韩丰满少妇在线观看| 久久影视电视剧凤归四时歌| 一本色道久久综合亚洲精品小说| 欧美激情2020午夜免费观看| 98精品国产高清在线xxxx天堂| 热久久免费国产视频| 国产精品手机播放| 国产精品9999| 日韩精品视频免费专区在线播放| 国产男女猛烈无遮挡91| 国产日韩在线免费| 欧美网站在线观看| 国产精品久久久av久久久| 亚洲成年人在线播放| 中文字幕亚洲无线码在线一区| 国语自产精品视频在线看抢先版图片| 欧美高清一级大片| 26uuu另类亚洲欧美日本老年| 久久久噜噜噜久久中文字免| 国产91精品视频在线观看| 日韩国产高清污视频在线观看| 国产伊人精品在线| xvideos亚洲人网站| 中文字幕免费精品一区| 欧美一级片免费在线| 91成人天堂久久成人| 国产精品久久久久影院日本| 在线电影欧美日韩一区二区私密| 国产精品白丝jk喷水视频一区| 欧美在线日韩在线| 国产精品久久国产精品99gif| 日本成人免费在线| 国产精品偷伦一区二区| 精品偷拍一区二区三区在线看| 精品国产福利视频| 国产精品久久久999| 热99精品只有里视频精品| 欧美日韩一区二区三区在线免费观看| 视频直播国产精品| 国产免费一区二区三区在线能观看| 欧美日韩亚洲一区二区三区| 91精品视频免费观看| 91av免费观看91av精品在线| 97国产suv精品一区二区62| 国产69精品99久久久久久宅男| 国产精品电影在线观看| 亚洲成年人影院在线| 欧美成aaa人片在线观看蜜臀| 成人福利网站在线观看11| 久久亚洲私人国产精品va| 欧美日韩精品二区| 日韩精品中文在线观看| 精品欧美激情精品一区| 国产精品久久精品| 91chinesevideo永久地址| 一区二区欧美日韩视频| 在线观看国产精品91| 51午夜精品视频| 久久91超碰青草是什么| 久久手机免费视频| 成人免费视频在线观看超级碰| 国产精品电影久久久久电影网| 少妇高潮久久77777| 国产在线观看精品一区二区三区| 国产亚洲视频中文字幕视频| 中文字幕日韩在线观看| 国产亚洲欧美一区| 久久网福利资源网站| 日韩精品中文字幕久久臀| 欧美极品美女电影一区| 国产自产女人91一区在线观看| 欧美性生交大片免费| 日本一区二三区好的精华液| 精品国产成人av| 国产日韩精品入口| 亚洲高清一二三区| 黄网站色欧美视频| 国产狼人综合免费视频| 欧美性猛交xxxx黑人| 久久精品国产亚洲一区二区| 精品日韩中文字幕| 欧美性猛交xxxx黑人| 欧美日韩亚洲一区二| 国产亚洲精品日韩| 欧美日韩中文在线观看| 国产精品h片在线播放| 亚洲视频网站在线观看| 精品美女久久久久久免费| 欧美成人激情视频| 国产福利精品视频| 欧美特黄级在线| 97成人精品视频在线观看| 日韩精品www| 日韩av最新在线观看| 久久精品成人一区二区三区| 久久久天堂国产精品女人| 久久视频在线直播| 欧美激情精品在线| 日韩激情av在线播放| 亚洲久久久久久久久久| 国产精品精品国产| 欧美黑人国产人伦爽爽爽| 国产视频在线一区二区| 亚洲视频欧美视频| 神马久久久久久| 日本精品久久久久久久| www.日韩欧美| 国产精品一区二区三区在线播放| 精品久久久久久久久久国产| 国语自产精品视频在线看一大j8| 日韩欧美在线视频免费观看| 国产欧美日韩专区发布| 日韩欧美中文免费| 久久久之久亚州精品露出|