Tôi đang cố xóa một số tệp có ký tự unicode trong chúng bằng tập lệnh batch (đó là yêu cầu). Vì vậy, tôi chạy cmd và thực thi:Kịch bản lệnh hàng loạt không được thực thi nếu chcp được gọi là
> chcp 65001
Thiết lập mã hóa hiệu quả cho UTF-8. Và nó hoạt động:
D:\temp\1>dir
Volume in drive D has no label.
Volume Serial Number is 8C33-61BF
Directory of D:\temp\1
02.02.2010 09:31 <DIR> .
02.02.2010 09:31 <DIR> ..
02.02.2010 09:32 508 1.txt
02.02.2010 09:28 12 delete.bat
02.02.2010 09:20 95 delete.cmd
02.02.2010 09:13 <DIR> Rún
02.02.2010 09:13 <DIR> Гуцул Каліпсо
3 File(s) 615 bytes
4 Dir(s) 11 576 438 784 bytes free
D:\temp\1>rmdir Rún
D:\temp\1>dir
Volume in drive D has no label.
Volume Serial Number is 8C33-61BF
Directory of D:\temp\1
02.02.2010 09:56 <DIR> .
02.02.2010 09:56 <DIR> ..
02.02.2010 09:32 508 1.txt
02.02.2010 09:28 12 delete.bat
02.02.2010 09:20 95 delete.cmd
02.02.2010 09:13 <DIR> Гуцул Каліпсо
3 File(s) 615 bytes
3 Dir(s) 11 576 438 784 bytes free
Sau đó, tôi đặt cùng một lệnh rmdir
lệnh trong tập lệnh theo lô và lưu mã đó vào mã hóa UTF-8. Nhưng khi tôi chạy không có gì xảy ra, nghĩa đen không có gì: thậm chí không echo làm việc từ tập lệnh batch trong trường hợp này. Ngay cả việc lưu tập lệnh trong mã hóa OEM cũng không giúp được gì.
Vì vậy, có vẻ như khi tôi thay đổi mã hóa thành UTF-8 trong bảng điều khiển, các tập lệnh chỉ dừng hoạt động. Có ai biết cách sửa lỗi đó không?
Cân nhắc và viết câu trả lời thực tế sớm, nhưng có hai câu hỏi: Bạn có chắc chắn rằng tệp lô của bạn không có U + FEFF khi bắt đầu? Và bạn có thể sử dụng VBScript có lẽ thay vì một tập tin thực thi? Hỗ trợ Unicode dễ dàng hơn nhiều ở đó. – Joey
không, không có BOM trong tập tin thực thi. Tôi có thể sử dụng VBS, nhưng tôi chỉ muốn biết nếu vấn đề của tôi có thể được giải quyết trực tiếp. – Andy
Có thể nó có thể; Tôi đã thực hiện một số tiến bộ trong khi trước đây với Unicode trong các tập tin batch, nhưng nó không có nghĩa là đẹp và nó đã được patchy lúc tốt nhất. – Joey