Il motivo per cui si stanno ottenendo ECHO is on.
è perché l'espansione in ritardo non era utilizzato, che ha causato l'inserimento del valore di %var%
e %MyVar%
prima dell'esecuzione del comando for
e poiché non erano definiti all'avvio, le variabili vuote sono state inserite in. Quando è stato eseguito il echo %MyVar%>>text.txt
, è stato interpretato come echo >>text.txt
. Quando echo viene eseguito senza argomenti, emette se l'eco è attivato o disattivato, che è ciò che ottieni in text.txt
.
Per risolvere il problema, è necessario fare due cose:
In primo luogo, v'è qualcosa di sbagliato con la seconda linea. Non c'è spazio tra set e locale in setlocal
. La seconda riga deve essere SETLOCAL EnableDelayedExpansion
.
In secondo luogo, per usare l'espansione ritardata, è necessario sostituire tutte %
s in ogni variabile con !
, come !var!
invece di %var%
.
Risultato finale:
@echo ON
SETLOCAL EnableDelayedExpansion
For %%# in (*.*) do (
SET var=%%~n#
Set MyVar=!var!
set MyVar=!MyVar: =!
echo !MyVar!>>text.txt
)
In realtà non è necessario utilizzare una variabile temporanea in questo caso, si può solo fare SET MyVar=%%~n#
e saltare al set MyVar=!MyVar: =!
.
hai chiamato il file batch echo.bat/cmd? – foxidrive