如何使用 windows 批处理将 postgresql 查询的输出循环到变量中

How to loop in output of postgresql query into a variable using windows batch

我有一个多行 SQL 代码,我想在其中将具有多行的单列存储到一个变量中。有人可以帮我吗? 我是批处理和学习的新手,但这是我遇到的困难。

这是我的 SQl 批量查询的样子:

SQl 查询: Select 邮箱,用户名 来自表 1、表 2、表 3 其中 table1.id = table2.id 和 table1.id=table3.id 和 table1.somefilter 和 table2.somefilter; 我将相同的输出存储到下面表示为 "C:\filelocation"

的文件夹中

psql -d 数据库 -p 8000 -U 用户名 -t -A -f C:\filelocation -o "C:\text.txt"

输出: abc@abc.com abc xyz@abc.com xyz

这是电子邮件地址及其相关用户名的列表。所以,我想把它们放在一个变量中。

我正在使用 -f,因为它是一个包含 2 个不同列和多个行的多行 sql 查询。

我已经设法将查询的输出放到一个文件夹中,但我真正想要的是我想将它们循环到一个变量中。

谢谢

我想输出应该是

abc@abc.com abc 
xyz@abc.com xyz
...

您只需要像

那样解析输出文件
for /f "tokens=1,2 delims= " %%a in (C:\text.txt) do (
  echo(Email address is: %%a
  echo(Username is:      %%b
)

或者,如果您想将它们抓取到变量中

setlocal enabledelayedexpansion

rem grab fields into variables 
set /a counter=0
for /f "tokens=1,2 delims= " %%a in (C:\text.txt) do (
  set /a counter+=1
  set "eMail_!counter!=%%a"
  set "uName_!counter!=%%b"
)

rem process them
for /L %%i in (1,1,!counter!) do (
  rem whatever you wanna do
  echo(Email address is: !eMail_%%i!
  echo(Username is:      !uName_%%i!
)
Endlocal

如果每一对都在一行中,并且两者之间有一个 space,则此方法有效,如果分隔符是 逗号,只需更改 "tokens=1,2 delims= ""tokens=1,2 delims=,"