establecer declaraciones no parecen funcionar en mi archivo por lotes
He encontrado lo que parece ser una explicación de mi problema aquí.
Lote de DOS: ¿Por qué mis comandos de configuración no permiten que se almacene nada?
pero realmente no entiendo la explicación.
Aquí está mi guión ...
for /R /d %%f in (\Product\Database\SQL\Project\Model\Scripts\*) DO (
REM echo %%f
SET !LOAD_FILE_FILTER= %%f\*.sql
echo file: %!LOAD_FILE_FILTER%
CALL %!BATCH_FILE% -u %!USER_NAME% -p %!PASSWORD% -s %!SERVER_NAME% -d %!DATABASE_NAME% -f %!LOAD_FILE_FILTER% -o %!LOG_FILE%
IF %!EchoErrors%==1 (
ECHO [
TYPE %!LOG_FILE%
ECHO ]
)
)
El eco siempre imprime el archivo: * .sql y el script al que le paso esta var siempre se queja LOAD_FILE_FILTER está vacío.
He intentado agregarsetlocal EnableDelayedExpansion
como se sugiere en el artículo, pero no resuelve el problema. losecho file: %!LOAD_FILE_FILTER%
siempre imprime el último subdirectorio en el directorio desde el que estoy ejecutando. losecho %%f
siempre imprime el valor correcto.
Lo que hace el '!' detrás de la variable hacer para / para mí?
En una nota al margen, ¿podría alguien explicarme la diferencia entre
SET! VAR y SET VAR
% VAR & &! VAR &! VAR! %% VAR