Lý do tại sao bạn đang nhận được ECHO is on.
là vì trì hoãn việc mở rộng không được sử dụng, gây ra giá trị %var%
và %MyVar%
được chèn trước khi lệnh for
được chạy và vì chúng không được xác định lúc bắt đầu, các biến trống được chèn vào. Khi số echo %MyVar%>>text.txt
được chạy, nó được hiểu là echo >>text.txt
. Khi echo được chạy mà không có bất kỳ đối số nào, nó sẽ xuất ra cho dù echo đang bật hay tắt, đó là những gì bạn nhận được trong text.txt
.
Để khắc phục sự cố, bạn phải làm hai việc:
Đầu tiên, có điều gì đó sai với dòng thứ hai của bạn. Không có khoảng trắng giữa bộ và địa phương ở số setlocal
. Dòng thứ hai phải là SETLOCAL EnableDelayedExpansion
.
Thứ hai, để sử dụng mở rộng trễ, bạn phải thay thế tất cả %
s trong mỗi biến với !
, như !var!
thay vì %var%
.
End kết quả:
@echo ON
SETLOCAL EnableDelayedExpansion
For %%# in (*.*) do (
SET var=%%~n#
Set MyVar=!var!
set MyVar=!MyVar: =!
echo !MyVar!>>text.txt
)
Bạn thực sự không cần phải sử dụng một biến tạm thời trong trường hợp này, bạn chỉ có thể làm SET MyVar=%%~n#
và skip to set MyVar=!MyVar: =!
.
Bạn có gọi tệp lô là echo.bat/cmd không? – foxidrive