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?

Original source