Removing spaces from a variable in batch
batch-file, spaces, variables
Solution
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: =!`.
Problem
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?