Tôi đang gỡ lỗi một tập lệnh lệnh bó cửa sổ. Nó không thành công khi các ký tự mở rộng (> 0x7f) được sử dụng trong đường dẫn hoặc tên tệp. Vấn đề dường như có liên quan đến các tham số truyền vào một tệp lệnh được GỌI từ một tệp khác.Xử lý các ký tự mở rộng trong các lệnh Windows?
Đối với một ví dụ, lệnh này làm việc như mong đợi:
xcopy "Pezuñero\1 - 001.wav" \temp
này không:
call another.cmd "Pezuñero"
Nội dung "another.cmd":
xcopy "%~1\1 - 001.wav" \temp
Các% ~ 1 cú pháp mở rộng tham số và xóa dấu ngoặc kép. Điều này là cần thiết vì trong tệp lệnh thực, các đường dẫn trong tệp lệnh gọi hoặc gọi được có thể có dấu cách.
Kết quả của ví dụ thứ hai (sao chép từ cửa sổ CMD) là thế này:
C:\>call another.cmd "Pezu±ero"
C:\>xcopy "Pezu±ero\1 - 001.wav" \temp
File not found - 1 - 001.wav
0 File(s) copied
Lưu ý rằng "N" (0xF1) nhân vật đã được thay đổi thành một "±" (0xB1).
Có ai có thể giải thích điều gì đang diễn ra và cách khắc phục sự cố này không?
Bạn cũng có thể sử dụng CharToOem để chuyển đổi các chuỗi ngay trước khi ghi chúng vào tập lệnh của bạn: http://msdn.microsoft.com/en-us/library/ms647473.aspx –