Thảo luận - cmd - Lệnh tạm dừng là như vậy đó | VN-Zoom | Cộng đồng Chia Sẻ Kiến Thức Công Nghệ và Phần Mềm Máy Tính

Adblocker detected! Please consider reading this notice.

We've detected that you are using AdBlock Plus or some other adblocking software which is preventing the page from fully loading.

We need money to operate the site, and almost all of it comes from our online advertising.

If possible, please support us by clicking on the advertisements.

Please add vn-z.vn to your ad blocking whitelist or disable your adblocking software.

×

Thảo luận cmd - Lệnh tạm dừng là như vậy đó

malemkhoang

Rìu Chiến
command-prompt-la-gi-dung-lam-gi-cac-lenh-huu-ich-tren-6-800x400.jpg


Từ thưở ban đầu, anh Mai đã bố trí lệnh Pause để tạm ngừng quá trình thực hiện các lệnh trong tệp lô (Batch) và chờ sự tương tác của người sử dụng (NSD) bằng cách nhấn một phím bất kỳ mới cho thực hiện các lệnh tiếp theo. Tuy nhiên, lệnh này chưa đáp ứng được nhu cầu của thực tế. Đó là NSD không nhất thiết phải nhấn phím, tệp lệnh chỉ cần tạm dừng trong một thời gian nhất định để tiến trình đang thực hiện hoàn thành đúng yêu cầu, rồi lại tiếp tực tiến trình tiếp theo.​

ReactOS-0.4.13_choice_command_667x434.png

Lệnh cmd choice của thời nguyên thủy

Nhu cầu thực tiễn này là hiển nhiên. Điều này có thể diễn tả giống như việc sử dụng các lệnh kiểu như delay hoặc sleep trong các ngôn ngữ lập trình. Song, có vẻ như anh Mai không bố trí một lệnh cmd nào có chức năng như vậy. Lệnh cmd Help sẽ cung cấp cho chúng ta một danh sách lệnh cmd phổ quát nhất. Người ta cũng có thể tìm ra 200 lệnh cmd trên Internet, nhưng trong số đó có những lệnh không thuộc về anh Mai, chẳng hạn như: sleep, timeout...
sleep --help
Chẳng nên nói về sleep và timeout vì chúng không phải của anh Mai, mặc dù chỉ cần tên lệnh là rõ chức năng của nó, và như vậy sẽ không thể triển khai trên tất cả các máy. Thậm chí có lệnh cmd còn bị thay thế, chẳng hạn như lệnh Find:
Find --help
Lệnh Find đúng của anh Mai phải là:
Find /?
Mọi người tự kiểm tra trên máy của mình. Nếu thấy xuất hiện "find: '/?': No such file or directory" tức là lệnh cmd Find đã bị thay thế.

Không giống như lệnh cmd Pause, lệnh cmd Choice chờ NSD nhấn phím, nhưng không phải là phím bất kỳ, mà là phím đặt trước hoặc không cần NSD nhấn phím nó cũng tự nhấn một trong các phím đặt trước đó sau một khoảng thời gian nhất định. Thêm nữa, kết quả của lệnh cmd Choice là giá trị biến %errorlevel% được thiết lập theo giá trị chỉ số tương ứng với phím đã nhấn trong số các phím đặt trước, để rồi giá trị của biến này sẽ được dùng làm cơ sở để rẽ nhánh đến nhãn tương ứng trong tệp lệnh .cmd mà thực thi các câu lệnh tại đây. Điểm mấu chốt trong sự diễn tả này là lệnh cmd Choice có khả năng tự nhấn phím sau khoảng thời gian định trước, điều này hoàn toàn tương tự như delay hay sleep.
Cú pháp chung của lệnh cmd Choice:
CHOICE [/c [choiceKeys]] [/N] [/CS] [/t Timeout /D Choice] [/M Text]
Tham số /N và /CS của lệnh cmd Choice, không được mô tả tại đây.
Ví dụ:

CHOICE /c ync /t 10 /D y /M "Wait a key in 10 seconds..."
echo %errorlevel%

Ý nghĩa:

Một trong những phím cần phải nhấn theo sau /c (The valid choice characters are: a-z, A-Z, 0-9 and ASCII values of 128 to 254), chỉ số tương ứng từ 1 cho đến tổng số lượng ký tự này; sau khoảng thời gian tính bằng giây sau /t, nếu NSD không nhấn phím thì Choice tự nhấn phím định bởi ký tự theo sau /D và thiết lập %errorlevel% có giá trị tương ứng với chỉ số (1 tương ứng với y/Y trong ví dụ); trong khoảng thời gian theo sau /t, nếu NSD nhấn một phím đúng như một trong các phím cho trước theo sau /c, %errorlevel% nhận giá trị chỉ số tương ứng, đồng thời hiệu lực của lệnh cmd Choice kết thúc, mặc dù thời gian chưa đủ theo /t.
Nếu phím được nhấn không phải là một trong các phím thuộc /c thì máy sẽ la lối thật là khó chịu. Hết thời gian /t, lệnh cmd kết thúc, người ta có quan tâm đến %errorlevel% hay không thì nó cũng mặc xác.
Khi sau /c là một trong những ký tự ASCII có giá trị từ 128 đến 254, NSD sẽ khó gõ được chính xác, thêm nữa nếu có sự hiện diện của tham số /N để làm ẩn đi sự trợ giúp phím phải nhấn thì NSD sẽ không bao giờ nhấn đúng phím như đã đặt trước ở sau /c, giá trị thời gian sau /t sẽ được bảo đảm. Như vậy lúc này lệnh cmd Choice trở thành một lệnh sleep hay delay thực thụ.

Câu lệnh sau đây là một ví dụ:
choice /C ©œž /T 10 /D © /N /M "Wait for a key... Please do not press a key... kkk"
Còn đây là một ví dụ làm cho bạn thấy khó chịu:
echo product©malemkhoang | choice /C ©œž /T 10 /D © /M "Wait a key..."

Như vậy, bằng cách sử dụng lệnh cmd Choice với các tham số /c, /t, /D, /M /N phù hợp ta có được lệnh "sleep" như trong các ngôn ngữ lập trình. Khả năng ứng dụng lệnh là dễ dàng, có hiệu quả tốt và có thể mở rộng cú pháp lệnh, phối hợp lệnh khi dùng trong tệp lệnh .cmd.​
 
N

n2t4r

Bài hay quá. Bạn là người hiểu biết rõ về CMD. Vậy bạn có thể cho mình hỏi vài câu được không? Trước mình có viết 1 bài về cách lấy CID tự động thông qua API của khoatoantin trên CMD. Đã tìm ra giải pháp nhưng thấy vẫn chưa ưng lắm vì phải dùng CURL (Máy Windows 7, 8, 8.1 không có). Và phải cắt CID thủ công thông qua 1 lệnh nữa. Không biết bạn có thể tìm thử phương pháp lấy CID 48 số viết liền mà chỉ cần 1 lệnh duy nhất và có thể dùng trên các đời Windows cũ không? Cảm ơn
 

khoa78

Búa Gỗ
command-prompt-la-gi-dung-lam-gi-cac-lenh-huu-ich-tren-6-800x400.jpg


Từ thưở ban đầu, anh Mai đã bố trí lệnh Pause để tạm ngừng quá trình thực hiện các lệnh trong tệp lô (Batch) và chờ sự tương tác của người sử dụng (NSD) bằng cách nhấn một phím bất kỳ mới cho thực hiện các lệnh tiếp theo. Tuy nhiên, lệnh này chưa đáp ứng được nhu cầu của thực tế. Đó là NSD không nhất thiết phải nhấn phím, tệp lệnh chỉ cần tạm dừng trong một thời gian nhất định để tiến trình đang thực hiện hoàn thành đúng yêu cầu, rồi lại tiếp tực tiến trình tiếp theo.​

ReactOS-0.4.13_choice_command_667x434.png

Lệnh cmd choice của thời nguyên thủy

Nhu cầu thực tiễn này là hiển nhiên. Điều này có thể diễn tả giống như việc sử dụng các lệnh kiểu như delay hoặc sleep trong các ngôn ngữ lập trình. Song, có vẻ như anh Mai không bố trí một lệnh cmd nào có chức năng như vậy. Lệnh cmd Help sẽ cung cấp cho chúng ta một danh sách lệnh cmd phổ quát nhất. Người ta cũng có thể tìm ra 200 lệnh cmd trên Internet, nhưng trong số đó có những lệnh không thuộc về anh Mai, chẳng hạn như: sleep, timeout...
sleep --help
Chẳng nên nói về sleep và timeout vì chúng không phải của anh Mai, mặc dù chỉ cần tên lệnh là rõ chức năng của nó, và như vậy sẽ không thể triển khai trên tất cả các máy. Thậm chí có lệnh cmd còn bị thay thế, chẳng hạn như lệnh Find:
Find --help
Lệnh Find đúng của anh Mai phải là:
Find /?
Mọi người tự kiểm tra trên máy của mình. Nếu thấy xuất hiện "find: '/?': No such file or directory" tức là lệnh cmd Find đã bị thay thế.

Không giống như lệnh cmd Pause, lệnh cmd Choice chờ NSD nhấn phím, nhưng không phải là phím bất kỳ, mà là phím đặt trước hoặc không cần NSD nhấn phím nó cũng tự nhấn một trong các phím đặt trước đó sau một khoảng thời gian nhất định. Thêm nữa, kết quả của lệnh cmd Choice là giá trị biến %errorlevel% được thiết lập theo giá trị chỉ số tương ứng với phím đã nhấn trong số các phím đặt trước, để rồi giá trị của biến này sẽ được dùng làm cơ sở để rẽ nhánh đến nhãn tương ứng trong tệp lệnh .cmd mà thực thi các câu lệnh tại đây. Điểm mấu chốt trong sự diễn tả này là lệnh cmd Choice có khả năng tự nhấn phím sau khoảng thời gian định trước, điều này hoàn toàn tương tự như delay hay sleep.
Cú pháp chung của lệnh cmd Choice:
CHOICE [/c [choiceKeys]] [/N] [/CS] [/t Timeout /D Choice] [/M Text]
Tham số /N và /CS của lệnh cmd Choice, không được mô tả tại đây.
Ví dụ:

CHOICE /c ync /t 10 /D y /M "Wait a key in 10 seconds..."
echo %errorlevel%

Ý nghĩa:

Một trong những phím cần phải nhấn theo sau /c (The valid choice characters are: a-z, A-Z, 0-9 and ASCII values of 128 to 254), chỉ số tương ứng từ 1 cho đến tổng số lượng ký tự này; sau khoảng thời gian tính bằng giây sau /t, nếu NSD không nhấn phím thì Choice tự nhấn phím định bởi ký tự theo sau /D và thiết lập %errorlevel% có giá trị tương ứng với chỉ số (1 tương ứng với y/Y trong ví dụ); trong khoảng thời gian theo sau /t, nếu NSD nhấn một phím đúng như một trong các phím cho trước theo sau /c, %errorlevel% nhận giá trị chỉ số tương ứng, đồng thời hiệu lực của lệnh cmd Choice kết thúc, mặc dù thời gian chưa đủ theo /t.
Nếu phím được nhấn không phải là một trong các phím thuộc /c thì máy sẽ la lối thật là khó chịu. Hết thời gian /t, lệnh cmd kết thúc, người ta có quan tâm đến %errorlevel% hay không thì nó cũng mặc xác.
Khi sau /c là một trong những ký tự ASCII có giá trị từ 128 đến 254, NSD sẽ khó gõ được chính xác, thêm nữa nếu có sự hiện diện của tham số /N để làm ẩn đi sự trợ giúp phím phải nhấn thì NSD sẽ không bao giờ nhấn đúng phím như đã đặt trước ở sau /c, giá trị thời gian sau /t sẽ được bảo đảm. Như vậy lúc này lệnh cmd Choice trở thành một lệnh sleep hay delay thực thụ.

Câu lệnh sau đây là một ví dụ:
choice /C ©œž /T 10 /D © /N /M "Wait for a key... Please do not press a key... kkk"
Còn đây là một ví dụ làm cho bạn thấy khó chịu:
echo product©malemkhoang | choice /C ©œž /T 10 /D © /M "Wait a key..."

Như vậy, bằng cách sử dụng lệnh cmd Choice với các tham số /c, /t, /D, /M /N phù hợp ta có được lệnh "sleep" như trong các ngôn ngữ lập trình. Khả năng ứng dụng lệnh là dễ dàng, có hiệu quả tốt và có thể mở rộng cú pháp lệnh, phối hợp lệnh khi dùng trong tệp lệnh .cmd.​
CMD có lệnh timeout để làm việc này.
## Wait 10 sec
TIMEOUT /T 10
 

malemkhoang

Rìu Chiến
Bài hay quá. Bạn là người hiểu biết rõ về CMD. Vậy bạn có thể cho mình hỏi vài câu được không? Trước mình có viết 1 bài về cách lấy CID tự động thông qua API của khoatoantin trên CMD. Đã tìm ra giải pháp nhưng thấy vẫn chưa ưng lắm vì phải dùng CURL (Máy Windows 7, 8, 8.1 không có). Và phải cắt CID thủ công thông qua 1 lệnh nữa. Không biết bạn có thể tìm thử phương pháp lấy CID 48 số viết liền mà chỉ cần 1 lệnh duy nhất và có thể dùng trên các đời Windows cũ không? Cảm ơn
1. CURL không phải là lệnh cmd của anh Mai và không phổ quát nên không thể triển khai trên tất cả các máy. Nếu bạn muốn hoặc bắt buộc phải dùng thì có thể học hỏi cách làm của những người tạo HBCD, WinPE.
2. Lệnh cmd Findstr kèm với biểu thức chính quy (Regular Exspression - Regex) có thể thực hiện được.
Ví dụ:
CURL <url> | Findstr /R [0-9][0-9]*$​
 

Hamano Kaito

Moderator
Timeout là lệnh cmd của anh Mai. Tuy nhiên, không phải là lệnh phổ quát. Bởi vậy, không thể triển khai lệnh này trên tất cả các máy.​
Là sao sếp !? {confused} có thể cắt thêm nghĩa cho mình hiểu tí được ko?
--
Cái lệnh timeout chỉ đơn giãn là thời gian chờ. Còn choice nó có nhiều thứ để thêm vào hơn, thấy khá hay
Thường mình chỉ dùng set /p thôi. Cái này cũng hay
 

malemkhoang

Rìu Chiến
Là sao sếp !? {confused} có thể cắt thêm nghĩa cho mình hiểu tí được ko?
--
Cái lệnh timeout chỉ đơn giãn là thời gian chờ. Còn choice nó có nhiều thứ để thêm vào hơn, thấy khá hay
Thường mình chỉ dùng set /p thôi. Cái này cũng hay
Mỗi phiên bản HĐH của anh Mai đều có lệnh cmd phổ quát riêng (phổ quát - không thể thiếu, hay dùng, chức năng ổn định trong mọi môi trường làm việc), tuy nhiên, cơ bản thì ít có sự thay đổi về tên lệnh và chức năng (so sánh từ MS-DOS, WinXP, Win7... đến nay). Chẳng hạn, ngày nay không còn lệnh sys, fdisk mà được thay bằng các lệnh khác hoặc xuất hiện lệnh mới: bcdboot, diskpart... bcdedit... và NSD cập nhật điều này.​
 

Hamano Kaito

Moderator
Mỗi phiên bản HĐH của anh Mai đều có lệnh cmd phổ quát riêng (phổ quát - không thể thiếu, hay dùng, chức năng ổn định trong mọi môi trường làm việc), tuy nhiên, cơ bản thì ít có sự thay đổi về tên lệnh và chức năng (so sánh từ MS-DOS, WinXP, Win7... đến nay). Chẳng hạn, ngày nay không còn lệnh sys, fdisk mà được thay bằng các lệnh khác hoặc xuất hiện lệnh mới: bcdboot, diskpart... bcdedit... và NSD cập nhật điều này.​
Cảm ơn sếp ! Đã hiểu, vậy là các lệnh được loại bỏ và được thay thế bằng các lệnh mới sẽ tốt hơn rồi
Được mở rộng hơn với đa năng hơn.
 


Top