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

Windows 批处理文件运行提示输入密码的软件。我可以让批处理文件自动填写密码吗?,windows,batch-file,password-prompt,Windows,Batch File,Password Prompt,我的问题不是针对PostgreSQL 9.6的,但PostgreSQL 9.6是我尝试运行的软件,因此我将使用它作为示例。我也在Windows10上运行 编辑:Magoo给出了一个非常特定于PostgreSQL的答案。如果其他人能给出一个更一般的答案,那么我会改变这个答案 我正在批处理文件中运行以下代码: @echo off SET/P file=Select file: @echo on "%~dp0\psql.exe" -W -h [IP adress] -d [databasename]

我的问题不是针对PostgreSQL 9.6的,但PostgreSQL 9.6是我尝试运行的软件,因此我将使用它作为示例。我也在Windows10上运行

编辑: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.exe
osm2pgsql.exe
启动时,它们会提示输入密码。这本身没什么问题,但是当它们运行多次时,它会强制用户多次输入密码。osm2pgsql也是一个需要很长时间的过程,因此用户必须在两次之间等待输入密码

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

我尝试过,但没有成功:



出于好奇,上面的代码应该在PostgreSQL数据库中级联一些表(文件1中的SQL代码),然后从OpenStreetMap数据重新创建这些表,最后在同一数据库中创建一些视图(文件4、5和6中的SQL代码)。

从命令行执行psql.exe的PostgreSQL页面

-w --没有密码

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

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


因此,我建议使用.pgpass文件…

一种可能是使用Autoit或Autohotkey之类的脚本语言

> 奥托伊特

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

>

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

SET/p hostname=Host:SET/p port=port:SET/p database=database:SET/p username=username:SET/p password=password:(echo%hostname%:%port%:%database%:%username%:%password%)>%APPDATA%\postgresql\pgpass.conf“%APPDATA%\postgresql\pgpass.conf”
谢谢。这对我来说很有用。现在也许我应该想办法隐藏密码……这是一个非常特定于postgresql的答案。如果其他人能给出更一般的答案,我将不胜感激。