如何使用 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=,"
我有一个多行 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=,"