Der Grund txt, warum Sie ECHO is on.
bekommen ist, weil verzögerte Expansion nicht war verwendet, wodurch der Wert %var%
und %MyVar%
eingefügt wurde, bevor der Befehl for
ausgeführt wurde, und da sie nicht am Anfang definiert waren, wurden leere Variablen eingefügt. Wenn echo %MyVar%>>text.txt
ausgeführt wurde, wurde er als echo >>text.txt
interpretiert. Wenn das Echo ohne Argumente ausgeführt wird, gibt es aus, ob Echo ein- oder ausgeschaltet ist. Dies erhalten Sie in text.txt
.
das Problem zu beheben, haben Sie zwei Dinge zu tun:
Erstens gibt es etwas falsch mit Ihrer zweiten Zeile. In setlocal
gibt es keinen Platz zwischen Set und Local. Die zweite Zeile sollte SETLOCAL EnableDelayedExpansion
sein.
Zweitens verzögerte Expansion zu verwenden, müssen Sie mit !
, wie !var!
statt %var%
alle %
s in jede Variable ersetzen.
Endergebnis:
@echo ON
SETLOCAL EnableDelayedExpansion
For %%# in (*.*) do (
SET var=%%~n#
Set MyVar=!var!
set MyVar=!MyVar: =!
echo !MyVar!>>text.txt
)
Sie brauchen eigentlich keine temporäre Variable in diesem Fall verwenden, können Sie einfach SET MyVar=%%~n#
tun und zu set MyVar=!MyVar: =!
überspringen.
Nennen Sie die Batch-Datei echo.bat/cmd? – foxidrive