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



我的问题不是特定于PostgreSQL 9.6的,但是PostgreSQL 9.6是我尝试运行的软件,所以我将使用它作为我的例子。我也在Windows 10上运行。

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

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

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

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

psql.exeosm2pgsql.exe启动时,他们会提示输入密码。这本身很好,但是当它们运行多次时,它会强制用户多次输入密码。OSM2pgsql也是一个需要很长时间的过程,因此用户必须在两次之间等待才能输入密码。

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

我尝试过但没有成功:https://stackoverflow.com/a/43896549/7398644


对于好奇的人来说,上面的代码应该在PostgreSQL数据库中级联一些表(file1中的SQL代码),然后从OpenStreetMap数据重新创建这些表,然后最终在同一数据库中创建多个视图(file4,5和6中的SQL代码)。

从 PostgreSQL 页面开始命令行执行 psql.exe

-w --无密码

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

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

所以,我建议一个.pgpass文件是要走的路......

一种可能性是使用像Autoit或Autohotkey这样的脚本语言。

>自动

AutoIt v3是一种类似BASIC的免费脚本语言,旨在自动化Windows GUI和通用脚本。它使用模拟击键,鼠标移动和窗口/控件操作的组合,以便以其他语言(例如VBScript和SendKeys)无法实现或可靠的方式自动执行任务。AutoIt也非常小,独立,可以在所有版本的Windows上运行开箱即用,不需要烦人的"运行时"!

>

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