批处理文件运行提示输入密码的软件。我可以让批处理文件自动填写密码吗?

Batch file runs software which prompts for password. Can I make the batch file automatically fill in the password?

我的问题并非特定于 PostgreSQL 9.6,但 PostgreSQL 9.6 是我尝试 运行 的软件,因此我将以它为例。我也在 运行宁 Windows 10.

编辑:Magoo 给出了一个非常 PostgreSQL 具体的答案。如果其他人可以给出更通用的答案,那么我将更改哪个是该答案的公认答案。

我运行在批处理文件中添加以下代码:

@echo off
SET/P file=Select file:
@echo on
"%~dp0\psql.exe" -W -h [IP adress] -d [databasename] -U [username] -f [file1]
"%~dp0\osm2pgsql-bin\osm2pgsql.exe" --slim --drop --latlong --keep-coastlines --multi-geometry --hstore -S [file2] --tag-transform-script [file3] -W -U gisuser -H [IP adress] -d [databasename] "%file%"
"%~dp0\psql.exe" -W -h [IP adress] -d [databasename] -U [username] -f [file4]
"%~dp0\psql.exe" -W -h [IP adress] -d [databasename] -U [username] -f [file5]
"%~dp0\psql.exe" -W -h [IP adress] -d [databasename] -U [username] -f [file6]
@echo off
pause
@echo on

(括号内的所有内容都是硬编码值。)

psql.exeosm2pgsql.exe 启动时,它们会提示输入密码。这本身没问题,但如果使用它们 运行 多次,它会强制用户多次输入密码。 osm2pgsql 也是一个需要很长时间的过程,因此用户必须在两次输入密码之间等待。

我想做的是提示用户输入密码一次,然后在 psql.exe 和 osm2pgsql.exe 提示输入密码时 运行ning 时自动输入该密码。

我尝试过但没有成功:


出于好奇,上面的代码应该对 PostgreSQL 数据库中的多个表进行 DROP CASCADE(file1 中的 SQL 代码),然后从 OpenStreetMap 数据重新创建这些表,并且然后最后在同一数据库中创建多个视图(SQL 文件 4、5 和 6 中的代码)。

来自 psql.exe

命令行执行的 PostgreSQL 页面

-w --无密码

永远不要发出密码提示。如果服务器需要密码验证并且无法通过其他方式(例如 .pgpass 文件获得密码,则连接尝试将失败。此选项在没有用户输入密码的批处理作业和脚本中很有用。

请注意,此选项将在整个会话期间保持设置状态,因此它会影响元命令 \connect 的使用以及初始连接尝试。

所以,我建议使用 .pgpass 文件...

一种可能是使用脚本语言,如 Autoit 或 Autohotkey。

> AutoIt

AutoIt v3 是一种类似 BASIC 的免费软件脚本语言,设计用于自动化 Windows GUI 和一般脚本。它使用模拟击键、鼠标移动和 window/control 操作的组合,以便以其他语言(例如 VBScript 和 SendKeys)不可能或不可靠的方式自动执行任务。 AutoIt 也非常小,自包含并且将 运行 在 Windows 的所有版本上开箱即用,不需要烦人的“运行 次”!

>

您可以创建一个脚本,该脚本随您的批处理一起启动,并在后台等待特定的 windows 对话框(密码对话框) 如果对话框被识别,您可以询问密码,将其存储在变量中并在所有后续对话框调用中自动填写。