命令提示字元 08:進階指令

這章是來把一些指令說一說,如第一個:

subst

就是把某個目錄掛載成新的磁碟代號,實作如:

subst P: C:\Users

把 C:\Users 掛到 P 槽,可以去我的電腦看看多了一個 P 槽。而刪除是:

subst P: /D

這個指令有什麼用?這是一開始學命令例會想來炫的指令,但用多了就會知道不好用。最大的問題在於重開機後就不見了,還要搞才會出現,很麻煩。但有時候還是會看到,拿來炫也不錯,所以就擺在教學中。



下一個是百聞不如一見的「find」:

find

假設有一個 Test.txt :

type Test.txt

對它找「not」:

find "not" Test.txt

或顯示有幾行:

find /c "not" Test.txt

或顯示不存在的那幾行:

find /v "not" Test.txt

其它參數可以玩看看,在這裡就不再多做解釋。



什麼?「find」沒了,那前一章說這麼多是要作什麼?來看看這個指令就知道了:

mountvol

這個指令它要作什麼不重要,重要是在下面。有沒有看到它列出所有目前可用的磁碟代號?這時只要加上管線命令:

mountvol | find ":\"

就可以列出目前的磁碟代號,再加上「for」就更好用了。



下一個要說的是「start」,呃,這個不好說明,還是先來看說明吧:

start

耶,好長,還是先來說它的作用好了。「start」是用來執行另外一個程式的,如 .exe 、 .cmd ,實作如下:

start notepad.exe

這樣開有什麼意義呢?像這樣也可以啊:

notepad.exe

那來試看看這個:

start ping -t Google.com

看到差異了吧?「start」會再開一個新的視窗去執行,為什麼要有這個指令?因為有些程式執行時會占據整個命令列,但設計時為了要讓批次檔繼續執行,所以才需要「start」讓這個程式開一個新的視窗去執行。但是像記事本這種一開始就不是為命令列而活,所以不論有沒有「start」都沒差。

「start」還有很多東西可以說,如果什麼參數都不加,如:

start

它開一個新視窗,這是「start」的基本功能,但沒有人在意,大家都用來執行程式比較多。如果再加:

start "Test" /d C:\

它會開新的一個視窗,標題和路徑都變了:


接下來看程序優先類別,其實就是工作管理員中的「設定優先順序」:

start /low notepad.exe

可以用的就是那串 [/LOW | /NORMAL | /HIGH | /REALTIME | /ABOVENORMAL | /BELOWNORMAL] 啦,這應該不用再多作解釋了。另外參數「/affinity」也會用到:

start /affinity 2 notepad.exe

其實就是工作管理員中的「設定親合性」,白話(其實是中文)就是指限制執行緒在哪個中央處理器執行。這個指令要注意,它是用十六進位表示,「11111111」表示第八核到第一核全開,「00001110」表示開第四核、第三核和第二核。實際下時再轉成十六進位即可。最後也是最重要的「/wait」:

start /wait ping -t Google.com

來跟「start ping -t Google.com」比較:「start ping -t Google.com」的原視窗會出現下一行可以繼續輸入指令,但「start /wait ping -t Google.com」不會,直到關閉新開的 ping 。這就是「/wait」的作用,不管下的指令是不是符合命令列的,參數「/wait」都會等到指定的程序結束後才會繼續執行。



來個「start」結論:

不是為命令列設計的(如記事本),有沒有使用「start」都會繼續執行,但加了「/wait」之後等到程序結束。

為命令列設計的(如 ping ),完全不用「start」或加了「/wait」結果都一樣,但只用「start」會繼續執行。

好累喔,但還沒完。「start」有一個很奇怪的臭蟲,就是參數太多時它會判斷錯誤,目前程式設計師研究出來的方法是不論要作什麼都用「start ""」開始。



所以:

要執行程式並不等結果,開頭請以:

start "" command

要執行程式並等結果,開頭請以:

start "" /wait command

當然,「command」就是要執行的程式和參數。



「start」是常用且重要的指令,上面的那些其實都不重要,所以加上「start」來增版面。這章就可以看到難度了。其實也沒那麼難懂,只是不那麼熟悉,因為平常都是點二下執行,根本沒想那麼多。事實上大部份都是直接用最下面的結論來下,也沒有想那麼多。但下一章開始進入所謂的正題了,非常重要。



下一章:條件判斷




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

23 則留言:

  1. 請問版主:
    為什麼我打type Test.txt 結果是它的內容,而版主出現的是
    This is a test
    this is not a test
    ……
    而我打 find "not" test.txt 只出現
    ------------TEST.TXT 沒有出現 This is not a test.
    我打 find /v "not" Test.txt 只出現的是它的內容。
    謝謝版主!

    回覆刪除
    回覆
    1. 要先用記事本先建一個 Test.txt 的檔案
      檔案內容是:
      This is a test.
      This is not a test.
      This can be a test.
      This may be a test.

      刪除
  2. 請問版主
    為什麼我建立了test.txt
    也輸入了內容
    也存檔了
    但為何我輸入type test.txt沒顯示裡面的內容?

    回覆刪除
    回覆
    1. 請確定檔案總管的目錄和命令提示字元的目錄是相同的
      因為預設命令提示字元的目錄不會是桌面

      刪除
    2. oops 發現問題點了
      謝謝版主^_^

      刪除
  3. 請問版主

    之前用
    start /max excel.exe
    寫一個簡單的批次檔

    是可以直接跳出,
    另一個2013 excel,沒問題
    可以,很方便作業

    但【有巨集 DDE 時】,就會有衝突現象

    而用 (手動)
    1.執行 Win鍵+R
    2.執行 excel /x
    【有巨集 DDE 時】,就不會有衝突現象

    請問 兩者方式,有何差異

    可以請問

    1.執行 Win鍵+R
    2.執行 excel /x

    要 如何 撰寫
    可否 幫忙解決,感謝~~

    回覆刪除
    回覆
    1. 衝突是...可以再多說明一點嗎?
      感覺是同時開二個 Excel 的問題
      可以試看看 start "" /wait excel.exe

      刪除
    2. 我在猜應該是你不希望 EXCEL 同時執行吧

      如果是這樣,應該是
      start "" /wait /max excel.exe /x 第一個巨集.vbs
      start "" /wait /max excel.exe /x 第二個巨集.vbs

      你會發現在第一個 excel.exe 尚未結束前不會跑出第二個巨集

      刪除
    3. 感謝~~

      是的 補充說明一下

      是同時開二個 Excel 的問題

      第一個
      正常開Excel檔,有巨集在偵測作業

      開二個 Excel檔 時

      用這
      start /max excel.exe

      start "" /wait excel.exe

      一開檔,
      還沒叫出檔名開起
      第一個Excel檔,
      就有 巨集 作業,出現偵測衝突的現象

      ************************
      而用 手動方式

      1.執行 Win鍵+R
      2.執行 excel /x (就 OK)
      ************************

      懇請 大大
      幫忙 解惑

      刪除
    4. 所以你的意思是說,你想要同時執行二個 excel.exe 不關閉

      如果不使用 start /max 呢?
      會不會就沒有問題了?

      刪除
    5. 因為 之前
      用二個 2003 excel是OK的
      開二個 2003 excel都可以是 獨立視窗

      而 升級到 2013
      網上
      是說 可以獨立
      2010 才會有問題

      本人一開 2013 excel
      到第二個 2013 excel 就出現問題

      所以 才想辦法 克服

      ************************
      目前
      是用手動方式
      1.執行 Win鍵+R
      2.執行 excel /x (處理)
      ************************

      不了解您
      所說的不使用 start /max
      是??? 如何運用

      3Q

      刪除
    6. 我目己是用 Office 2016
      執行(連續二行,或是同一個 .cmd 檔案內)
      start "" /max excel
      start "" /max excel
      會跑二個獨立的視窗

      可以試看看
      執行(連續二行,或是同一個 .cmd 檔案內)
      excel
      excel
      因為這個動作和 Win+R 是一樣的

      可以多試組合看看
      因為試了不會壞

      刪除
    7. 補充 訴求 是
      1.要開二個 2013 excel

      2.二個 2013 excel

      各開各的檔案,各跑各的巨集運作

      A.檔案 跑訊號 策略
      B.檔案 跑下單 交易

      刪除
    8. 那可以試看看不要使用 start
      執行連續二行,或是同一個 .cmd 檔案內
      excel /x
      excel /x
      這個動作和 Win+R 是一樣的
      或許可以解決問題

      刪除
    9. 修正 訴求
      應該是 能獨立的開啟excel為主

      start "" /wait excel.exe /x
      start /wait excel.exe /x

      這兩組都可以...

      bat檔
      會同時開啟 2個視窗
      1個是 cmd
      1個是 excel
      那 要如何可以將 cmd 再關閉呢??
      或不開啟??

      感謝~~

      刪除
    10. start "" /wait 會比較好

      而此時 CMD 的畫面沒有辦法弄消失
      因為是 cmd.exe 在等待 excel.exe 消失

      如果真的存心要看不到那個黑色視窗
      可以一開始就讓他消失
      用像這樣的工具
      http://www.f2ko.de/en/b2e.php
      點二時就不顯示黑色視窗

      最後讓我詢問一件事
      所以最後決定是先開第一個 Excel ,讓使用者關閉後自動再開一個新的
      是這樣嗎?

      刪除
    11. 是要開二個 2013 excel

      各開各的檔案,各跑各的巨集運作(能獨立的開啟excel為主)

      A.檔案 跑訊號 策略
      B.檔案 跑下單 交易

      刪除
    12. 那試看看
      cmd /c excel.exe -x
      cmd /c excel.exe -x
      也許可以解決問題

      刪除
    13. 不行耶~~

      不過 以上面的方式 已經OK了
      黑色視窗 也可以解決
      感恩

      刪除
    14. 那我也不知道要怎麼辦
      試看看等個 10 秒
      cmd /c excel.exe -x
      timeout 10
      cmd /c excel.exe -x
      也許是這個問題?

      刪除

定時會整理。