你得到的原因ECHO is on.是因为没有使用延迟扩展,这导致在命令运行之前插入%var%and的值,并且由于它们在开始时没有定义,所以插入了空变量。运行时,它被解释为. 当 echo 在没有任何参数的情况下运行时,它会输出 echo 是打开还是关闭,这就是你在.%MyVar%forecho %MyVar%>>text.txtecho >>text.txttext.txt
要解决此问题,您必须做两件事:
首先,您的第二行有问题。在 set 和 local in 之间没有空格setlocal。第二行应该是SETLOCAL EnableDelayedExpansion.
其次,要使用延迟扩展,您必须将%每个变量中的所有 s替换为!, 就像!var!而不是%var%。
最终结果:
@echo ON
SETLOCAL EnableDelayedExpansion
For %%# in (*.*) do (
SET var=%%~n#
Set MyVar=!var!
set MyVar=!MyVar: =!
echo !MyVar!>>text.txt
)
在这种情况下,您实际上不需要使用临时变量,您只需执行 SET MyVar=%%~n#并跳至set MyVar=!MyVar: =!.