我发现这里似乎是对我问题的解释
但我真的不明白这个解释.
这是我的剧本......
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 ]
)
Run Code Online (Sandbox Code Playgroud)
)
echo始终打印文件:*.sql,我传递此var的脚本总是抱怨LOAD_FILE_FILTER为空.
我尝试setlocal EnableDelayedExpansion按照文章中的建议添加,但它没有解决问题.将echo file: %!LOAD_FILE_FILTER%始终打印在我运行的目录中的最后一个子目录.将echo %%f始终打印正确的值.
什么是'!' 变量背后为我做什么?
另外,有人可以向我解释两者之间的区别
SET!VAR和SET VAR
%VAR &&!VAR&!VAR!%% VAR