Windows批处理:忽略循环内设置的变量

时间:2017-07-05 13:10:00

标签: windows batch-file for-loop

我在Windows批处理(* .bat)文件中使用以下代码来运行多个SQL查询:

set PSTR=QUERY1,QUERY2

for %%a in (%PSTR%) do (

  set START=%date%:%time%
  "C:\Program Files\PostgreSQL\9.4\bin\psql.exe" -f "D:\SQL\%%a.sql" -h localhost -p 5432 -U postgres db_tom
  set END=%date%:%time%
  echo %%a  DEB %DEB%  FIN %FIN% >> "D:\LOGS\log.txt"

echo在log.txt文件中写入以下字符串:

QUERY1 START END
QUERY2 START END

忽略循环内设置的变量。是否有另一种方法来编写此批处理以便记下开始和结束日期时间?

1 个答案:

答案 0 :(得分:0)

setlocal enabledelayedexpansion
for %%a in ...(
 set start=!date!:!time!
 ...
 set end=!date!:!time!
 echo !start! !end!
)

请参阅有关delayed expansion的数百个SO项中的任何一项 - setlocal enabledelayedexpansion调用!var!检索运行时值而不是变量的分析时间值的模式。