使用批处理获取csv文件并在sql语句中使用它

时间:2018-01-19 08:35:16

标签: postgresql batch-file psql

我有一个将csv文件复制到表中的sql文件(import_noeud.sql)。

\copy public.import_noeud FROM 'T:\Affaires\102\171205_noeud.csv' DELIMITER ';' CSV;

然后我使用带有psql语句的批处理文件来启动我的sql文件。

psql -h localhost -U postgres -d dev -v ON_ERROR_STOP=1 -f import_noeud.sql> 01.log 2>&1

目前,每次用户想重新导入新点时,都必须修改sql文件的from子句。

我的问题是,我的批处理文件可以:

  • 打开Windows资源管理器
  • 要求用户提取csv文件
  • 存储结果(例如'T:\ Affaires \ 102 \ 171205_noeud.csv')
  • 使用结果
  • 启动sql文件

1 个答案:

答案 0 :(得分:0)

让我们将vbs合并到.bat.cmd批处理文件中。 vbs用于选择文件。 将vbscmd文件保存在同一目录中。

<强> import.vbs

Set wShell=CreateObject("WScript.Shell")
Set oExec=wShell.Exec("mshta.exe ""about:<input type=file id=FILE><script>FILE.click();new ActiveXObject('Scripting.FileSystemObject').GetStandardStream(1).WriteLine(FILE.value);close();resizeTo(0,0);</script>""")
myFile = oExec.StdOut.ReadLine
wscript.echo myFile

<强> runme.cmd

@echo off
for /f "tokens=*" %%a in ('cscript //nologo import.vbs') do (set "VBSoutput=%%a")
echo \copy public.import_noeud FROM '%VBSoutput%' DELIMITER ';' CSV; > SOME_IMPORT.sql

现在您可以运行批处理文件,该文件将打开选择要打开的文件窗口。选择 open 后,它会选择该文件并自动将其echo \copy...推送到.sql文件。所以,假设您浏览并选择:

T:\Affaires\102\171205_noeud.csv

它会将以下内容回显给sql文件,在这种情况下名为SOME_IMPORT.sql

\copy public.import_noeud FROM 'T:\Affaires\102\171205_noeud.csv' DELIMITER ';' CSV;

如果您喜欢批处理文件,也可以添加SQL文件的启动。

如果您决定更改vbs脚本的名称,请确保您也在批处理字符串('cscript //nologo import.vbs')

中更改它

希望它有所帮助。