2016-08-04 15 views
8

Theo sau bài viết How can I write a null ASCII character (nul) to a file with a Windows batch script? thực sự có các phương pháp để viết một ký tự ASCII NULL (nul) vào một tệp với một tập lệnh batch.Làm thế nào tôi có thể lưu trữ một ký tự ASCII NULL (nul) trong một biến với một tập lệnh batch của Windows?

Tuy nhiên, tôi không thể tìm thấy cách lưu trữ ký tự NULL vào biến.

Giả sử file null.nil chứa một nhân vật NULL duy nhất, chuyển hướng nó vào set /P dường như không làm việc, biến xuất hiện trống:

< "null.nil" set /P NULL= 
set NULL 

for /F không xuất hiện để làm việc, hoặc vì nó dường như bỏ mọi ký tự NULL nó gặp. Dựa trên cùng một tập tin null.nil, kết quả như sau trong một biến rỗng:

for /F %%S in ('type "null.nil"') do set NULL=%%S 
set NULL 

Thay đổi cú pháp set-set "NULL=%%S" hoặc set NULL=^%%S không thay đổi bất cứ điều gì, mặc dù dòng lệnh type "null.nil" không echo nhân vật NULL (trên Windows của tôi 10 x64 máy; chuyển hướng type xuất ra một tệp và xem tệp bằng trình chỉnh sửa hex).

Vậy làm cách nào tôi có thể đặt biến thành một ký tự NULL? Ký tự NULL có thể được lấy từ một tập tin (như null.nil) hoặc được tạo ra bởi một số hack thông minh, nhưng tôi không muốn nó được nhúng trong tập tin thực thi trực tiếp.

+4

Chỉ cần đoán ... Tôi nghi ngờ rằng nội bộ env. các biến được xử lý như các chuỗi được kết thúc bằng null, và vì một chuỗi không chứa gì nhưng một char rỗng rỗng (không có gì xa như nội dung), và thiết lập một env. var để không xóa nó, bạn sẽ gặp vấn đề ở đây. :-) –

+0

Thật không may, bạn đúng, @KenWhite; Tôi chỉ tìm thấy một bài đăng ở đây xác nhận sự nghi ngờ hợp lý của bạn: [Đặt biến môi trường cho một quá trình cụ thể của một quy trình cụ thể] (http://stackoverflow.com/a/13092538) – aschipfl

+0

Nếu bạn quản lý bằng cách nào đó ký tự NULL đơn' làm thế nào để bạn thấy trước bạn có thể * sử dụng * biến đó? – dxiv

Trả lời

2

Theo trang Environment Variables của Thư viện MSDN của Microsoft và cũng để các bài Setting environment variables for a specific run of a specific process, khối môi trường được lưu trữ trong một khối NULL-chấm dứt các chuỗi NULL-chấm dứt - đây nhanh chóng được minh họa trong EBNF ký hiệu:

environment-block = { variable-definition } , null-char ; 
variable-definition = variable-name , '=' , variable-value , null-char ; 

Do định dạng lưu trữ này, không thể lưu trữ ký tự NULL vào biến môi trường. Ngay cả khi một người quản lý để có được một NULL được viết vào khối môi trường nó không bao giờ có thể được đọc một lần nữa.

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