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

Fetching csv file with batch and use it in sql statement

我有一个 sql 文件 (import_noeud.sql),它将 csv 文件复制到 table。

\copy public.import_noeud FROM 'T:\Affaires21205_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 子句。

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

让我们将 vbs 合并到 .bat.cmd 批处理文件中。 vbs 用于select 文件。 将 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

现在您可以 运行 批处理文件,它将打开 选择要打开的文件 window。一旦 selected 并且您选择 open,它将 select 文件并自动将其推送到 echo \copy....sql 文件。假设您浏览到 select:

T:\Affaires21205_noeud.csv

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

\copy public.import_noeud FROM 'T:\Affaires21205_noeud.csv' DELIMITER ';' CSV;

如果您愿意,也可以将 SQL 文件的启动添加到批处理文件中。

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

希望对您有所帮助。