Tôi không chắc chắn cách bạn có thể in ngay cả một số ngẫu nhiên. Trong trường hợp của bạn, %checker%
nên đánh giá thành một chuỗi trống, trừ khi bạn chạy tập lệnh của mình nhiều lần từ cùng một phiên cmd
.
Về cơ bản, lý do tập lệnh của bạn không hoạt động như dự định là do các biến trong phần tử vòng lặp được phân tích cú pháp và đánh giá trước khi vòng lặp thực hiện. Khi cơ thể thực hiện, các vars đã được đánh giá và các giá trị giống nhau được sử dụng trong tất cả các lần lặp.
Điều bạn cần, do đó, là đánh giá bị trì hoãn, nếu không được gọi là mở rộng bị trễ. Trước tiên, bạn cần kích hoạt nó, sau đó sử dụng một cú pháp đặc biệt cho nó.
Dưới đây là kịch bản của bạn sửa đổi để sử dụng việc mở rộng chậm:
@echo off
setlocal EnableDelayedExpansion
for %%i in (*.txt) do (
set checker=!Random!
echo !checker!
echo %%i% >> backupF
)
endlocal
echo Complete
Như bạn thấy, setlocal EnableDelayedExpansion
phép chế biến đặc biệt cho các cú pháp mở rộng chậm trễ, đó là !
s xung quanh tên biến thay vì %
s .
Bạn vẫn có thể sử dụng mở rộng ngay lập tức (bằng cách sử dụng %
) nơi nó có thể hoạt động chính xác (về cơ bản, bên ngoài các khối lệnh được đóng khung).
Nguồn
2011-06-28 01:58:39
Kịch bản trên doesnt có ý nghĩa. Biến "Random" không được thiết lập bởi bất cứ điều gì và vì vậy kiểm tra luôn luôn là null. Ngoài ra, %% i% cũng không có ý nghĩa .. nó phải là %% i. Tôi nghĩ rằng điều này có thể làm việc mà không sử dụng mở rộng chậm trễ nếu mô tả của bạn về vấn đề này tốt hơn một chút. – djangofan