Как запустить пакетный файл для PostgreSQL из любого места?

Я пытаюсь запустить пакетный файл для базы данных PostgreSQL и сервера, который я использую:

@ECHO ON
@SET PATH="%~dp0";%PATH%
@SET PGDATA=%~dp0\data
@SET PGUSER=postgres
@SET PGPORT=5432
@SET PGLOCALEDIR=%~dp0\share\locale
"%~dp0initdb" -U postgres -D %~dp0/data -E UTF8
"%~dp0pg_ctl" -w -D "%~dp0/data" -l logfile start
psql.exe -U postgres -f C:\pgsql\bin\db_create.sql postgres
"%~dp0pg_ctl" -D "%~dp0/data" stop

это прекрасно работает, если каталог командного файла и папка postgres находятся в:

C:\pgsql\bin

но если каталог командного файла и папка postgres находятся где-то еще, например:

C:\Program Files (x86)\Мое приложение\Мое приложение\bin

пакет не будет работать и выдает ошибку:

введите здесь описание изображения


person Hamza Benzaoui    schedule 24.08.2016    source источник


Ответы (1)


Вы не указали свои пути:

"%~dp0initdb" -U postgres -D "%~dp0/data" -E UTF8
                             ^----------^---missing

Если бы вы действительно прочитали сообщение об ошибке «Слишком много аргументов, сначала файлы», вы бы увидели это.

person Marc B    schedule 24.08.2016
comment
о, я не заметил, потому что он отлично работает в C:\pgsql\bin, и теперь он дает мне другую ошибку: создание каталога C:/Program Files (x86)/My App/My App/bin/data ... initdb : не удалось создать каталог C:/Program Files (x86)/My App/My App/bin/data: разрешение отклонено, как я могу это решить, пожалуйста - person Hamza Benzaoui; 24.08.2016
comment
@HamzaGeeK не помещайте каталог данных в Program Files. Этот каталог защищен по какой-то причине. - person a_horse_with_no_name; 24.08.2016