導航:首頁 > 程序命令 > 命令連接符

命令連接符

發布時間:2023-03-03 13:02:51

① CMD的命令字元

@
\\隱藏命令的回顯。

~
\\在for中表示使用增強的變數擴展;
在set中表示使用擴展環境變數指定位置的字元串;
在set/a中表示按位取反。

%
\\使用兩個%包含一個字元串表示引用環境變數。比如一個%time%可以擴展到當前的系統時間;
單個%緊跟0-9的一個數字表示引用命令行參數;
用於for中表示引用循環變數;
連續的兩個%表示執行時脫為一個%。

^
\\取消轉義字元,即將所有轉義字元的轉義作用關閉。比如要在屏幕顯示一些特殊的字元,比如> >> | ^等時,就可以在其前面加一個^符號來顯示這個^後面的字元了,^^就是顯示一個^,^|就是顯示一個|字元了;
在set/a中是按位異;
在findstr/r的[]中表示不匹配指定的字元集。

&
\\命令連接字元。比如我要在一行文本上同時執行兩個命令,就可以用&命令連接這兩個命令;
在set/a中是按位與。

*
\\代表任意個任意字元,就是我們通常所說的"通配符";比如想在c盤的根目錄查找c盤根目錄里所有的文本文件(.txt),那麼就可以輸入命令"dir c:\*.txt";
在set/a中是乘法。比如"set/a x=4*2",得到的結果是8;
在findstr/r中表示將前一個字元多次匹配。

()
\\命令包含或者是具有優先權的界定符吧,比如for命令要用到這個(),我們還可以在if,echo等命令中見到它的身影;

-
\\范圍表示符,比如日期的查找,for命令里的tokens操作中就可以用到這個字元;
在findstr/r中連接兩個字元表示匹配范圍;
-跟在某些命令的/後表示取反向的開關。

+
\\主要是在命令裡面會用到它,表示將很多個文件合並為一個文件,就要用到這個+字元了;
在set/a中是加法。

|
\\管道符。就是將上一個命令的輸出,作為下一個命令的輸入."dir /a/b | more"就可以逐屏的顯示dir命令所輸出的信息;
在set/a中是按位或;
在幫助文檔中表示其前後兩個開關、選項或參數是二選一的。

:
\\標簽定位符,可以接受goto命令所指向的標簽。比如在批處理文件裡面定義了一個":begin"標簽,用"goto begin"命令就可以轉到":begin"變遷後面來執行批處理命令了。

" "
\\界定符,在表示帶有空格的路徑時常要用""來將路徑括起來,在一些命令裡面也需要" "符號;
在for/f中將表示它們包含的內容當作字元串分析;
在for/f "usebackq"表示它們包含的內容當作文件路徑並分析其文件的內容;
在其它情況下表示其中的內容是一個完整的字元串,其中的>、>>、<、&、|、空格等不再轉義。

/
\\表示其後的字元(串)是命令的功能開關(選項)。比如"dir /s/b/a-d"表示"dir"命令指定的不同的參數;
在set/a中表示除法。

<
\\命令重定向符,將其前面的命令的輸出結果重新定向到其後面的設備中去,後面的設備中的內容被覆蓋。比如可以用"dir > lxmxn.txt"將"dir"命令的結果輸出到"lxmxn.txt"這個文本文件中去;
在findstr/r中表示匹配單詞的右邊界,需要配合轉義字元\使用。

>>
\\命令重定向符。將其前面的命令的輸出結果重新定向到其後面的設備中去,後面設備中的內容沒有被覆蓋。

<
\\將其後面的文件的內容作為其前面命令的輸入。
在findstr/r中表示匹配單詞的左邊界,需要配合轉義字元\使用。

=
\\賦值符號,用於變數的賦值。比如"set a=windows"的意思意思是將"windows"這個字元串賦給變數"a";
在set/a中表示算術運算,比如"set /a x=5-6*5"。

\
\\這個"\"符號在有的情況下,代表的是當前路徑的根目錄.比如當前目錄在c:\windows\system32下,那麼你"dir \"的話,就相當與"dir c:\"
在findstr/r中表示正則轉義字元。

''
在for/f中表示將它們包含的內容當作命令行執行並分析其輸出;
在for/f "usebackq"中表示將它們包含的字元串當作字元串分析。

.
\\
在路徑的\後緊跟或者單獨出現時:
一個.表示當前目錄;
兩個.表示上一級目錄;
在路徑中的文件名中出現時:
最後的一個.表示主文件名與擴展文件名的分隔。

&&
\\連接兩個命令,當&&前的命令成功時,才執行&&後的命令;

||
\\連接兩個命令,當||前的命令失敗時,才執行||後的命令。

$
\\在findstr命令裡面表示一行的結束。

``
在for/f中表示它們所包含的內容當作命令行執行並分析它的輸出。

[]
在幫助文檔表示其中的開關、選項或參數是可選的;
在findstr/r中表示按其中指定的字元集匹配。

?
\\在findstr/r中表示在此位置匹配一個任意字元;
?在路徑中表示在此位置通配任意一個字元;
緊跟在/後表示獲取命令的幫助文檔。

!
\\當啟用變數延遲時,使用!!將變數名擴起來表示對變數值的引用;
在set /a中表示邏輯非。比如set /a a=!0,這時a就表示邏輯1。其他資料: 1、%是個ESCAPE字元,通常將之譯為轉義字元,但也有更形象的譯名脫逸字元、逃逸字元等。也就是說%不僅僅將與其相關的特定字元串轉義並替換為特定字元串,而且自身也會被「脫逸」。而且類似於C語言中的轉義字元"\",雙%會轉義並脫逸為單%,四%則脫為雙%。

2、for本身是一個特殊的命令,類似於一個特化的命令解釋器,因為它的功能實現需要執行多條語句,因此它必須也具有對命令行(特指do後的命令行)分析處理的功能。而command/cmd實現for時自然會借用自身原有的命令行分析模塊,因此for具有二級轉義的特性,for中do後的語句被分兩級分析和解釋,第一級在command/cmd讀入並解釋for命令行時,第二級在for讀入並解釋do命令時,它通常會對同一命令行的進行多次解釋。

然後,我們可以注意到,在do中使用命令行參數變數和環境變數時,不需要雙%,那是因為,這些變數在經過第一級轉義後,被替換成特定的不變的字元串常量,參與for循環的所有執行過程;而替代變數則要求在執行(do後的子命令行中)過程中不斷的動態變化,而這個變化自然仍需要通過脫逸字元來實現,因此使用雙%就是成了必然的選擇。

另外,還需要注意到,在命令行中使用for時不需要雙%,這源於命令解釋器對命令行與批處理的處理方式不同。在早期的DOS版本中,%在命令行中不被視為轉義字元,所以不會被轉義和脫逸,所以當時無法在命令行直接引用環境變數。而使用for時,只需要一個%供for進行轉義和脫逸就夠了。在以後的命令解釋器版本中,加入了命令行轉義的支持(主要是環境變數的支持),但命令行for使用單%的傳統仍然保留了下來。

而 cmd中的變數延遲替換是屬於特殊的情況,但不違背以上的轉義原則,只是for中的環境變數不再是常量了。

rmdir /S /Q %mhnet% 2>NUL 1>NUL 做簡單解釋

這句代碼的大意是指將 %mhnet% 指定的目錄刪除,/s 代表刪除其中的子目錄, /q 表示刪除目錄樹時不提示確認, 1>nul 表示將正確刪除目錄樹的信息禁止輸出,2>nul 表示將刪除過程中的錯誤信息禁止輸出

其中的1與2都是代表某個數據流輸入輸出的地址(NT CMD 稱之為句柄,MSDOS稱之為設備),下表(引自WinXP幫助文檔「使用命令重定向操作符 (Redirection Operators」一節))將列出可用的句柄。

句柄 句柄的數字代號 說明
STDIN 0 鍵盤輸入
STDOUT 1 輸出到命令提示符窗口
STDERR 2 錯誤輸出到命令提示符窗口
UNDEFINED 3-9 這些句柄由應用程序和各個具體工具單獨定義

0 鍵盤輸入
1 輸出到命令提示符窗口
2 錯誤輸出到命令提示符窗口
3-9 這些句柄由應用程序和各個具體工具單獨定義。
2 > nul 表示程序出錯的信息也不顯示。
call attrib -r -h c:\autoexec.bat >nul
這句其實是:
call attrib -r -h c:\autoexec.bat 1 > nul
這些1,2,0等等都是句柄,說白了就是代號,你只要知道1是代表輸出信息,2是代表出錯信息,0是代表鍵盤輸入就行了。
如果有什麼不明白的可以多看看幫助與支持。

命令行對重定向符號出現的位置不做過多限定,只要重定向符號後緊隨「字元設備」即可,故以下語句等效:

echo Hello World> hello.txt
echo Hello> Hello.txt World
echo> Hello.txt Hello World
> hello.txt echo Hello World

在NT系列命令行中,重定向的作用范圍由整個命令行轉變為單個命令語句,受到了命令分隔符&,&&,||和語句塊的制約限制。

echo Message1> msg1.txt & echo Message2> msg2.txt
if "%target%"=="" (echo message to screen ) else (echo message to file> %target%)

綜上所述,>nul 意為將此句命令所產生的標准輸出請求重新定向到空設備中,而因為此設備的緘默特性,即相當於將此語句的輸出信息屏蔽(並非隱藏);而 2>nul 則是將程序執行錯誤時的標准錯誤信息輸出請求重定向後屏蔽。它們聯合使用,即為將此語句所可能產生的所有輸出信息屏蔽。

「重定向」是MSDOS起就存在的命令行特性,負責將指定命令或語句所產生的輸入輸出請求由預設的「控制台」轉交給其它的「設備」來完成,它的啟動標志是「重定向符號」(包括「>,>>,<」三個,其各自意義見[1])出現在句中。

一般的命令行程序輸入輸出請求都通過內部定義三個「埠」(在NT下稱為「句柄」,在DOS下未定義)來完成,分別為標准輸入stdin、標准輸出stdout、標准錯誤stderr。它們通常指向的設備為控制台(console,代碼為CON),其中stdin指向控制台的鍵盤,stdout/stderr指向控制台的監視器。因此,控制台通常即指鍵盤與監視器的聯合體,這是在早期大型機的終端機上所體現出來的概念。其中的stdin可被<重定向,stdout可被>、>>重定向,而stderr在DOS下不可直接重定向,只有通過ctty或其它命令將系統控制權轉交給其它設備的方式,來間接完成。

「設備」是指可控制PC硬體或埠的設備驅動程序或埠代碼,它通常由系統底層或硬體驅動程序實現和支持。比如IO.SYS實現的控制台CON、系統時鍾CLOCK$、未知設備CONFIG$、第一串口AUX、第一並口PRN、所有串口COM1~COM4、所有並口LPT1~LPT3、可用盤符A:-X:以及上文提到的空設備NUL。還有許多其它設備,比如HIMEM.SYS實現的XMSXXXX0,EMM386.EXE實現的EMMXXXX0,IFSHLP.SYS實現的IFS$HLP$等。

在這些設備中,可以處理輸入輸出信息的很少,只有CON、NUL以及連接有輸入輸出硬體(列印機、MODEM等)的串口或並口設備。它們被稱為「字元設備」,而磁碟文件也作為一種特殊的字元設備列選其中,這就大大擴充了重定向的自由度與實用性,以致很多人也將重定向稱為「文件重定向」。

空設備NUL是一個特殊的設備,因為它沒有可控制的PC硬體或埠,而只是一個虛構的的設備或埠,它僅存在於軟體層面。正因為如此,它可以接受所有重定向的輸入輸出請求而不給出任何回應(在NT下不會給出任何輸入信息而結束輸入請求,在DOS下則反復填充127個位元組0後終止響應),這種特性使它很像天文學上的能吞噬一切物質和信息的「黑洞」,也很類似哲學上能顛轉陰陽無中生有的「玄玄之道」。它之所以存在,是因為我們需要一個可以默默無聞地無條件吸納各種冗餘輸出信息或輸入請求的「回收站」,正如「黑洞」就像一個巨大的「宇宙垃圾場」一樣

CMD沒有神經錯亂,是set處理的整數太大了,set使用雙位元組存儲整數,有32位的存貯范圍限制,也就是說它的處理范圍是2^-31~2^31-1,你的磁碟空間超過了這個范圍溢出了。

對此我沒有太好的解決辦法,只有舍棄後三位後除以1049的近似演算法

for /f "tokens=3" %%a in ('dir /-c c:\^|find "可用位元組"') do set freesize=%%a
set /a freesize=%freesize:~0,-3%/1049>nul
echo Freesize:%freesize%

> 創建一個文件
>> 追加到一個文件後面
@ 前綴字元.表示執行時本行在cmd裡面不顯示, 可以使用 echo off關閉顯示
^ 對特殊符號( > < &)的前導字元. 第一個只是顯示aaa 第二個輸出文件bbb
echo 123456 ^> aaa
echo 1231231 > bbb
() 包含命令
(echo aa & echo bb)
, 和空格一樣的預設分隔符號.
; 注釋,表示後面為注釋
: 標號作用
│ 管道操作
; 符號當命令相同的時候可以將不同的目標用;隔離開來但執行效果不變。如執行過程中發生錯誤則只返回錯誤報告但程序還是會繼續執行

首先, @ 不是一個命令, 而是DOS 批處理的一個特殊標記符, 僅用於屏蔽命令行回顯. 下面是DOS命令行或批處理中可能會見到的一些特殊標記符:
CR(0D) 命令行結束符
Escape(1B) ANSI轉義字元引導符
Space(20) 常用的參數界定符
Tab(09) ; = 不常用的參數界定符
+ COPY命令文件連接符
* ? 文件通配符
"" 字元串界定符
| 命令管道符
< > >> 文件重定向符
@ 命令行回顯屏蔽符
/ 參數開關引導符
: 批處理標簽引導符
% 批處理變數引導符

其次, :: 確實可以起到rem 的注釋作用, 而且更簡潔有效; 但有兩點需要注意:
第一, 除了 :: 之外, 任何以 :開頭的字元行, 在批處理中都被視作標號, 而直接忽略其後的所有內容, 只是為了與正常的標號相區別, 建議使用 goto 所無法識別的標號, 即在 :後緊跟一個非字母數字的一個特殊符號.
第二, 與rem 不同的是, ::後的字元行在執行時不會回顯, 無論是否用echo on打開命令行回顯狀態, 因為命令解釋器不認為他是一個有效的命令行, 就此點來看, rem 在某些場合下將比 :: 更為適用; 另外, rem 可以用於 config.sys 文件中.

也可以使用以下的用法:
if exist command
device 是指DOS系統中已載入的設備, 在win98下通常有:
AUX, PRN, CON, NUL
COM1, COM2, COM3, COM4
LPT1, LPT2, LPT3, LPT4
XMSXXXX0, EMMXXXX0
A: B: C: ...,
CLOCK$, CONFIG$, DblBuff$, IFS$HLP$
具體的內容會因硬軟體環境的不同而略有差異, 使用這些設備名稱時, 需要保證以下三點:
1. 該設備確實存在(由軟體虛擬的設備除外)
2. 該設備驅動程序已載入(aux, prn等標准設備由系統預設定義)
3. 該設備已准備好(主要是指a: b: ..., com1..., lpt1...等)
可通過命令 mem/d | find "device" /i 來檢閱你的系統中所載入的設備
另外, 在DOS系統中, 設備也被認為是一種特殊的文件, 而文件也可以稱作字元設備; 因為設備(device)與文件都是使用句柄(handle)來管理的, 句柄就是名字, 類似於文件名, 只不過句柄不是應用於磁碟管理, 而是應用於內存管理而已, 所謂設備載入也即指在內存中為其分配可引用的句柄.

② DOS命令中的一些符號代表什麼

@
\\隱藏命令的回顯。

~
\\在for中表示使用增強的變數擴展;
在set中表示使用擴展環境變數指定位置的字元串;
在set/a中表示按位取反。

%
\\使用兩個%包含一個字元串表示引用環境變數。比如一個%time%可以擴展到當前的系統時間;
單個%緊跟0-9的一個數字表示引用命令行參數;
用於for中表示引用循環變數;
連續的兩個%表示執行時脫為一個%。

^
\\取消轉義字元,即將所有轉義字元的轉義作用關閉。比如要在屏幕顯示一些特殊的字元,比如> >> | ^等時,就可以在其前面加一個^符號來顯示這個^後面的字元了,^^就是顯示一個^,^|就是顯示一個|字元了;
在set/a中是按位異;
在findstr/r的[]中表示不匹配指定的字元集。

&
\\命令連接字元。比如我要在一行文本上同時執行兩個命令,就可以用&命令連接這兩個命令;
在set/a中是按位與。

*
\\代表任意個任意字元,就是我們通常所說的"通配符";比如想在c盤的根目錄查找c盤根目錄里所有的文本文件(.txt),那麼就可以輸入命令"dir c:\*.txt";
在set/a中是乘法。比如"set/a x=4*2",得到的結果是8;
在findstr/r中表示將前一個字元多次匹配。

()
\\命令包含或者是具有優先權的界定符吧,比如for命令要用到這個(),我們還可以在if,echo等命令中見到它的身影;

-
\\范圍表示符,比如日期的查找,for命令里的tokens操作中就可以用到這個字元;
在findstr/r中連接兩個字元表示匹配范圍;
-跟在某些命令的/後表示取反向的開關。

+
\\主要是在命令裡面會用到它,表示將很多個文件合並為一個文件,就要用到這個+字元了;
在set/a中是加法。

|
\\管道符。就是將上一個命令的輸出,作為下一個命令的輸入."dir /a/b | more"就可以逐屏的顯示dir命令所輸出的信息;
在set/a中是按位或;
在幫助文檔中表示其前後兩個開關、選項或參數是二選一的。

:
\\標簽定位符,可以接受goto命令所指向的標簽。比如在批處理文件裡面定義了一個":begin"標簽,用"goto begin"命令就可以轉到":begin"變遷後面來執行批處理命令了。

" "
\\界定符,在表示帶有空格的路徑時常要用""來將路徑括起來,在一些命令裡面也需要" "符號;
在for/f中將表示它們包含的內容當作字元串分析;
在for/f "usebackq"表示它們包含的內容當作文件路徑並分析其文件的內容;
在其它情況下表示其中的內容是一個完整的字元串,其中的>、>>、<、&、|、空格等不再轉義。

/
\\表示其後的字元(串)是命令的功能開關(選項)。比如"dir /s/b/a-d"表示"dir"命令指定的不同的參數;
在set/a中表示除法。

>
\\命令重定向符,將其前面的命令的輸出結果重新定向到其後面的設備中去,後面的設備中的內容被覆蓋。比如可以用"dir > lxmxn.txt"將"dir"命令的結果輸出到"lxmxn.txt"這個文本文件中去;
在findstr/r中表示匹配單詞的右邊界,需要配合轉義字元\使用。

>>
\\命令重定向符。將其前面的命令的輸出結果重新定向到其後面的設備中去,後面設備中的內容沒有被覆蓋。

<
\\將其後面的文件的內容作為其前面命令的輸入。
在findstr/r中表示匹配單詞的左邊界,需要配合轉義字元\使用。

=
\\賦值符號,用於變數的賦值。比如"set a=windows"的意思意思是將"windows"這個字元串賦給變數"a";
在set/a中表示算術運算,比如"set /a x=5-6*5"。

\
\\這個"\"符號在有的情況下,代表的是當前路徑的根目錄.比如當前目錄在c:\windows\system32下,那麼你"dir \"的話,就相當與"dir c:\"
在findstr/r中表示正則轉義字元。

''
在for/f中表示將它們包含的內容當作命令行執行並分析其輸出;
在for/f "usebackq"中表示將它們包含的字元串當作字元串分析。

.
\\
在路徑的\後緊跟或者單獨出現時:
一個.表示當前目錄;
兩個.表示上一級目錄;
在路徑中的文件名中出現時:
最後的一個.表示主文件名與擴展文件名的分隔。

&&
\\連接兩個命令,當&&前的命令成功時,才執行&&後的命令;

||
\\連接兩個命令,當||前的命令失敗時,才執行||後的命令。

$
\\在findstr命令裡面表示一行的結束。

``
在for/f中表示它們所包含的內容當作命令行執行並分析它的輸出。

[]
在幫助文檔表示其中的開關、選項或參數是可選的;
在findstr/r中表示按其中指定的字元集匹配。

?
\\在findstr/r中表示在此位置匹配一個任意字元;
?在路徑中表示在此位置通配任意一個字元;
緊跟在/後表示獲取命令的幫助文檔。

!
\\當啟用變數延遲時,使用!!將變數名擴起來表示對變數值的引用;
在set /a中表示邏輯非。比如set /a a=!0,這時a就表示邏輯1

③ 求腳本(BAT)基本命令

1.「@echo off」--我們所寫的BAT一開始一般都有這一句,這一句的作用是:使所有的命令響應隱藏。「@」--本行命令不回顯。(本來如果你用echo off就可以了,但是還是能夠看到echo off這條命令在CMD下,影響美觀) 2.「color 1e」--設置默認的控制台前景和背景顏色。當前我設為藍底黃字,具體顏色請在CMD下用「color /?」查詢。 --這里又提到了這個參數「/?」,一般CMD下命令後加「/?」就會顯示這條命令的幫助。 3.「rem」--注釋作用,批處理執行過程中前不執行它,rem 後的字元只作注釋作用。
4.「title」--設置命令提示窗口的窗口標題。默認為「cmd」。改成自己喜歡的多有個性,嘿嘿。
5.「cls」--不多說,清屏命令。主要是怕前面的一些空白或字元出現影響美觀。
6.「set」--這個命令的作用很大,請用「set /?」查詢具體使用方法。本例「set topip=172.16.」是將一個名為「topip」的變數值設為「172.16.」。注意CMD下變數的設置不區別數字與字元,能夠自動根據提供的值調整。下行「set theip=0.0」同理。
7.「echo .」--在新行中顯示一個「.」。echo命令能顯示其後的comment。這里提幾個有趣實用的用法--「echo.」,注意與前面的不同,「echo」與「.」間無空格。這條命令如同一個回車,在新行不顯示任何信息並換行。「echo 」,實現響鈴的提示音。後面一個字元的輸入方法是在CMD下用「ctrl+G」,而這個字元得到的方法是CMD下用命令「echo "ctrl+G" >ex.txt」,存入ex.txt文件,再從那裡提取出來的。嘿嘿,如果你懶得做,就我在上面提供的字元嘍。
8.「if」--這條命令也會經常用到,請用「if /?」學習更多信息。本例「if not exist scanipc.exe (echo 文件錯誤!……) 」,實現功能:當同級目錄下不存在「scanipc.exe」時,提示「文件錯誤!……」。否則不提示。「if not exist filename 」在批處理中使用比較多些。
9.「:top」,設置一個標志點,標志名為「top」。「:」的作用就是設置標志。網上有文章說「使用"::comment"作為注釋比"rem comment"執行效率更高。」我相信,這里也建議大家,如果BAT中注釋較多時,請使用「::comment」設置。
10.「set /p pno=」--設置一個變數,並接受用戶輸入。BAT不需要預先聲明變數,只在需要時設置。參數「/p」:將變數數值設成用戶輸入的一行輸入。
11.「if %pno% gtr 9 gotoonerrorspno」--檢驗用戶輸入值是否大於9,是,則轉到一個指定標志點。這里注意BAT中變數引用時要在前後加「%」,但在if語句中可有可無,具體應用大家多寫幾遍就有體會。
12.「goto label」--無條件跳轉到指定標志位並向後執行。BAT好像只有這么一個跳轉語句了,作用不用我說,用了就知道。注意不要構成死循環。

小結:到此,完成了顏色設置、注釋版權說明、標題設置、變數初始化、歡迎信息、功能界面初始化、標志點設置(因為歡迎信息只顯示一次而功能界面要多次使用所以將標志點設置在歡迎信息的後面。)命令的接受與跳轉。;功能界面一般要用「tab」鍵調整相對位置,才能起到美觀的效果。請多練習幾遍領會。;大家在寫腳本過程中要注意標志點的設置位置,才能起到合適的效果。一般寫過幾個腳本會有些感受。;接著接受用戶輸入後「cls」清屏開始執行指定功能。注意這個cls的作用。因為清屏可以在此時,也可以在每個命令執行之前,但如果在每個命令執行之前用的請,那麼要寫的cls就多了,於是把cls寫在這里合適,方便節約快捷。

大家在寫腳本時也應當注意這方面的技巧,將使你寫出更加高效節約方便的代碼。在每次寫完腳本後合理地整合一下自己的代碼。能積累不少經驗。;另外,鑒於部分人仍不知道如何建立BAT文件與運行,請:打開記事本,寫入代碼,保存,保存類型為「所有文件*.*」,文件名為「name*.BAT」。保存後,雙擊運行。因為一般BAT運行很快,所以你可能只看到窗口一閃就消失了,那麼你可以在exit 之前加pause確保能看見運行結果。到此,你應該能夠寫一個很簡單的腳本了,實現一些界面控制。

例1: @echo off color ca title 這是我第一個BAT腳本。 echo 這是我第一個BAT腳本。不錯啊。 pause >nul exit 第二節:(提一些好用的命令)以下設置的都是功能段,在「goto step%pno%」跳轉到相應功能段後,開始執行相應功能。一般命令段: step1:ping命令。(在echo中變數的引用請注意前後加「%」號,否則會導致程序出錯。)我們常用的ping命令:其實很簡單,自己看幫助啦。本句「ping %topip%%theip% -n 1 |findstr 100%>nul」將ping 只發送一次數據包,這樣命令執行起來就快多了,但這樣所會引起一定概率的誤判,而我們在內網這種概率很低,低到可以忽略。所以本人使用參數「-n 1」減少執行時間。將結果不回顯而通過管道命令「|」送給findstr分析,findstr查找是否存在「100%」,並將回顯「丟棄」--「>nul」。因為如果ping一台主機如果返回的結果有「100%」存在說明「不在線。或者有防火牆阻擋。」。所以用findstr確定字元串「100%」的存在性,因為 findstr也有回顯,但我們並不需要,所以將它「丟棄」,使用參數「>nul」將指定命令回顯丟棄。(這一句命令是重點,請仔細領會。)又因為findstr確定指定字元串的存在性後會設定環境變數「errorlevel」的值,所以我們根據「if %errorlevel% equ 0 (command)」,判斷findstr的執行結果就行了,也就不需要有回顯。 「errorlevel」作用很大,一般命令行下的命令執行後都有一個特別的errorlevel,我們就可以根據相應的「返回值」作出相應判斷並執行相應功能。findstr如果找到指定字元串,則有errorlevel=0,說明:IP不在線。那麼既然不在線,我們就沒有向下執行的必要了,直接跳回top界面功能接受下一次指令。如果IP有不同回應,說明在線,則開始檢測共享。「net view \\%topip%%theip%\」--查看指定IP的共享清單。net詳細命令請自行查閱。列出共享清單後返回功能界面。 step2:打開共享一。「explorer \\%topip%%theip%\」,用資源管理器打開指定的IP根。注意語法,其它也沒有什麼。 step3:IPC$空連接。「net use \\%topip%%theip%\ipc$ "" /user:"administrator"」,一個很老的漏洞,但也許內網還有機子存在哩,嘿嘿,語法就是這樣。 step4:一般信息。「ipconfig /all」--用於得到本機的IP與MAC等信息,很好用的命令。語法如示。 「nbtstat -na %topip%%theip%」--用於得到他方機子的一些信息,語法如示。另請自查幫助。 step5:Scanipc。用命令行打開了一個程序而已。在命令行下執行其它命令也就是這樣啦。 step6:返回時間。「net time \\%topip%%theip%」--探測指定機子時間,語法如示。 step7:遠程連接。「net use \\%topip%%theip%\admin$ "" /user:"administrator"」,嘿嘿,administrator空密碼連接。最簡單的入侵啦,嘿嘿嘿。語法如示。 step8:本機信息。跳到另一個功能界面執行相應功能。 step9:高級命令。跳到另一個功能界面執行相應功能。 step0:退出程序。一個exit退出腳本。「exit」,退出CMD。 onerrorsip:實現錯誤提示,並重新執行step1。 onerrorspno:實現錯誤提示,並重新跳轉到功能界面。高級命令段:引用前面已給定的IP,並對其進行一些高級操作。重新繪制功能界面。首先,注意在一個BAT文件中,不允許出現有標志名的重復。 step11:條件連接。設定兩個變數,分別為用戶名與密碼。注意到有一個默認的功能。實現原理是,當接受到用戶輸入為空時(即一個回車),變數將保持不變。條件連接語法如示。比前面遠程空密碼連接更高級一點,嘿嘿。 step12:打開共享。打開已經連接成功的對方計算機的指定盤。打開指定盤語法如示。 step13:發送消息。向對方發送消息。要求雙方的messager服務開啟,否則無法發送成功。發送消息語法如示。 step14:遠程關機。設置關機時間與關機理由,用shutdown程序關閉對方計算機,嘿嘿,惡作劇。要求你連接成功,並有 shutdown程序支持。shutdown語法自查幫助。 step15:溢出CMD。嘿嘿,溢出到對方的CMD下,算是一個真正的入侵了。當然需要用戶名與密碼嘍。要求用戶名與密碼正確並對方默認支持遠程管理。並有psexec程序支持。psexec語法如示,並請自查幫助。 step16:結束進程。嘿嘿,不說也知道,結束對方已知進程。要求連接成功並有pskill程序支持。惡作劇類,有惡意成分。嘿嘿。小心使用。 step17:ipc$連接。同step3. step18:斷開連接。斷開與對方的連接,就是擦屁股啦,以免讓對方有所察覺。這個好習慣要養成。語法如示。 step19:一般命令。返回前面一個功能界面。 step20:結束程序。退出。 step110:AT命令,令對方在指定時間運行指定命令。有點像木馬,嘿嘿。要求連接成功。因為節約變數,所以引用了前面的暫不使用的變數。好習慣。哈哈。 step111:telnet。遠程telnet。不要說你一點都不知道,語法如示並請自查幫助。 step112:更改主IP。主要是為了使我們的使用方便,對某個特定IP段探測能夠簡化輸入。如主IP改成「172.16.130.」,那麼專門對130探測,而且輸入IP時只需輸入最後位,嘿嘿,多方便啊。 step113:任意命令。主要是接受用戶輸入並執行用戶的輸入罷了,結構如示。本機信息段:主要是對本機信息的一些查詢語法。 stepm1:ipconfig,不說了。但請注意到,在功能界面的實現上有一點,「&」符號,因為「&」符號在CMD下是命令連接符,如果光用「&」會讓BAT誤解為其後的都是命令。但我們只是希望輸出一個「&」罷了,於是用「^」符號連接符表明只是輸出「&」,而不是實現命令連接。這里提一下「&」命令連接符,例如:echo frist&echo second.同效於: echo frist echo second. 只是實現結合兩行命令在同一行實現。類如一個很簡單的批處理啦。再提一下「^」符號連接符,對一些特殊符號可能在CMD下無法正確如願顯示,可用「^」連接,以達到如期效果。用了「^」在文本中佔了一位空間,但在輸出時它並不顯示,所以注意界面的布置。 stepm2:本機進程。利用命令行下的進程工具查看進程。要求pslist程序支持。 stepm3:本機用戶。就是查詢一下本機用戶,也許會發現機了被動過的痕跡。 stepm4:結束進程。在命令行下結束本機進程。要求有pskill程序支持。 stepm5:本機埠。也許能看出被攻擊或被入侵的痕跡。語法如示。 stepm6:共享情況。看看本機的共享是否真的如你所想,如你所見。否則請注意安全嘍。語法如示。 stepm7:啟動項值。在命令行下導出啟動項值並給出結果。比魔法兔子什麼的快多了,就是界面不是很好看,呵呵。語法如示。 stepm0:退出程序。退出。小結:到此,您學習過了一些有用的命令與應用。以及大部分的網路命令與外部程序的使用。接下來你可以模擬IP小工具寫出適合更自己的IP小工具哦。注意每執行完一項功能後要用goto返回功能界面,否則腳本無條件向下繼續執行。;errorlevel的應用。在BAT中,errorlevel的作用很大,大家在使用過程中通過多次接觸,感受一下如何玩轉errorlevel。在執行完一個程序後,可以用echo %errorlevel%查看程序運行後是如何設定errorlevel的值。;if的應用。在BAT中,if語句的作用也很大,特別與errorlevel結合實現自動判斷。以及一些基本條件判斷。請查看"if /?" 學習更詳細的說明。;變數的接受與傳遞。這方面的感覺需要大家多寫BAT才能有所感觸。如何合理與高效的應用變數,能使你的腳本更加漂亮。計算機語言都是實踐性很強的,我們學習理論只是基礎,通過大量的實踐才能真正掌握一門語言的應用。 第三節:(一些應用技巧與命令)接下來我們看我的「代理伺服器搜索組件 (ver 2.1)」, 1.「>」與「>>」的區別。 「>」--把指定數據傳送到指定文件或區域。有覆蓋作用,從文件頭開始重寫文件。如指定文件不存在,則新建文件並存入指定數據。 「>>」--以追加方式將指定數據傳送到指定文件或區域。從文件結尾開始寫入指定內容。這兩個功能有區別,請注意選擇合適的傳送方式傳送數據。例如:「echo 文本內容。>link.txt」與「echo 文本內容。>>link.txt」。若本不存在文件link.txt或文件link.txt內容為空,那麼兩條命令的運行結果相同。但如果link.txt不為空,那麼第一條命令將清除link.txt所有內容並存入數據「文本內容。 」保存。而第二條命令只在link.txt的文件尾(另起一行,注意每一個「>>」都會另起一行寫入新數據)追加數據「文本內容。」而以前的內容保持不變。還要特別提一個前面說過的「丟棄」用法「>nul」,因為我們有時候只需要命令的運行而並不需要看到命令的運行結果以及回顯,但這些命令又會出現我們並不需要看到的回顯,影響美觀。故在其後追加「>nul」,丟棄回顯。 2.循環語句的說明。例2: :puship set /p tip= if %tip%==%tbip% goto step1 set tbip=%tip% echo %tip% >>link.txt goto puship 本例中「if %tip%==%tbip% goto step1」與「if %tip% equ %tbip% goto step1」效果一樣。本例的作用是接受用戶帖入數據。關鍵技術在於:因為用戶帖入數據我們不能使用戶每次輸入都詢問是否結束,而需要實現「 智能化」的判斷,但如何以最少的代碼、最簡單的方法實現所謂的「智能化」呢。分析用戶輸入情況:因為一般用戶帖入數據都不會出現重復,所以我們利用這個特點,分析用戶的數據,當用戶帖入列表時,分析數據並將數據存入相應文本,以備後用。當用戶粘帖文本結束後,再加一個回車,因為最後一次變數沒有接受到任何修改,於是保持默認不變(也就是之前的數據。),再通過我們之前的數據備份對照,分析是否不變,是,則跳出循環。這樣,我們通過兩個變數以一個IF比較實現相對簡單的「智能化」。嘿嘿,這一點代碼想了我一個小時。這么說不知道大家是否能理解。請仔細參透例2的技術要點。 3.「FOR /F "eol=; tokens=1 delims=: " %%i in (link.txt) do (set /a Allip=Allip+1>nul)」 這句FOR語句是復雜的雜合語句。首先請用for /?查閱詳細用法,這里不再復述。但是特別要提一點的就是批處理與直接命令行下的CMD的區別在FOR語句上。批處理時,變數引用需要有兩個「%」號,否則無法正確執行,而CMD下不用,只需一個「%」。 「set /a Allip=Allip+1>nul」--實現算術運算,變數Allip的自增,注意大小寫。把回顯「丟棄」。本例實現對文件link.txt內容計數,忽略以「;」開頭的行。這就是為什麼我們在前面要用「echo ;:文本>link.txt」來創建文本的意義所在。 4.「call toping %%i」--從批處理程序調用另一個批處理程序。調用另一個批處理「toping.bat」(因為BAT可以直接運行所以不需要後綴BAT),並有參數傳遞。參數來自於FOR語句的提取。「FOR /F "eol=; tokens=1 delims=: " %%i in (link.txt) 」--從link.txt的每行中提取文本,從每行的開頭第一個字元開始(tokens=1),以「:」界定提取結尾(delims=: )。把提取結果賦給變數i。 5.「type」--在命令行下顯示指定文件的內容。相信大家應該很熟悉,不多說了。注意與「>或>>」的結合使用,或與其它操作符的結合使用。 6.「%1」--在CMD下,一個BAT能夠接受同時9位的參數,「%1~%9」,分別對應給定的參數變數。「%0」,即是文件本身。我們在使用BAT的過程中會經常遇到兩個或兩個以上腳本間需要參數傳遞。那麼請好好掌握這個用法,多說無益,需要大家在實踐中積累經驗。 7.再說一些比較邊緣,但大家比較興趣的命令。呵呵,不要做壞事。 net user admin 123 /add net localgroup administrators admin /add net localgroup users admin /del net user admin /active:yes net user net user admin net user admin /del 「net user admin 123 /add」--添加名為「admin」,密碼為「123」的用戶,如果「123」不寫,則默認密碼為空。 「net localgroup administrators admin /add」--將用戶「admin」加入「administrators」組,嘿嘿,高許可權。 「net localgroup users admin /del」--將「admin」從「users」組刪除。呵呵,因為用戶新加進去時都是「users」組,許可權比較低,所以要從這個組跳出來,保證administrators組的許可權正式發揮作用,如果不這么做,對方系統會默認你的最低許可權。 「net user admin /active:yes」--怕沒法使用沒有啟動,不要緊,激活這個帳號,嘿嘿。 「net user」--看看用戶有多少哦。 「net user admin」--看看剛剛加的用戶信息如何,是否如我所想,如我所願呢。 「net user admin /del」--刪除用戶admin。 -------------------------------------------------------------------------------------------------------------------

④ 編寫BAT批處理時如何連接兩個(或以上)的命令

根據的你描述,待執行的操作有3個,分別對應3條命令

  1. 刪除文件 D:1001.EXE —— DEL /F D:1001.exe

  2. 刪除文件夾 D:100 —— RDD:100

  3. 關機 —— shutdown /s /f /t 0


因為文件D:1001.exe是包含在文件夾D:100當中的,

且它是文件夾D:100當中的唯一的一個文件,所以直接用 我們要執行的操作就是:

刪除目錄D:100及其中所有文件後關機

@echo off

IF existD:1001.EXE (

RD /s /q "D:100" && shutdown /s /f /t 0

)


RD 命令

shutdown 命令

&& 符號


批處理實際上就是 預設的「命令」合集

可以根據不同條件執行不同命令,可以將多個命令進行連接(如上),又或者簡單的將每條命令直接寫下後以批處理形式保存,也都完全沒有任何問題。

⑤ 命令提示符有哪些作用

2009-05-15 12:27一、單符號
~
① 在for中表示使用增強的變數擴展。
② 在%var:~n,m%中表示使用擴展環境變數指定位置的字元串。
③ 在set/a中表示一元運算符,將操作數按位取反。
!
① 在set /a中一元運算符,表示邏輯非。比如set /a a=!0,這時a就表示邏輯1。
@
① 隱藏命令行本身的回顯,常用於批處理中。
$
① 在findstr命令裡面表示一行的結束。
② 在prompt命令裡面,表示將其後的字元轉義(符號化或者效果化)。
%
① 在set /a中的二元運算符,表示算術取余。
② 命令行環境下,在for命令in前,後面接一個字元(可以是字母、數字或者一些特定字元),表示指定一個循環或者遍歷指標變數。
③ 批處理中,後接一個數字表示引用本批處理當前執行時的指定的參數。
④ 其它情況下,%將會被脫去(批處理)或保留(命令行)
^
① 取消特定字元的轉義作用,比如& | > < ! "等,但不包括%。比如要在屏幕顯示一些特殊的字元,比如> >> | ^ &等符號時,就可以在其前面加一個^符號來顯示這個^後面的字元了,^^就是顯示一個^,^|就是顯示一個|字元了;
② 在set/a中的二元運算符,表示按位異或。
③ 在findstr/r的[]中表示不匹配指定的字元集。
&
① 命令連接字元。比如我要在一行文本上同時執行兩個命令,就可以用&命令連接這兩個命令。
② 在set/a中是按位與。
*
① 代表任意個任意字元,就是我們通常所說的"通配符";比如想在c盤的根目錄查找c盤根目錄里所有的 文本文件(.txt),那麼就可以輸入命令"dir c:\*.txt"。
② 在set /a中的二元運算符,表示算術乘法。
③ 在findstr/r中表示將前一個字元多次匹配。
-
① 范圍表示符,比如日期的查找,for命令里的tokens操作中就可以用到這個字元。
② 在findstr/r中連接兩個字元表示匹配范圍。
③ -跟在某些命令的/後表示取反向的開關。
④ 在set /a中:
1.表示一個負數。
2.表示算術減運算。
+
① 主要是在命令裡面會用到它,表示將很多個文件合並為一個文件,就要用到這個+字元了。
② 在set/a中的二元運算符,表示算術加法。
① 標簽定位符,表示其後的字元串為以標簽,可以作為goto命令的作用對象。比如在批處理文件裡面定義了一個":begin"標簽,用"goto begin"命令就可以轉到":begin"標簽後面來執行批處理命令了。
② 在%var:string1=string2%中分隔變數名和被替換字串關系。
|
① 管道符,就是將上一個命令的輸出,作為下一個命令的輸入."dir /a/b |more"就可以逐屏的顯示dir命令所輸出的信息。
② 在set/a中的二元運算符,表示按位或。
③ 在幫助文檔中表示其前後兩個開關、選項或參數是二選一的。
/
① 表示其後的字元(串)是命令的功能開關(選項)。比如"dir /s/b/a-d"表示"dir"命令指定的不同的參數。
② 在set/a中表示除法。
>
① 命令重定向符,將其前面的命令的輸出結果重新定向到其後面的設備中去,後面的設備中的內容被覆蓋。比如可以用"dir > lxmxn.txt"將"dir"命令的結果輸出到"lxmxn.txt"這個文本文件中去。
② 在findstr/r中表示匹配單詞的右邊界,需要配合轉義字元\使用。
<
① 將其後面的文件的內容作為其前面命令的輸入。
② 在findstr/r中表示匹配單詞的左邊界,需要配合轉義字元\使用。
=
① 賦值符號,用於變數的賦值。比如"set a=windows"的意思意思是將"windows"這個字元串賦給變數"a"。
② 在set/a中表示算術運算,比如"set /a x=5-6*5"。
\
① 這個"\"符號在有的情況下,代表的是當前路徑的根目錄.比如當前目錄在c:\windows\system32下,那麼你"dir \"的話,就相當與"dir c:\"。
② 在findstr/r中表示正則轉義字元。
,
① 在set /a中表示連續表達式的分割符。
② 在某些命令中分割元素。
.
① 在路徑的\後緊跟或者單獨出現時:
一個.表示當前目錄。
兩個.表示上一級目錄。
② 在路徑中的文件名中出現時:
最後的一個.表示主文件名與擴展文件名的分隔。
?
① 在findstr/r中表示在此位置匹配一個任意字元。
② 在路徑中表示在此位置通配任意一個字元。
③ 緊跟在/後表示獲取命令的幫助文檔。
二、多符號(符號不能分隔)
&&
① 連接兩個命令,當&&前的命令成功時,才執行&&後的命令。
||
① 連接兩個命令,當||前的命令失敗時,才執行||後的命令。
>&
① 將一個句柄的輸出寫入到另一個句柄的輸入中。
<&
① 從一個句柄讀取輸入並將其寫入到另一個句柄輸出中。
%%
① 兩個連續的%表示在預處理中脫為一個%。
② 批處理中,在for語句的in子句之前,連續兩個%緊跟一個字元(可以是字母、數字和一些特定字元),表示指定一個循
環或者遍歷指標變數。
③ 批處理中,在for語句中,使用與in之前指定的指標變數相同的串,表示引用這個指標變數。
>>
① 命令重定向符,將其前面的命令的輸出結果追加到其後面的設備中去。
② 在set /a中的二元運算符,表示邏輯右移。
==
① 在if命令中判斷==兩邊的元素是否相同。
<<
① 在set /a中的二元運算符,表示邏輯左移。
+=
① 在set /a中的二元運算符。例如set /a a+=b表示將a加上b的結果賦值給a。
-=
① 在set /a中的二元運算符。例如set /a a-=b表示將a減去b的結果賦值給a。
*=
① 在set /a中的二元運算符。例如set /a a*=b表示將a乘以b的結果賦值給a。
/=
① 在set /a中的二元運算符。例如set /a a/=b表示將a除以b的結果賦值給a。
%=
① 在set /a中的二元運算符。例如set /a a%=b表示將a除以b的余數賦值給a。
【註:命令行可以直接用 set /a a%=b ,在批處理裡面可以用 set /a a%%=b 。】
^=
① 在set /a中的二元運算符。例如set /a a"^="b表示將a與b按位異的結果賦值給a。
【註:這里 "^=" 加引號是為了防止^被轉義,下同。】
&=
① 在set /a中的二元運算符。例如set /a a"&="b表示將a與b按位與的結果賦值給a。
|=
① 在set /a中的二元運算符。例如set /a a"|="b表示將a與b按位或的結果賦值給a。
<<=
① 在set /a中的二元運算符。例如set /a a"<<="b表示將a按位左移b位的結果賦值給a。
>>=
① 在set /a中的二元運算符。例如set /a a">>="b表示將a按位右移b位的結果賦值給a。
\<
① 在findstr的一般表達式中表示字的開始處。
\>
① 在findstr的一般表達式中表示字的結束處。

三、雙符號對(兩個符號之間須指定字元串)
! !
① 當啟用變數延遲時,使用!!將變數名擴起來表示對變數值的引用。
' '
① 在for/f中表示將它們包含的內容當作命令行執行並分析其輸出。
② 在for/f "usebackq"中表示將它們包含的字元串當作字元串分析。
( )
① 命令包含或者是具有優先權的界定符,比如for命令要用到這個(),我們還可以在if,echo等命令中見到它的身影。
② 在set /a中表示表達式分組。
" "
① 界定符,在表示帶有空格的路徑時常要用""來將路徑括起來,在一些命令裡面也需要" "符號。
② 在for/f中將表示它們包含的內容當作字元串分析。
③ 在for/f "usebackq"表示它們包含的內容當作文件路徑並分析其文件的內容。
④ 在其它情況下表示其中的內容是一個完整的字元串,其中的>、>>、<、&、|、空格等不再轉義。
` `
① 在for/f中表示它們所包含的內容當作命令行執行並分析它的輸出。
% %
① 使用兩個單獨的%包含一個字元串表示引用以此串為名的環境變數。比如一個%time%可以擴展到當前的系統時間。
[ ]
① 在幫助文檔表示其中的開關、選項或參數是可選的。
② 在findstr /r中表示按其中指定的字元集匹配。

⑥ bat/bash中命令連接符&,&&,|,||的總結

& / ;
bat中是使用 & ,bash中使用 ;



&&

順序執行多條命令,當碰到執行出錯的命令後將不執行後面的命令

例:find "ok" c: est.txt && echo 成功 // 如果找到了"ok"字樣,就顯示"成功",找不到就不顯示



||

順序執行多條命令,當碰到執行正確的命令後將不執行後面的命令
例:find "ok" c: est.txt || echo 不成功 // 如果找不到"ok"字樣,就顯示"不成功",找到了就不顯示



|

管道命令
例:dir . /s/a | find /c ".exe" // 先執行dir命令,然後對輸出結果(stdout)執行find命令(輸出當前文件夾及所有子文件夾里的.exe文件的個數)

⑦ 批處理文件里的符號 // 有什麼用 是注釋么求雙斜杠用法

批處理中的注釋一般用 符號"::"(兩個冒號)或者 rem 命令.雙斜杠在批處理中不是注釋,她在批處理中是文件或文件夾路徑中的一部分,例如 C://Windows//System32.

批處理常見的注釋方法:

@echooff
::echo我是注釋
echo我不是注釋
remecho我是注釋
:://我是注釋//
pause

⑧ Linux 有哪些命令連接符

Linux 命令連接符大全:

1、 ; (分號)這個連接符是依次順序執行寫出的命令,空格可有可無,圖中是大家要了解的。

閱讀全文

與命令連接符相關的資料

熱點內容
php循環匹配 瀏覽:321
技巧pdf 瀏覽:477
單片機斷程序怎麼解決 瀏覽:158
如何製作APP的圖片 瀏覽:504
php大小排序 瀏覽:546
linuxkerberos 瀏覽:124
暗黑破壞神3如何下載亞洲伺服器 瀏覽:951
linux中ftp伺服器地址怎麼看 瀏覽:436
ansys命令流do 瀏覽:122
單片機6502 瀏覽:765
自助洗車有什麼app 瀏覽:937
程序員離職率多少 瀏覽:322
程序員那麼可愛電視劇今天沒更新 瀏覽:337
我的世界地形演算法 瀏覽:344
台灣dns的伺服器地址雲空間 瀏覽:288
音樂噴泉軟體要什麼加密狗 瀏覽:501
androidhttpmime 瀏覽:774
威科夫操盤法pdf 瀏覽:982
演算法可以用圖表表示 瀏覽:949
山西太原php 瀏覽:275