วิธีเรียกใช้แบตช์ไฟล์สำหรับ 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)\My App\My App\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