命令提示字元 07:符號總輯

這一章是最玄的一章,事實上這章是個人的經驗所組成的,網路上只能找到其中一項的解釋。另外因為這是經驗,所以很有可能會錯,但大致上是沒有錯的。這章事實上沒那麼難,但是很玄,之所以會擺在這裡是因為它很重要,但個別講很零散,所以集成一章,日後要查來這裡查就對了。



大小寫

首先要登場的是大小寫,命令提示字元對大小寫是沒差的,但 Linux-based 就差很大了。 Linux-based 視大小寫為相異,即大小寫是不同字。好險命令提示字元使用者不用擔心這種事,把它視為相同就可以了。



::

二個冒號,在標準美式鍵盤字母區「L」右鍵,使用時請加上變換鍵(Shift + ;)。這是用來註解的符號,即這行不會被判讀,跟 rem 的作用是一樣的。

:: echo i



-

一個減號,在標準美式鍵盤字母區第一排數字「0」右邊那一個鍵。這是在 Microsoft© Windows® XP 之前常用參數用的引字,但在後面的版本就改掉了,目前留有 ping 還看的到蹤跡。實際上用減的也是沒有問題,但在這裡還是要說微軟® 官方在之後的版本己經改掉了。

ping


/

一個右上到左下的一撇,在標準美式鍵盤字母區最下面一排最右邊那一個鍵。這是在 Microsoft© Windows® 7 之後常用參數用的引字,所有的說明都改掉了。另外這個字也是 Linux-based 中代表資料夾的符號,不要搞混了。

shutdown /?

有機會的人可以去看 Microsoft© Windows® XP ,它是用淢號。



\

一個左上到右下的一撇,在標準美式鍵盤字母區第二排最右邊那一個鍵。這是 Windows® 中代表資料夾的符號,也請不要跟上一個搞混了。如圖中所示:




. / ..

一個點和二個點,這個點在標準美式鍵盤上字母「M」右邊二鍵的地方。一個點的意義是指「這個資料夾」,二個點的意義是指「上一層資料夾」,所以「.\..\.\」就是指目前的資料夾。這樣解釋不懂的人還是不懂,用指令說吧:

cd .
cd ..

在切換到「.」之後不變,在切換到「..」之後就是到上一層資料夾,這樣了乎?另外也需要注意:


在這個資料夾有「.」和「..」,代表這個資料夾有這一層資料夾(廢話)和上一層資料夾,這在之前沒有辦法先說明,有注意到的人在這裡就先說聲抱歉。



?

這是一個問號,在標準美式鍵盤字母區最下面一排最右邊那一個鍵,使用時請加上變換鍵(Shift+/)。也許有人己經知道了,他是搜尋時代表一個不確定的字母。如「Te?t」可以是「Test」或「Text」等等。



*

這是一個米號,在標準美式鍵盤字母區數字「8」的地方,使用時請加上變換鍵(Shift+8)。也許有人己經知道了,他是搜尋時代表多個不確定的字母,在實務上這個字比較常用,如要簡易搜尋:

dir *.txt /s

會列出執行目錄下所有副檔名為「.txt」的檔案。



"

這是一個中文不會解釋的符號,在標準美式鍵盤字母區分號右邊,使用時請加上變換鍵(Shift+')。這個符號是用來包夾字串用的,如「Document and Settings」會被誤認為三個參數,加上符號就會視為一個參數了,這在 cd 己經有解釋了。



'

這是一個點,在標準美式鍵盤字母區分號右邊。這個字其實沒有實質意義,但有時候如「"Document "and" Settings"」會被誤認為「Document 」「and」「 Settings」,這時只要改成「"Document 'and' Settings"」就可以了。這要什麼時候用呢?不知道,但要用的時候不知道會很頭大。



%

這是一個百分比,在標準美式鍵盤字母區數字「5」的地方,使用時請加上變換鍵(Shift+5)。這個字是代表變數的意思,變數會再開二章來說,這裡知道它是變數就好了。



nul / null

這是英文單字。它代表是沒有東西。當有些東西不想要就可以使用這個字把它丟掉。



>

這是一個向右的鍵號,在標準美式鍵盤字母區最下面一排的地方點那個字,使用時請加上變換鍵(Shift+.)。這是代表標準輸出,使用這個符號可以把輸出到營幕上的字轉到想要的地方,如

echo This is a test. >Test.txt
type Test.txt

可以發現所有字都輸出到 Test.txt 了,另外也可以:

echo This is a test. >nul

會發現什麼都沒有。

另外有一件事要說一下,就是正確來說「echo This is a test. >nul」應該要是「echo This is a test.>nul」,但為了美觀所以個人選擇前者,有差在於,前者會多一個空白,有些時候會出問題。



>>

這是二個向右的鍵號。這是代表繼續寫入,一個箭號會覆蓋原本的檔案,二個箭號會接續下去寫入,可以試試

echo This is a test. >Test.txt
echo This is a test. >Test.txt



dir >>Test.txt
dir >>Test.txt

就可以發現差別了。



1> / 2>

數字加上上面剛說的箭號。輸出有分二種,一種是標準輸出,一種是標準錯誤輸出。標準輸出是「1>」,「1」可以省略,就變成上面那樣了。標準錯誤輸出「2>」是擔心有人把標準輸出輸出到外面,但執行時有重大錯誤需要注意,就用標準錯誤輸出作輸出,會用到標準錯誤輸出普通都是一定規模的程式,以下有個小範例:


可以注意到用標準輸出到 nul 還是有字出現,但使用標準錯誤輸出到 nul 時字就消失了。另外輸出可用二個,即「1>>」和「2>>」是有意義的。

如果有學過 C 的人就知道 printf() 就是輸出到 1> ,而 2> 就是 fprintf(stderr,"") 。



<

這是標準輸入,但本人沒有用過,但還是可以提供一些使用範例:

find "Test" < Test.txt



|

這叫做管線命令,在標準美式鍵盤字母區左右括弧右邊那一鍵,使用時請加上變換鍵(Shift+\)。管線命令是把標準輸出轉到另外一個程式,跟標準輸出不一樣的是這個是轉到另外一個程式,標準輸出轉到檔案。最常見的是用在「find」,這到了再說,但還是可以先提一下,上面「find "Test" < Test.txt」等同於:

type Test.txt | find "Test"



()

這是左右括弧,在標準美式鍵盤字母區「9」或「0」,使用時請加上變換鍵(Shift+9)(Shift+0)。這代表一個副程式,最常見的是用在「for」和「if」。



.bat / .cmd

這是附檔名。把要作的指令存成一個文字文件,讓它照文字文件中一行一行執行,這個文件就叫做「批次檔」(Batch File)。

先談一下歷史,DOS 是古老、單純的作業系統,後來被微軟© 併掉變成「MS-DOS」,而微軟© 就名正言順放入 Windows® 中。但 DOS 在 Windows® 中不是直接執行,而是被摸擬出來的,這也是為何 64 位元中竟然也有命令提示字元。那這跟這個主題有何關係呢?「.bat」是 DOS 在用的,「.cmd」是命令提示字元在用的, DOS 和命令提示字元很指令不一樣,當然很多老人轉不過來,把這些東西全部存成「.bat」,但這是不對的,需要被更正。

這樣談批次檔好像很不端正,但事實上現在學的東西也不知道能搞什麼,等到後面談到就更了解了。



^

這是一個箭頭,在標準美式鍵盤字母區數字「6」的地方,使用時請加上變換鍵(Shift+6)。這是跳脫字元,如在副程式中的管線符號:

("... | ...")


會被誤判,這時要改成:

("... ^| ...")


讓管線符號正確被送入。

很不負責任的說明!等到「for」就知道了。



@

這是一隻小老鼠,在標準美式鍵盤字母區數字「2」的地方,使用時請加上變換鍵(Shift+2)。初學者這個可以先跳過,因為後面會在解釋。它的作用是讓批次檔不要顯示這行執行內容,結果還是會顯示,等同於對這行做「echo off」。做法是放在指令的前面,如:

@dir



&&

這是二個「AND」,在標準美式鍵盤字母區數字「7」的地方,使用時請加上變換鍵(Shift+7)。這個符號是讓原本二行指令變成一行指令,因為很多場合沒有辦法用一行指令結束,但又只能用一行結束,所以這個符號就上場了。實際用法如下:

dir && echo Test




這章會讓人無言吧!但沒有辦法,因為很多符號現在沒有辦法解釋,而又不可能用到的時候再說,因為那樣太凌亂了,只好一股腦兒的全部說來。下一章開始會回到一章一堆指令的年代,但會默默的使用這章講的東西,到時候不懂再回來看應該就會懂了。



下一章:進階指令




  • 2012-09-11 初次發佈。
  • 2017-07-12 更新成 Windows 10 的版本。

7 則留言:

  1. 請問 nul / null
    我使用 set /p=Y<nul 可以用
    但是 使用 set /p=Y<null 它說 系統找不到指定檔案
    請問 null 使用時機 ?

    回覆刪除
  2. 在 Windows 中就只有 nul
    但英文單字中就有 null
    所以就寫進去了

    回覆刪除
  3. 有沒有辦法用">"或">>"一次把要換行的訊息寫進Test.txt呢?
    還是只能輸入完每一行後都用">>"來換行?

    回覆刪除
    回覆
    1. 請問一下要實作的上下行程式碼是什麼?

      如果是要輸出新的一行
      echo. 就可以了

      刪除
    2. 其實就類似像下一章的Test.txt裡面的文字

      有沒有辦法把
      This is a test.
      This is not a test.
      This can be a test.
      This may be a test.這種文字訊息用>輸出成文件並且換行呢?

      刪除
    3. > 是每一次都洗掉之前的內容
      >> 會接續檔案繼續寫入

      而上面的方法是
      echo This is a test. >>Test.txt
      echo This is not a test. >>Test.txt
      echo This can be a test. >>Test.txt
      echo This may be a test. >>Test.txt

      所以會在很多 .cmd 程式中看到一長串的 echo
      就是 echo 執行完一次會跳一行
      正確來說是送斷行字元

      刪除
  4. "這是一個中文不會解釋的符號" 哈哈哈哈

    那個是雙引號 下面那個是單引號

    回覆刪除

定時會整理。