Viết kịch bản Terminal Service - Phần 7

Viết kịch bản Terminal Service - Phần 1
Viết kịch bản Terminal Service - Phần 2
Viết kịch bản Terminal Service - Phần 3
Viết kịch bản Terminal Service - Phần 4
Viết kịch bản Terminal Service - Phần 5
Viết kịch bản Terminal Service - Phần 6

Brien M. Posey

Quản trị mạng - Trong phần trước của loạt bài này, chúng tôi đã giới thiệu cho các bạn cách redirect đầu ra của lệnh vào một file văn bản, các thông tin được ghi vào file sau sẽ được gắn vào phần cuối của file. Chúng ta cũng đã phát hiện thấy một điều rằng, trong thế giới thực chúng ta cần đến nhiều tình huống sử dụng các file văn bản có tên riêng biệt thay cho việc sử dụng một file sau đó nối các thông tin mới vào phần cuối của file bản ghi đang tồn tại đó.

Tiếp theo phần cuối của phần trước, chúng tôi đã cung cấp hai dòng mã bên dưới với tư cách một cơ chế cho việc tạo các file bản ghi có tên phân biệt:

for /F "tokens=2,3,4 delims=/ " %%i in ('date /t') do set datefile=%%i%%j%%k.log
Query User > %datefile%

Tuy nhiên, chúng tôi đã không giới thiệu nhiều về các dòng mã trên. Do việc tạo các file bản ghi là một khái niệm rất quan trọng nên chúng tôi quyết định sẽ dành phần này để giới thiệu cho các bạn kỹ về ý nghĩa của dòng mã trên làm việc như thế nào và bên cạnh đó là cách sử dụng chúng.

Như đã đề cập từ trước, mục đích của đoạn mã làm mẫu này là nhằm tạo một file bản ghi có tên file phân biệt. Phần vấn đề liên quan tới việc tạo một tên file phân biệt là rằng nếu bạn tạo một tên file hoàn toàn ngẫu nhiên thì rất khó có thể chỉ ra file nào có chứa bản ghi nào. Chính vì vậy chúng tôi đã viết đoạn mã trên nhằm tạo một tên file phân biệt dựa trên ngày tháng hiện hành. Tuy nhiên, theo cách này filename không thực sự duy nhất nếu trường hợp bạn chạy các lệnh trên nhiều hơn một lần trong ngày, khi đó những lần chạy lệnh của bạn đều sinh ra cùng một filename. Chính vì vậy nếu cần tạo một file bản ghi phân biệt trong một ngày, bạn hãy tạo một filename phân biệt với nhau bằng thời gian hiện hành của ngày.

Trước khi chúng tôi giới thiệu cho các bạn cách làm việc của lệnh trên như thế nào, chúng ta hãy xem xét đến cách hoạt động của các lệnh này trong môi trường thế giới thực như thế nào. Như những gì bạn có thể thấy trong hình A, chúng tôi đã tạo một file bản ghi có tên USER.BAT, sau đó đã chèn lệnh trên vào trong file. Trong trường hợp này có thể bạn chưa quen với file có đuôi mở rộng .BAT, các file này đơn giản là các file văn bản có chứa một hoặc nhiều lệnh. Mục đích của chúng là cho phép bạn xây dựng các kịch bản dựa trên các lệnh nhập vào riêng lẻ tại dấu nhắc lệnh.


Hình A: Đây là cách các lệnh làm việc trong thế giới thực

Nếu quan sát hình trên, bạn có thể thấy được rằng thứ đầu tiên mà chúng tôi đã thực hiện là sử dụng lệnh TYPE để hiển thị nội dung của file USER.BAT. Bước này thực sự không cần thiết nhưng chúng tôi chỉ thực hiện nó để thể hiện cho bạn biết rằng chúng ta đang sử dụng mã như đã được giới thiệu trong phần trước.

Lưu ý tại nhắc lệnh kế tiếp, chúng tôi đã nhập vào lệnh USER. Bất cứ thời điểm nào bạn tạo file .BAT, thì tên mà bạn đã gán cho file đó sẽ được coi như thuộc về một file thực thi. Trong trường hợp này, tên của file .BAT là USER.BAT, chính vì vậy khi chúng ta nhập vào lệnh USER, Windows sẽ thực thi file .BAT.

Ba nhắc lệnh tiếp theo bạn thấy trong hình trên được theo sau bởi rất nhiều lệnh. Bạn cần phải hiểu được rằng chúng tôi đã không đánh một cách thủ công các lệnh này mà thay vì đó, Windows sẽ thực thi mỗi lệnh tìm thấy trong file .BAT như cách các lệnh đó được nhập vào một cách thủ công.

Một thứ mà chúng tôi muốn chỉ ra trước khi chuyển sang phần tiếp theo đó là, nếu bạn quan sát phần đầu của màn hình hiển thị (screen shot), nơi chúng tôi đã hiển thị nội dung của file .BAT thì dòng cuối cùng của file .BAT là:

Query User > %datefile%

Tuy nhiên, khi file .BAT xử lý lệnh Query User thì lệnh này sẽ giống như lệnh sau:

Query User 1>04122008.log

Ý của chúng tôi muốn nói ở đây là, mặc dù các file .BAT được thiết kế để phát các lệnh một cách tuần tự như kiểu chúng được nhập vào một cách thủ công thì vẫn có một sự khác biệt quan trọng giữa một lệnh trong file .BAT với một lệnh được nhập vào thủ công. Khi xử lý một lệnh với tư cách là một phần của file .BAT thì bạn có thể dựa vào một lệnh trên các kết quả của một lệnh trước. Trong trường hợp này, biến %datefile% đang được thay thế bởi 04122008. Có thể bạn sẽ phân vân rằng con số này phát sinh từ đâu thì đây chính là ngày thực hiện lệnh 04-12-2008.

Như những gì bạn thấy trong hình trên, chúng ta đã có thể sử dụng ngày để tạo một file name. Phần phía dưới của hình, chúng ta đã sử dụng lệnh TYPE để hiển thị nội dung của file bản ghi đã được tạo, điều đó chứng tỏ mọi việc đến đây đều hoạt động êm xuôi.

Trước khi bắt đầu nói về cách làm việc của từng lệnh riêng lẻ, chúng tôi muốn giới thiệu cho các bạn thêm một số mẹo. Khi quan sát hình ở trên, bạn sẽ rất khó khăn để thấy được sự khác biệt giữa các lệnh được nhập vào một cách thủ công và các lệnh được xử lý với tư cách là một phần của file .BAT.

Các bạn nên biết rằng, các file .BAT thường dài hơn và phức tạp hơn nhiều so với file mà chúng tôi giới thiệu ở đây, trong tình huống như vậy, việc xem đầu ra của các lệnh trong file .BAT cần đến sự hỗ trợ của thanh cuộn màn hình, hoặc có thể khá khó khăn trong việc tìm ra vị trí của nó. Chính vì vậy nhiều lập trình viên mở đầu các file .BAT của họ với lệnh dưới đây:

@echo off

Echo là một lệnh thường được sử dụng cho việc hiển thị văn bản trên màn hình hoặc cho việc bổ sung thêm một dòng văn bản vào file nào đó. Cho ví dụ, nếu bạn muốn cấu hình một file .BAT để hiển thị cụm từ “Hello World”, hãy sử dụng lệnh dưới đây:

Echo Hello World

Chúng ta sẽ sử dụng lệnh echo để hiển thị trong loạt bài này, nhưng lúc này, có một một trường hợp sử dụng khác cho lệnh echo mà chúng tôi muốn giới thiệu đó là: khi bạn nhập vào lệnh ECHO OFF, Windows sẽ biết rằng bạn muốn tránh không cho các lệnh còn lại của file .BAT được hiển thị và chỉ muốn xem đầu ra của của file .BAT chứ không muốn xem bản thân các lệnh.

Nếu bạn nhập vào lệnh ECHO OFF tại điểm bắt đầu của file .BAT thì lệnh Echo Off này sẽ hiện hữu, nhưng các lệnh khác thì không. Bạn có thể thấy được điều đó trong hình B bên dưới.


Hình B: Lệnh Echo Off ngăn không cho các lệnh trước đó hiển thị

Sử dụng lệnh này này làm xuất hiện nhiều từ “Echo Off” có thể khiến chúng ta hơi rối mắt. Chính vì vậy chúng tôi khuyên bạn lên gắn trước lệnh này một dấu @. Điều đó sẽ làm cho lệnh Echo Off không bị xuất hiện nhiều lần, xem thể hiện trong hình C.


Hình C: Lệnh @Echo Off sẽ ẩn tất cả các lệnh khác

OK, lệnh @Echo Off khá tốt trong việc ẩn các lệnh riêng rẽ có trong file .BAT, tuy nhiên nếu tình cờ theo dõi thì nó dường như không thực hiện gì. Chúng ta có thể khắc phục vấn đề này bằng cách thêm lệnh Echo vào file .BAT và gắn theo sau một dòng văn bản giải thích những gì diễn ra. Chúng ta có thể tạo một dòng ở cuối file trong đó lệnh Echo được sử dụng để nói cho người dùng biết rằng lệnh đã thực hiện thành công. Kịch bản như vậy được viết dưới đây:

@Echo Off
Echo Creating log file.
for /F "tokens=2,3,4 delims=/ " %%i in ('date /t') do set datefile=%%i%%j%%k.log
Query User > %datefile%
Echo Log file created successfully.

Bạn có thể thấy đầu ra lúc này khi chạy kịch bản trên trong hình D.


Hình D: Đây là đầu ra của kịch bản trên

Kiểu đầu ra này giúp bạn đọc dễ dàng hơn rất nhiều, tuy nhiên có một số vấn đề ở đây. Cho ví dụ, chúng ta không thể thông báo cho người dùng biết nơi tìm kiếm file bản ghi, hoặc tên của file bản ghi là gì. Một vấn đề khác nữa là, lệnh này chỉ echo đơn giản một dòng văn bản nói rằng file bản ghi đã được tạo thành công. Đến đây, kịch bản vẫn chưa có cách để biết được file bản ghi đã được tạo thành công hay chưa. Chúng tôi sẽ để cập đến vấn đề này trong những phần tiếp theo.

Kết luận

Trong phần này, chúng tôi đã giới thiệu cho các bạn cách lắp ráp các lệnh vào một kịch bản và cách xóa đầu ra của kịch bản. Phần tiếp theo của loạt bài, chúng tôi sẽ nói về cách tên file bản ghi được tạo như thế nào.

Thứ Năm, 18/09/2008 12:04
51 👨 1.352
0 Bình luận
Sắp xếp theo
    ❖ Tổng hợp