批量获取 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 子句。
我的问题是,我的批处理文件可以吗:
- 打开 windows 资源管理器
- 要求用户获取 csv 文件
- 存储结果(例如'T:\Affaires21205_noeud.csv')
- 使用结果启动 sql 文件
让我们将 vbs
合并到 .bat
或 .cmd
批处理文件中。 vbs
用于select 文件。
将 vbs
和 cmd
文件保存在同一目录中。
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')
希望对您有所帮助。
我有一个 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 子句。
我的问题是,我的批处理文件可以吗:
- 打开 windows 资源管理器
- 要求用户获取 csv 文件
- 存储结果(例如'T:\Affaires21205_noeud.csv')
- 使用结果启动 sql 文件
让我们将 vbs
合并到 .bat
或 .cmd
批处理文件中。 vbs
用于select 文件。
将 vbs
和 cmd
文件保存在同一目录中。
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')
希望对您有所帮助。