Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 在一行中设置环境变量和执行命令的最佳方法_Windows_Postgresql_Cmd_Environment Variables_Command Line Interface - Fatal编程技术网

Windows 在一行中设置环境变量和执行命令的最佳方法

Windows 在一行中设置环境变量和执行命令的最佳方法,windows,postgresql,cmd,environment-variables,command-line-interface,Windows,Postgresql,Cmd,Environment Variables,Command Line Interface,我想使用PostGreSQL pg_dump命令进行备份,命令行如下: "<c:\Program Files\PostgreSQL\9.6\bin\pg_dump>" -h localhost -p 5432 -d test_backup_bat -U user -f D:\destination_backup\test.backup 如何仅在一个命令行中将此设置为Windows CLI?要设置: SET PGPASSWORD=mypasssword 要验证: echo %PGP

我想使用PostGreSQL pg_dump命令进行备份,命令行如下:

"<c:\Program Files\PostgreSQL\9.6\bin\pg_dump>" -h localhost -p 5432 -d test_backup_bat -U user -f D:\destination_backup\test.backup
如何仅在一个命令行中将此设置为Windows CLI?

要设置:

SET PGPASSWORD=mypasssword
要验证:

echo %PGPASSWORD%

设置变量并在批处理文件或命令行中的同一行中使用它可能会很棘手,因为在设置变量之前会解析完整的行/命令

但是,在您的情况下,您不需要做任何特殊的事情,因为除了设置变量之外,您不需要在命令中使用变量。pg_dump只是从父cmd进程继承的环境块中读取环境变量的内容。如果父进程定义了变量,那么pg_dump可以从它自己的副本中读取它

因此,您只需要两个命令,一个用于设置变量,另一个用于在同一行内启动新进程,一个接一个地执行。这是通过&operator完成的:

set PGPASSWORD=myPassword&c:\Program Files\PostgreSQL\9.6\bin\pg\U dump-h localhost-p 5432-d test\U backup\U bat-U user-f d:\destination\U backup\test.backup
1.cmd/V/C set PGPASSWORD=5432^&pg_dump-h localhost-p!密码-d test\U backup\U bat-U user-f d:\destination\U backup\test.backup,或2。设置PGPASSWORD=5432并调用pg\U dump-h localhost-p%^PGPASSWORD%-d test\U backup\U bat-U user-f d:\destination\U backup\test。backup@aschipfl-这是否需要提前使用SETLOCAL ENABLEDELAYEDEXPANSION语句?不,这是/V 1的要求。或者打电话2。这是给你的。无论如何,我猜我误解了5432作为您命令行中的密码,这似乎是错误的抱歉,我不知道pg_dump…我见过set PGPASSWORD=myPassword与set PGPASSWORD=myPassword行为不同的情况,请注意引号。你知道为什么会这样吗?我似乎找不到有关的文档it@solstice333,引号避免了使用特殊字符时转义的要求,也避免了在值中包含附加的结尾空格。这种类型的引用是使用set命令将错误最小化的常用方法。你可能会遇到问题,你可以处理它,当有一个引号内的值分配,但否则它应该工作。我明白了。但是如果不使用特殊字符,也不需要尾随空格,那么语义应该完全相同,对吗?为了提供一些上下文,我看到了执行set-XPDeprecationWarning=false&&nmake-foo与set-XPDeprecationWarning=false&&nmake-foo的不同结果,前者有一个警告,后者没有警告。似乎有点奇怪。@solstice333,行set XPDeprecationWarning=false&&nmake foo包含一个空格,在变量末尾的false和&&之间的空格,而set XPDeprecationWarning=false&&nmake foo不包含空格。
echo %PGPASSWORD%