有人可以给我一个例子,说明批处理脚本在有或没有延迟扩展的情况下会有不同的行为吗?您是否有任何不希望使用延迟扩展的情况?谢谢.
我的批处理脚本需要帮助.它运行得很好,但是后来当我想要运行它时,不断重复我之前显示的结果.例如,我上周执行了一个程序,呼叫运行echo"程序在上周开始运行",当我今天试图通过echo"This is today"运行它.它运行并显示以前的结果"
PS代码现在完美运行.... @echo off
SETLOCAL ENABLEDELAYEDEXPANSION
set file="C:\compress.gdb"
if not exist %file% goto :EOF
FOR %%A IN (%file%) DO set size=%%~zA
>"%temp%\math.vbs" echo Set objArgs = WScript.Arguments: num = objArgs(0) : result = 0
>>"%temp%\math.vbs" echo if num ^> 1073741824 then result=1
>>"%temp%\math.vbs" echo if num ^> 6442450944 then result=2
>>"%temp%\math.vbs" echo Wscript.echo result
for /f %%a in ('cscript /nologo "%temp%\math.vbs" %size% ') do set z=%%a
del "%temp%\math.vbs"
:: z will be 2 if %size% greater than 6442450944 …
Run Code Online (Sandbox Code Playgroud) 我发现这里似乎是对我问题的解释
但我真的不明白这个解释.
这是我的剧本......
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