2011-06-27 41 views
11

Tôi đang cố gắng in ra một số ngẫu nhiên nhiều lần nhưng trong vòng lặp mà tôi sử dụng, nó không đặt lại biến. Đây là mã của tôi.Biến ngẫu nhiên không thay đổi trong "vòng lặp" trong tệp lô cửa sổ

@echo off 


for %%i in (*.txt) do (

set checker=%Random% 
echo %checker% 
echo %%i% >> backupF 

) 


echo Complete 

Có 5 tệp văn bản và vì vậy tôi muốn in 5 số ngẫu nhiên khác nhau nhưng chỉ in cùng một số ngẫu nhiên 5 lần. Mọi sự trợ giúp sẽ rất được trân trọng. Cảm ơn!

+0

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

Trả lời

15

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).

+0

Cảm ơn bạn rất nhiều. Tôi đã viết một trình bao Linux và tôi đang cố gắng chuyển nó sang Windows, vì vậy tôi hơi chậm một chút về cú pháp. Tôi thực sự đánh giá cao nó mặc dù. Cảm ơn một lần nữa! – mike

0

trên hệ thống của tôi, tôi phải viết

set checker=Random 

thay vì

set checker=!Random! 
Các vấn đề liên quan