Tôi chắc rằng nó hoạt động tốt. Để chứng minh điều đó, hãy thêm SET STR
sau khi bạn xác định giá trị và bạn sẽ thấy giá trị chính xác.
Sự cố bạn đang gặp phải là khi bạn cố gắng lặp lại giá trị, dòng đang thực hiện trở thành: echo >abcd_
. Các >
không được trích dẫn hoặc thoát, vì vậy nó chỉ đơn giản là lấy ouput của ECHO không có đối số và chuyển hướng nó đến một tập tin có tên là "abcd_"
Nếu bạn không thấy dấu ngoặc kép, sau đó thay đổi dòng của bạn thành echo "%str%"
và nó sẽ hoạt động.
Các tùy chọn khác là để kích hoạt và sử dụng mở rộng chậm (Tôi giả định này là một mã kịch bản hàng loạt, và không thực hiện trên dòng lệnh)
setlocal enableDelayedExpansion
set soeid=abcd
set "val1=>"
set "val2=_"
set "str=%val1%%soeid%%val2%"
echo !str!
Bình thường %var%
mở rộng diễn ra từ rất sớm trong khi người phiên dịch đang phân tích cú pháp dòng. Trì hoãn !var!
mở rộng xảy ra ở cuối ngay trước khi nó được thực hiện. Chuyển hướng được phát hiện ở đâu đó ở giữa. Đó là lý do tại sao việc mở rộng bình thường không hoạt động - trình thông dịch nhìn thấy ký tự được mở rộng >
và diễn giải nó như là toán tử chuyển hướng đầu ra. Việc mở rộng chậm trễ ẩn các ký tự >
từ thông dịch viên cho đến khi sau khi chuyển hướng được phân tích cú pháp.
Để biết thêm thông tin về việc mở rộng trễ, hãy nhập SET /?
từ dòng lệnh và đọc bắt đầu với đoạn bắt đầu bằng "Cuối cùng, hỗ trợ cho việc mở rộng biến môi trường trễ ...".
Điều đầu tiên bạn nên nhập sau "không hoạt động" là giải thích về * cách * nó không hoạt động. Chúng tôi không thể đọc được suy nghĩ của bạn hoặc xem màn hình của bạn từ đây; tất cả những gì chúng tôi phải tiếp tục là những gì bạn cho chúng tôi biết trong câu hỏi của bạn. Nếu bạn muốn được giúp đỡ, bạn cần phải cho chúng tôi biết bạn đang gặp phải vấn đề gì và cách bạn thử không hoạt động. –