Header Ads Widget

Ticker

6/recent/ticker-posts

Batch Script cơ bản cùng làm quen với ngôn ngữ hệ thống Windows

Batch script có khó không?

Không khó đâu bạn, chỉ vài dòng cơ bản bạn đã có thể tạo được một chương trình. Nó có thể làm được gì ư? Virus? Nghiêm túc đấy thời kỳ đầu nó được tạo ra đơn giản bằng cách này thôi. Qua thời gian ngày càng tinh vi hơn thì nó được thể hiện bằng nhiều ngôn ngữ khác nhau. Hầu hết virus được tạo ra với mục đích xấu nhưng cũng không ít virus được tạo ra nhằm giúp giải quyết nhiều công việc phức tạp mà bản thân quyền hạn của một số chương trình chưa làm được.
Batch script có chứa những dòng lệnh đơn giản nhưng mạnh mẽ, nếu kết hợp khéo léo những script với nhau vào một file thực thi có đuôi mở rộng là .cmd hay .bat (batch file) bạn có thể tạo nên một chương trình giúp ta làm được nhiều việc thú vị.


Cách viết một batch file

Bạn vẫn có thể tạo một chương trình bằng cách gõ từng lệnh lên command prompt rồi enter, nhưng chẳng ai rảnh làm như vậy cả, viết vào file thực thi rồi chạy file đó hay hơn. Vậy cần phải chuẩn bị công cụ nào hỗ trợ không? Không nhất thiết nhé, bản thân Windows đã có đủ những công cụ cần cho bạn, việc của bạn là bắt tay vào làm thôi. Bạn có thể viết qua trình Notepad mặc định của Windows, nhưng nếu muốn code dễ nhìn hơn bạn có thể sử dụng Notepad++ (riêng mình thì thích sử dụng Notepad Mod hơn)

1. Một chương trình đơn giản

code:
@echo off
title %~nx0
color 0e
mode con lines=18 cols=70
echo.
echo Hello World!
pause
exit
Ý nghĩa
Kết quả



Lưu ý: Nếu bạn không muốn hiện dòng "Press any key to continue . . ." bạn sửa lệnh pause thành pause >nul lúc này chỉ có dấu nhắc thay vì hiện dòng chữ như trên. Lệnh >nul bạn cũng có thể đặt phía sau các lệnh copy, rename, hay delete để ẩn thông báo, giúp giao diện dòng lệnh được gọn gàng hơn.



2. Đặt biến, nhập dữ liệu đầu vào

Trong một chương trình có những đại lượng thay đổi liên tục và được sử dụng trong các câu lệnh tiếp theo, để hạn chế thao tác, giúp ta tự động hóa nhiều quá trình liên tục batch script hỗ trợ đặt biến
set name= x (với x là số hoặc chuỗi)
set /a name= x (với x là số)

@echo off
set /a count= 1
set /a count= %count% + 5
echo the answer is %count%
pause>nul



Để nhập dữ liệu đầu vào: số, chuỗi... ta sử dụng câu lệnh set /p name= "chuỗi gợi ý nhập dữ liệu"

@echo off
set /p input= input your name ^>
echo Your name is %input%
pause>nul



3. Câu điều kiện

Chắc chắn một điều khi bạn bắt đầu xây dựng những chương trình lớn hơn sẽ có nhiều trường hợp xảy ra mà chương trình phải chạy những đoạn script cho phù hợp. Để giải quyết vấn đề đó batch script hỗ trợ câu điều kiện nếu ... thì hoặc nếu không ... thì

@echo off
set /p input= input your name ^>
if %input% == itblognote echo He is my boss
if not %input% == tiblognote echo I don't know him
pause>nul
Cách thể hiện khác
@echo off
set /p input= input your name ^>
if %input% == itblognote (echo He is my boss) else (echo I don't know him)
pause>nul





4. Định nghĩa bước nhảy cho từng cụm script

Một chương trình chính là tập hợp của nhiều đoạn script có chức năng khác nhau mà nên. Nhưng cách thức hoạt động của một batch file là chạy từng dòng lệnh từ trên xuống. Vậy nếu tôi muốn thực hiện cụm script chức năng thứ hai hay thứ n trước thì phải làm sao? Đơn giản thôi nhé, batch script hỗ trợ đặt nhãn (:name) và lệnh nhảy cóc (goto :name)

:loop
echo Hello World!
goto :loop

Chúc mừng, bạn đã biết cách tạo một vòng lặp rồi đấy. Chức năng của đoạn script trên sẽ giúp in trên màn hình chuỗi Hello World! vô hạn, chỉ có thể dừng lại khi bạn tắt cửa sổ command prompt
Nếu ta kết hợp câu điều kiện với nhãn và lệnh nhảy cóc ta có thể tạo ra một menu cho chương trình

@echo off
echo --------------------------------
echo [ 1 ] Option 1 [ 2 ] Option 2
echo --------------------------------
set /p option= Input your option [ ? ] ^>
f %option% == 1 goto :option1
if %option% == 2 goto :option2
echo Invalid Input & color 4f & pause>nul & exist

:option1
echo your option is %option%
pause>nul
:option2
echo your option is %option%
pause>nul





5. Tạo một file text có đuôi mở rộng bất kỳ

Trong khi lập trình, đôi lúc bạn cần phải xuất một vài giá trị ra một file cụ thể nào đó, file này có thể là một file trung gian để là đầu vào dữ liệu cho đoạn script khác khi biến dữ liệu thay đổi liên tục. Đôi lúc file này là một file cấu hình bạn muốn tạo ra để cung cấp cho một chương trình khác sử dụng. Đôi lúc nó chỉ là một file nhật ký thông thường ghi chú lại những dấu vết mà chương trình vừa hoạt động.

Batch script hỗ trợ tạo file với cú pháp như thế này:
>"đường dẫn file muốn tạo"  (
echo nội dung
)

File author.txt có nội dung là niemtin007 sẽ được tạo ra cùng thư mục với batch file có nội dung dưới
>"%~dp0\author.txt" (
echo niemtin007
)

File author.txt có nội dung là niemtin007 sẽ được tạo ra tại ổ C:\ với batch file có nội dung dưới
>"C:\author.txt" (
echo niemtin007
)



6. Đọc và lấy dữ liệu từ một file text

Câu lệnh dưới đây sẽ giúp đọc file theo từng dòng và xuất ra giá trị của dòng cuối cùng mà nó đọc được

@echo off
for /f "tokens=*" %%b in (C:\author.txt) do set name=%%b
echo the author is %name%
pause>nul



Lệnh for ... in ... do rất hữu ích và nó cũng có rất nhiều biến thể, dưới đây là một đoạn script giúp tớ xác định disk number từ giá trị disk letter khi cắm USB hay ổ cứng di động vào, phục vụ cho một chương trình nhỏ giúp cài đặt công cụ multiboot toolkit lên USB/HDD

for /f "tokens=2 delims= " %%b in (
'WMIC Path Win32_LogicalDiskToPartition Get Antecedent^, Dependent ^| find "E:"'
) do set disk=%%b
set /a disk=%disk:~1,1%

Ta cùng phân tích nhé:
Trước tiên tớ dùng WMIC (Windows Management Instrumentation Command-line) tức là công cụ quản lý Windows dưới giao diện dòng lệnh

WMIC Path Win32_LogicalDiskToPartition Get Antecedent, Dependent


Có gì đó sai sai... Tại sao trên batch file trước dấu , hay | hay > lại có ký tự
Đơn giản chúng nó là các ký tự đặc biệt, khi viết thành batch file để khi chạy thông qua command promt mà nó hiểu được thì cần thêm ký tự ^ Còn khi chạy trực tiếp trên command promt ta không cần thêm ký tự đó

WMIC Path Win32_LogicalDiskToPartition Get Antecedent, Dependent | find "E:"


Nếu xem giá trị được in ra trên màn hình là một bảng thì giá trị tokens=2 của đoạn script chính là cột thứ 2. Nhưng tôi đâu thấy có cái cột nào đâu? Hãy để ý nhé, giá trị delims= " trước dấu hai phẩy có một khoảng trắng đúng không nào ^^ vậy đấy, khoảng trắng chính là cái phân cách một chuỗi dài thành nhiều cột. Ở trên đây ta thấy có tất thảy 4 cột đúng không nào, giá trị cột thứ 2 tớ cần chính là #0, các câu lệnh phía dưới chỉ là hỗ trợ để trừ chuỗi và lấy ra giá trị cần tìm của tớ là số 0 Vậy ổ E:\ mà tớ cần tìm nằm ở disk 0. Nếu ta thử thay khoảng trắng bằng dấu , trong giá trị delims=," thì sao? Lúc này ta chỉ có 2 cột:
cột 1 là\\NIEMTIN007\root\cimv2:Win32_DiskPartition.DeviceID="Disk #0
cột 2 là:  Partition #6"  \\NIEMTIN007\root\cimv2:Win32_LogicalDisk.DeviceID="E:"

Bằng cách trừ chuỗi ta cũng có thể tìm ra giá trị cần để gán vào một biến cụ thể phải không nào ^^ Thế đấy, ngôn ngữ cũng chỉ là công cụ, cái chính là hãy để cho trí tưởng tượng của bạn bay cao bay xa, và nhớ rằng trí tưởng tượng không có giới hạn hãy để nó tự do bay nhảy, tớ tin rằng bạn sẽ tạo nên nhiều chương trình thú vị và hãy chia sẻ nó cho cộng đồng ^^



7. Tận dụng chế độ dòng lệnh của những tool có sẵn để xây dựng một thứ gì đó lớn hơn
Để phát triển nhân loại luôn sử dụng những thành tựu đã có trong quá khứ và tiếp tục phát huy. Chẳng ai lại đi phát minh lại chiếc bánh xe cả, trong lập trình cũng thế. Không phải tự nhiên lại tồn tại một cộng đồng mang tên là "cộng đồng mã nguồn mở" mà cũng chẳng phải tự nhiên mà nhiều công cụ lại có hỗ trợ chế độ dòng lệnh.
Ở dưới đây là một đoạn code giúp tự động repartion cho USB để làm sạch bảng phân vùng của USB trước khi tạo boot cho nó mà mình ứng dụng thông qua công cụ bootice
%~dp0bootice.exe /DEVICE=%disk% /partitions /repartition /usb-hdd /fstype=fat32 /quiet
Bạn có thắc mắc là vì sao tớ biết được dòng lệnh này không? Ở phần help đó bạn, ở một số tool không có GUI giao diện bạn chỉ cần mở Command Prompt từ folder chứa file .exe của tool đó và gõ tên file cùng với lệnh --help. Bạn sẽ nhận được sự giúp đỡ

Nguồn: niemtin007

Post a Comment

5 Comments

  1. man this is so professional and well done. great job. thanks for sharing these information with all of us. Kinemaster Lite

    ReplyDelete
  2. Here is the information about Molly Yeh Net Worth? visit now to read the article

    ReplyDelete
  3. Very Awesome and Help full Article. It really helps me. thanks for sharing this.
    Ooze Pen Blinking Green

    ReplyDelete
  4. Great Post!! Thank you for your informative information. InsiderFeeds provides a platform for entertainment and biography-related content submission. Whether it's articles or biographical information, we're here to share informative and engaging content with our audience. Feel free to contribute and explore a variety of topics within entertainment and biography. We appreciate your interest and look forward to seeing your submissions. We appreciate your interest and look forward to seeing your submissions.

    ReplyDelete

Vài lời muốn nói:
* Không được nhận xét thô tục bởi mình biết các bạn là những người văn minh.
* Pass giải nén mặt định là itblognote hoặc itblognote.com nếu có Pass khác thì mình sẽ ghim trong bài viết.
* Click vào quảng cáo và chia sẻ bài viết để mình có thêm động lực viết bài nhé.