這邊算是比較重點式的筆記
如果想要比較詳細的初學者教學 我推薦以下這篇
https://lnpcd.blogspot.tw/2012/09/00.html
基本指令
/? | 查詢各命令說明 |
dir | 顯示目錄資料夾 |
cls | 清除訊息 |
pause | 暫停畫面 |
exit | 離開 |
cd | 進入目標路徑 |
md | 創建目錄資料夾 |
rd | 移除目錄資料夾 (目錄中無任何檔案) |
del | 移除檔案 |
tasklist | 工作管理員 |
taskkill | 移除程序 |
type | 讀取檔案內容 |
echo | 印出/輸出訊息 |
echo on | 顯示輸入命令 |
echo off | 不顯示輸入命令 |
timeout | 等待 |
timeout /t 10 | 等候10秒 需要按任意鍵繼續 |
timeout /t 10 /nobreak | 等候10秒 不需要按任意鍵繼續 |
rem | 註解 |
:: | 註解 |
: | 標籤 |
. | 包含此資料夾 |
.. | 回到上一層資料夾 |
* | 配對任何字元 |
> | 輸入模式(覆蓋) |
>> | 輸入模式(附加) |
@ | 此行命令不顯示 |
&& | 同行內執行多道命令 |
find | 尋找目標字元 |
start | 開啟程式 |
流程控制/迴圈執行 (使用腳本)
set
@echo off
:: 設定a為變數
set a=5
echo %a%
:: 設定a為文字
set a=abc
echo %a%
:: 錯誤示範 a不為運算式後的結果
set a=1+2+3
echo %a%
:: 設定a和b為運算式後的結果
set /a a=(1+2+3)
echo %a%
set /a b=(5%%2)
echo %b%
:: 設定a為等待被輸入的參數
set /p a=
echo %a%
:: 暫停畫面
pause
Output:
1. 5
2. abc
3. 1+2+3
4. a=6 b=1 (5除2的餘數)
5. 輸入什麼就顯示什麼
if
@echo off
:: 判斷字串
set a=X
if %a%==X echo Y1
:: 判斷數值
set a=7
if %a%==7 echo Y2
:: 錯誤示範 判斷運算結果
if 6==1+2+3 (echo Y3) else (echo N3)
:: (包含附檔名)
if exist "set.bat" echo Y4
:: 否定判斷
if not 7==5 echo Y5
:: 大於小於等於
if 7 gtr 5 echo Y6
:: 不符合判斷的處理 (else) 一
if 7==5 (echo Y7) else (echo N7)
:: 不符合判斷的處理 (else) 二
if 7==5 (echo Y8
) else (echo N8)
:: 不符合判斷的處理 (else) 三
if 7==5 (
echo Y9
) else (
echo N9
)
:: 雙重判斷
if 5==5 (
if 7==5 (echo Y10) else (echo N10)
) else (
echo X
)
:: 暫停畫面
pause
Output:
1. Y1
2. Y2
3. N3
4. Y4
5. Y5
6. Y6
7. N7
8. N8
9. N9
10. N10
for
Output:
1. a b c
2. a b c
3. 1~10
4. 1-a 1-b ..... 3-b 3-c
other
advanced
@echo off
:: 輸出集合中的元素 一
for %%i in (a b c) do echo %%i
echo **********
:: 輸出集合中的元素 二
for %%i in (a b c) do (
echo %%i
)
echo **********
:: 輸出數列 /l + (開始,步數,結束)
for /l %%i in (1,1,10) do (echo %%i)
echo **********
:: 雙迴圈
for /l %%i in (1,1,3) do (
for %%j in (a b c) do (
echo %%i-%%j
)
)
:: 暫停畫面
pause
Output:
1. a b c
2. a b c
3. 1~10
4. 1-a 1-b ..... 3-b 3-c
other
:: 標記
:test
:: 傳遞參數 %0為腳本本身 (%1 %2 這裡為空)
echo %0 %1 %2
:: @ 此行不顯示
@ echo 1
:: 不顯示所有命令
echo off
echo 2
:: 不顯示此行命令也不顯示所有命令
@echo off
echo 3
@echo on
echo 4
:: 回到指定標記 (1回到開頭 0結束)
@echo off
echo (1) continue
echo (0) exit
set /p n=
if %n%==1 (
goto test
)
:: 暫停畫面
pause
advanced
@echo off
:: 注意迴圈內如何設定變數 (因為會立即性展開函式 所以使用!n! 延遲設定變數)
setlocal EnableDelayedExpansion
for /l %%i in (1,1,5) do (
for /l %%j in (1,1,5) do (
set /a n=%%i*%%j
echo !n!
)
echo ----------
)
:: 以字元a做分割 由於沒有指定tokens 所以只顯示到a之前
for /f "delims=a" %%i in (Test.txt) do echo %%i
echo **********
:: 檔案內第1行排除 且預設以空白做分割 所以只顯示到空白之前
for /f "skip=1" %%i in (Test.txt) do echo %%i
echo **********
:: 以空白做分隔 顯示第1,2,3個元素
for /f "tokens=1,2,3" %%i in (Test.txt) do echo %%i %%j %%k
echo **********
:: 以空白做分隔 顯示第1,2,3個元素(使用減號) 另外注意合併條件的寫法
for /f "tokens=1-3 skip=1" %%i in (Test.txt) do echo %%i%%j%%k
:: 暫停畫面
pause
Test.txt的內容為
This is a test
How are you
I am fine
Output:
2. This is / How / I (遇到a就斷掉)
3. How / I (跳過一行)
4. This is a / How are you / I am fine
5. Howareyou / Iamfine
return value (Python)
@echo off
:: 呼叫其他程式計算且顯示回傳結果
echo 輸入開始值:
set /p a=
echo 輸入結束值:
set /p b=
python show.py %a% %b%
:: python 運用exit()把結果傳回
set ans=%errorlevel%
echo 答案為 %ans%
:: 暫停畫面
pause
show.py
import os
import sys
sumX=0
#取得第1,2個參數
a=eval(sys.argv[1])
b=eval(sys.argv[2])+1
for i in range (a,b):
sumX+=i
exit(sumX)
Output:
輸入1和10 答案55 (計算a到b的總和)