I am writing a file to remove spaces from filenames in a folder and then put the result in a .txt
file. I just get a result of "Echo is on." over and over.
This is what I have so far:
@echo ON
SET LOCAL EnableDelayedExpansion
For %%# in (*.*) do (
SET var=%%~n#
Set MyVar=%var%
set MyVar=%MyVar: =%
echo %MyVar%>>text.txt
)
Can someone tell me whats wrong?
The reason why you are getting ECHO is on.
is because delayed expansion was not used, which caused the value of %var%
and %MyVar%
to be inserted before the for
command is run, and since they were not defined at the start, empty variables were inserted in. When the echo %MyVar%>>text.txt
was run, it was interpreted as echo >>text.txt
. When echo is run without any arguments, it outputs whether echo is on or off, which is what you get in text.txt
.
To fix the problem, you have to do two things:
First, there is something wrong with your second line. There is no space between set and local in setlocal
. The second line should be SETLOCAL EnableDelayedExpansion
.
Second, to use delayed expansion, you have to replace all %
s in each variable with !
, like !var!
instead of %var%
.
End result:
@echo ON
SETLOCAL EnableDelayedExpansion
For %%# in (*.*) do (
SET var=%%~n#
Set MyVar=!var!
set MyVar=!MyVar: =!
echo !MyVar!>>text.txt
)
You actually do not need to use a temporary variable in this case, you can just do SET MyVar=%%~n#
and skip to set MyVar=!MyVar: =!
.