Batch Script (2) - Viblo
Có thể bạn quan tâm
Tiếp tục bài viết về Batch script này.
Cú phápString
Tạo string
Khởi tạo string trong dos
@echo off :: This program just displays Hello World set message=Hello World echo %message%Đoạn code này sẽ in ra Hello World
Empty String
Để kiểm tra 1 string empty hay không, chúng ta dùng [%a%]==[]
@echo off SET a= SET b=Hello if [%a%]==[] echo "String A is empty" if [%b%]==[] echo "String B is empty "Đoạn trên sẽ in ra String A is empty
Nối string
@echo off SET a=Hello SET b=World SET /A d=50 SET c=%a% and %b% %d% echo %c%Kết quả là Hello and World 50
Độ dài string
Hihi, đáng tiếc là cũng không có hàm tính độ dài string, thế nên là làm thủ công thôi
@echo off set str=Hello World call :strLen str strlen echo String is %strlen% characters long exit /b :strLen setlocal enabledelayedexpansion :strLen_Loop if not "!%1:~%len%!"=="" set /A len+=1 & goto :strLen_Loop (endlocal & set %2=%len%) goto :eofKết quả là 11 nhé
Ép kiểu toInt
@echo off set var=13145 set /A var=%var% + 5 echo %var%Kết quả là 13150
Left String
@echo off set str=Helloworld echo %str% set str=%str:~0,5% echo %str%Kết quả của ví dụ trên là
Helloworld HelloTức là chúng ta sẽ lấy 5 ký tự tiếp theo bắt đầu từ ký tự đầu tiên (vị trí thứ 0)
Right string
@echo off set str=This message needs changed. echo %str% set str=%str:~-8% echo %str%Tương tự left string, đoạn ví dụ right string trên sẽ lấy 8 ký tự tính từ vị trí cuối cùng bên phải sang trái.
This message needs changed. changed.remove
@echo off set str=Batch scripts is easy. It is really easy. echo %str% set str=%str:is=% echo %str%Kết quả là
Batch scripts is easy. It is really easy. Batch scripts easy. It really easy.Tức là từ is sẽ bị loại bỏ khỏi string bằng lệnh :is
Remove đầu và cuối string
@echo off set str=Batch scripts is easy. It is really easy echo %str% set str=%str:~1,-1% echo %str%Đoạn script trên sẽ loại bỏ ký tự đầu tiên và ký tự cuối cùng của string, kết quả là
Batch scripts is easy. It is really easy atch scripts is easy. It is really easXóa tất cả space
@echo off set str=This string has a lot of spaces echo %str% set str=%str:=% echo %str%Kết quả là Thisstringhasalotofspaces
Repalce một string
@echo off set str=This message needs changed. echo %str% set str=%str:needs=has% echo %str%Kết quả là
This message needs changed. This message has changed.Các phép tính toán
Toán tử số học
+ - * / % giống các ngôn ngữ khác, lần lượt ta có các phép cộng, trừ, nhân, chia, và chia lấy phần dư.
Toán tử quan hệ
- EQU So sánh bằng nhau, 2 obj bằng nhau trả về true.
- NEQ so sánh khác nhau, 2 obj khác nhau trả về true.
- LSS so sánh kém, ví dụ 2 LSS 3 trả về true.
- LEQ so sánh kém hoặc bằng.
- GTR so sánh hơn, ví dụ 3 GTR 2 trả về true.
- GEQ so sánh hơn hoặc bằng. Ví dụ:
Kết quả là:
A is not equal to than B A is less than B A is less than or equal BToán tử logic
Có các phép toán and, or và not tương tự các ngôn ngữ khác.
Phép gán
- += cộng toán hạng bên phải vào toán hạng bên trái và gán giá trị nhận được vào toán hạng bên trái.
- -= trừ toán hạng bên trái cho toán hạng bên phải và gán giá trị nhận được vào toán hạng bên trái.
- *= tương tự với phép nhân
- /= tương tự với phép chia
- %= tương tự với phép chia lấy phần dư Ví dụ:
Kết quả là
10 5 25 5 5Toán tử Bitwise
- &: toán tử `and
- |: toán tử or
- ^: toán tử xor Ví dụ:
Kết quả là:
16 16 16Cấu trúc rẽ nhánh
if
if(condition) do_somethingNếu condition đúng thì sẽ thực hiện do_something, nếu ngược lại thì thực hiện câu lệnh tiếp theo, bỏ qua do_something
@echo off SET /A a=5 SET /A b=10 SET /A c=%a% + %b% if %c%==15 echo "The value of variable c is 15" if %c%==10 echo "The value of variable c is 10"Kết quả là 15
if else
If (condition) (do_something) ELSE (do_something_else)Nếu condition đúng thì thực hiện do_something, ngược lại nếu sai thì thực hiện do_something_else sau đó thực hiện các câu lệnh tiếp theo.
@echo off SET /A a=5 SET /A b=10 SET /A c=%a% + %b% if %c%==15 (echo "The value of variable c is 15") else (echo "Unknown value") if %c%==10 (echo "The value of variable c is 10") else (echo "Unknown value")Kết quả trả về là
"The value of variable c is 15" "Unknown value"If lồng nhau
if(condition1) if (condition2) do_somethingNếu condition1 và condition2 đều đúng thì sẽ thực hiện do_something, nếu không sẽ bỏ qua
@echo off SET /A a=5 SET /A b=10 if %a%==5 if %b%==10 echo "The value of the variables are correct"Kết quả là
"The value of the variables are correct"If errorlevel
if errorlevel n somecommandtrước câu lệnh trên là 1 câu lệnh khác, mà câu lệnh đó bị lỗi trả về 1 error code là interger n thì somecommand sẽ được thực hiện.
Goto
:label ...some commands if (condition) goto :label- :label khai báo nhãn tên là label, nhãn này chứa các lệnh sẽ được thực thi khi gọi label.
- Nếu condition đúng, các lệnh trong label sẽ được thực hiện ví dụ
Kết quả là
"The value of a is 5" "The value of a is 10"Input / Output
- stdin: Standard In - chứa input của program/script.
- stdout: Standard Out - thường là output của program/script được in trên màn hình.
- stderr: Standard Err - thường là thông điệp của lỗi được in trên màn hình.
Chuyển hướng đầu ra
Toán tử > sẽ chuyển hướng/gửi kết quả (stdout/stderr) của lệnh ra file.
Dir C:\ > list.txtstdout của lệnh Dir C:\ được ghi trong file list.txt.
Dir C:\ 2> list.txtNếu thêm 2 vào câu lệnh trên, thì nếu Dir C:\ trả ra lỗi thì thông điệp về lỗi này sẽ được lưu ở file list.txt, thử ví dụ bằng câu lệnh Dir Z:\ với Z là tên ổ đĩa mà máy tính của bạn không có, file list.txt sẽ có dòng chữ The system cannot find the path specified.
Ngắt kết quả chương trình
Dir C:\ > NULNém kết quả lệnh Dir C:\ vào hư vô, không được xuất hiện ra màn hình hay file nào cả.
stdin
TYPE CON > lists.txtSau câu lệnh trên thì tất cả những gì bạn gõ trên cmd đều được lưu vào trong file lists.txt
Vòng lặp
while
Không có vòng while trong thứ này, đúng là như thế đó. Thay vào đó, chúng ta tự viết 1 ra 1 thứ tương tự nó, dùng if và label
Set counters :label If (expression) ( Do_something Increment counter Go back to :label )Ví dụ:
@echo off SET /A "index=1" SET /A "count=5" :while if %index% leq %count% ( echo The value of index is %index% SET /A "index=index + 1" goto :while )Kết quả
The value of index is 1 The value of index is 2 The value of index is 3 The value of index is 4 The value of index is 5for
Ví dụ
@echo off FOR %%F IN (1 2 3 4 5) DO echo %%FKết quả
1 2 3 4 5Classic for
Tại sao lại là classic for, bởi vì vòng for vừa giới thiệu là vòng lặp trong 1 list, trong khi vòng for chúng ta vẫn hay cần dùng lại là như thế này:
for(variable declaration;expression;Increment) { statement #1 statement #2 … }Giờ làm sao? lại phải tự viết thôi. Ví dụ:
@echo off SET /A i=1 :loop IF %i%==5 GOTO END echo The value of i is %i% SET /a i=%i%+1 GOTO :LOOP :ENDKết quả là
The value of i is 1 The value of i is 2 The value of i is 3 The value of i is 4Vòng lặp trong 1 khoảng
FOR /L %%variable IN (lowerlimit,Increment,Upperlimit) DO do_somethingVí dụ:
@ECHO OFF FOR /L %%X IN (0,1,5) DO ECHO %%XKết quả:
0 1 2 3 4 5Ở đây vòng lặp sẽ chạy từ 0 tới 5, với bước nhảy là 1.
Break vòng lặp
Hehe, lại đáng tiếc lần nữa là không có lệnh break, chúng ta lại phải tự làm lấy 1 cái bằng if và label. Ví dụ
@echo off SET /A "index=1" SET /A "count=5" :while if %index% leq %count% ( if %index%==2 goto :Increment echo The value of index is %index% :Increment SET /A "index=index + 1" goto :while )Ở đây chúng ta có 1 vòng lặp while giả mà được nói ở trên
, chúng ta muốn break ở chỗ index = 2 thì dùng if như trên, nó sẽ goto luôn tới label increment và bỏ qua lệnh echo. Kết quả:
Function
Ở trên chúng ta đã dùng rất nhiều label, cũng có thể gọi đó là function. Trong batch script thì chúng ta tạo 1 function như thế này:
:function_name Do_something EXIT /B 0Và khi gọi function thì dùng như thế này:
@echo off SETLOCAL CALL :Display EXIT /B %ERRORLEVEL% :Display SET /A index=2 echo The value of index is %index% EXIT /B 0Kết quả là The value of index is 2
Return Code
Mặc định khi 1 command line sau khi được thực hiện thành công thì sẽ trả về 0, còn nếu khác 0 thì đương nhiên là bị lỗi rồi.
| Code | Giải thích |
|---|---|
| 0 | Thành công |
| 1 | Function không chính xác. Có thể không được nhận ra đúng function có trong batch |
| 2 | Hệ thống không thể tìm thấy các tập tin được chỉ định. Chỉ ra rằng tệp không thể tìm thấy ở vị trí được chỉ định |
| 3 | Hệ thống không thể tìm đường dẫn cụ thể. Chỉ ra rằng không thể tìm thấy đường dẫn được chỉ định. |
| 5 | Truy cập bị từ chối. Cho biết người dùng không có quyền truy cập vào tài nguyên được chỉ định. |
| 9009 0x2331 | Chỉ ra rằng lệnh, tên ứng dụng hoặc đường dẫn đã bị lỗi chính tả khi định cấu hình Action. |
| 221225495 0xC0000017 -1073741801 | Không đủ bộ nhớ ảo. Nó chỉ ra rằng Windows đã hết bộ nhớ. |
| 3221225786 0xC000013A -1073741510 | cmd bị ngắt bởi người dùng Ctrl C |
| 3221225794 0xC0000142 -1073741502 | Ứng dụng không thể khởi tạo đúng cách. Có thể do user không có quyền truy cập, gdi32.dll hoặc user32.dll bị lỗi |
- Còn rất nhiều thứ về cmd nữa, mọi người có thể vào đây để đọc tiếp.
- Khi viết table, gõ | xong ấn enter thì bị chuyển thành ký tự của emoticon, cứ phải ấn cách rồi mới enter được, rất là không tiện, khiến những người đến ngày như mình rất rễ bực mình.
- Sau khi xóa/cut ký tự nào đó để mà con trỏ chuột chạm vào dấu | thì không dùng phím điều hướng trên bàn phím được -_- (máy tính windows 10 chạy chrome)
Từ khóa » File Batch Dùng để Làm Gì
-
File .BAT Là Gì? Cách Tạo Và Sử Dụng File BAT Trên Máy Tính Windows
-
Hướng Dẫn Tạo Và Sử Dụng File BAT Trên Windows
-
Batch (ngôn Ngữ Lập Trình) – Wikipedia Tiếng Việt
-
Tìm Hiểu File Batch Trên Hệ điều Hành Windows - Thủ Thuật
-
Tìm Hiểu Về Batch Script - Các Lệnh Cơ Bản để Viết Script File - Góc Info
-
FILE .BAT LÀ GÌ? TẠO FILE BAT SỬA LỖI THÔNG DỤNG TỰ ĐỘNG
-
Hướng Dẫn Lập Trình Ngôn Ngữ Kịch Bản Batch Cho Người Mới Bắt đầu
-
Những Lệnh Cần Thiết để Tạo Ra Một File Lệnh .BAT, .CMD (batch)
-
Batch File Là Gì
-
BAT Là File Gì? Phần Mềm & Cách Mở File . BAT, Sửa File Lỗi
-
Batch Là Gì? Tìm Hiểu Thông Tin Cụ Thể Về Batch Trong Hệ điều Hành
-
Batch File Là Gì? - Từ điển CNTT
-
File .BAT Là Gì? Cách Tạo Và Sử Dụng File BAT Trên Máy Tính Windows