Windows下Bat文件执行pg_dump/pg_restore报错的解决咨询
问题解决方法
错误根源是路径包含空格时未加引号,Windows批处理会将空格前的部分识别为单独命令,导致报错。以下是修正后的脚本及关键说明:
修正后的Bat脚本
@echo off :: 切换目录时给带空格的路径加双引号 cd "C:\Program Files\pgAdmin 4\v6\runtime" :: start命令需添加空标题,避免路径被误判为窗口标题 start "" pg_dump.exe --file "C:\Users\ADMINI~1\Desktop\dialpad.sql" --host "host1" --port "5432" --username "warehouse" --no-password --verbose --format=c --blobs --schema "dialpad" "pangea_warehouse_production" SET "PGPASSWORD=xxxxxxxxxxxxxxx" start "" psql --host=host2 --port=5432 --dbname=pangea_warehouse_production --username=warehouse --command="DROP SCHEMA IF EXISTS dialpad CASCADE;CREATE SCHEMA IF NOT EXISTS dialpad AUTHORIZATION warehouse;GRANT USAGE ON SCHEMA dialpad TO reporting;GRANT ALL ON SCHEMA dialpad TO warehouse;" start "" pg_restore.exe --host "host2" --port "5432" --username "warehouse" --dbname "pangea_warehouse_production" --verbose --schema "dialpad" "C:\Users\ADMINI~1\Desktop\dialpad.sql"
关键修正点
- cd命令加引号:带空格的目录路径必须用双引号包裹,否则批处理会拆分路径为多个无效命令。
- start命令添加空标题:
start的语法为start ["窗口标题"] 命令,如果直接跟带空格的程序路径,会被误判为窗口标题。添加""作为空标题,确保后续内容被识别为要执行的命令。 - 保留变量设置的引号:原
SET "PGPASSWORD=xxx"的写法正确,能避免密码含特殊字符时出现解析错误。
内容的提问来源于stack exchange,提问作者Yang L
相关产品推荐
相关产品推荐

