你得到的原因ECHO is on.
是因为没有使用延迟扩展,这导致在命令运行之前插入%var%
and的值,并且由于它们在开始时没有定义,所以插入了空变量。运行时,它被解释为. 当 echo 在没有任何参数的情况下运行时,它会输出 echo 是打开还是关闭,这就是你在.%MyVar%
for
echo %MyVar%>>text.txt
echo >>text.txt
text.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: =!
.