2012-12-02 33 views
5

Mã này:Làm thế nào để °, ± & ² tạo ra ░, ▒ & ▓ trong tập tin batch này?

@echo off 
    set /p a=Installing [<nul 
    set b=1 
    :loop 
    if %b% leq 2 set /p a=°<nul 
    if %b% gtr 4 if %b% leq 6 set /p a=±<nul 
    if %b% gtr 6 if %b% leq 8 set /p a=²<nul 
    if %b% gtr 8 if %b% leq 10 set /p a=±<nul 
    if %b% gtr 10 set /p a=°<nul 
    choice /t 1 /c y /d y>nul 
    set /a b=%b%+1 
    if %b%==13 (echo ]&goto :eof) 
    goto :loop 

... đến từ http://www.experts-exchange.com/OS/Microsoft_Operating_Systems/MS_DOS/A_1237-DOS-ECHO-text-to-previous-line-by-Paul-Tomasi.html#c18182 và tạo đầu ra bên dưới trong một cửa sổ cmd:

Installing [░░▒▒▓▓▒▒░░] 

Tuy nhiên, tôi không thể dường như để tìm một lời giải thích qua google như thế nào đây công trinh. Thay thế các ký tự ascii mở rộng khác vào vị trí của chúng dường như tạo ra "Cú pháp của lệnh không chính xác", vì vậy chỉ quản lý để đoán rằng đây là một hack trong đó một cái gì đó trao đổi các ký tự này với các ký tự thấp hơn trong tập ascii mở rộng. thủ thuật của nhà thiết kế.

Nếu có ai cũng có thể đề xuất một trang web tốt để tìm hiểu thêm về các tính năng của chương trình cmd/cmd như thế này, nó sẽ được đánh giá cao.

+0

Có thể là do [phông chữ mà cmd đang sử dụng không?] (Http://stackoverflow.com/questions/1259084/what-encoding-code-page-is-cmd-exe-using) – acattle

+0

Không thực sự là câu trả lời, nhưng vẫn thú vị: thử chạy 'type' trên tập tin batch của bạn từ dòng lệnh, như trong' type mybatchfile.bat'. Trình soạn thảo văn bản của tôi hiển thị '±' và tất cả phần còn lại, nhưng lệnh 'type' hiển thị' ░' và phần còn lại. Đặt '░' vào tập tin thực thi' gõ 'thành' ª'. Trình soạn thảo dòng lệnh 'edit' cũng hiển thị các ký tự dòng lệnh, thay vì các ký tự Windows. Có lẽ một điều phông chữ, như liên kết của acattle gợi ý. – user1201210

+0

@acattle - Tôi đã thử ba phông chữ có sẵn cho tôi trong cmd (phông chữ Raster, là một trong những kết quả trên được dựa trên; bây giờ cũng Consolas & Lucida Console); Consolas có một ký tự trống cho °, và cả hai nó và Lucida Console tạo ra lệnh là lỗi không chính xác cho lần thứ hai ± (bất thường). Cho nó là cmd và không phải là một trình xử lý văn bản (ví dụ) sẽ nghi ngờ sẽ có các ký tự khác nhau trong bộ ký tự cho mỗi phông chữ, chỉ cần nhìn khác nhau của cùng một ký tự tương ứng. – user66001

Trả lời

4

Đó là do trình chỉnh sửa của bạn sử dụng mã hóa khác với DOS và sử dụng dòng lệnh.

Xem ký tự 176-178 ở đây:

http://academic.evergreen.edu/projects/biophysics/technotes/program/ascii_ext-pc.htm

cặp nhân vật trong các cột DOS và WIN được đại diện bởi các giá trị số tương tự, nhưng hệ điều hành DOS (và do đó dòng lệnh) và Windows (soạn thảo văn bản của bạn) hiển thị các số này dưới dạng các ký hiệu khác nhau.

Trong trường hợp không rõ: tệp văn bản của bạn là chuỗi byte (số) và một trong số các byte này có giá trị 176. Dưới DOS code page 437 nó được sử dụng để biểu thị ▓ glyph và dòng lệnh, vì lý do lịch sử, sử dụng mã hóa giống như DOS đã làm. Nhưng trình soạn thảo văn bản của bạn, chạy trên Windows, dường như đọc tệp bằng mã hóa cũ Windows-1252, trong đó 176 có nghĩa là °.

Bạn có thể thử tìm một trình chỉnh sửa hỗ trợ 437, nó sẽ giúp bạn tránh khỏi những nhầm lẫn như vậy.

+0

Cảm ơn @kamilk - Tôi hiểu ngay bây giờ. Một vài câu hỏi tiếp theo, tuy nhiên - 1) Có anyway để nói những gì chương trình (Giống như cmd.exe, và Notepad) đang sử dụng trong cách của trang mã? 2) Tôi đoán rằng các phông chữ được gắn với các trang mã, giải thích cách sử dụng cùng một phông chữ trong cửa sổ cmd, khác với phông chữ giống nhau trong Notepad? và cuối cùng, 3) Bất kỳ ý tưởng nào về lý do tại sao tôi nhận được "Cú pháp của lệnh là không chính xác" khi thay thế một trong số đó cho ≡ (Mà, vì lý do tôi không hiểu được, dường như không thể có được bằng Alt + 240, tôi này để c & p trong Notepad chạy trên Win7) – user66001

+0

... nhưng cho tôi - trên Notepad trong WinXP) – user66001

+0

ATTN @ kamilk - Vui lòng đánh dấu câu trả lời chính xác của bạn như vậy, nếu bạn có thể giải quyết các câu hỏi bổ sung cho tôi và những người khác trong lợi ích của tương lai. – user66001

Các vấn đề liên quan