2014-06-25 36 views
0

我使用這個批處理文件來備份我的數據庫:爲什麼我會得到pg_dump:備份批處理文件中的命令行參數錯誤太多?

@echo off 
    for /f "tokens=1-4 delims=/ " %%i in ("%date%") do (
    set dow=%%i 
    set month=%%j 
    set day=%%k 
    set year=%%l 
    ) 
    for /f "tokens=1-2 delims=/:" %%a in ('time /t') do (
    set time=%%a%%b 
    ) 
    set datestr=%month%_%day%_%year%_%time% 
    echo datestr is %datestr% 

    set BACKUP_FILE=C:\database_files\db_backup\DailyBackup_%datestr%.backup 
    echo backup file name is %BACKUP_FILE% 
    SET PGPASSFILE=C:\Users\Administrator\AppData\Roaming\postgresql\pgpass.conf 
    echo on 
    "C:\Program Files\PostgreSQL\9.0\bin\pg_dump" -i -h localhost -p 5432 -U postgres -F c -b -v -f %BACKUP_FILE% databasename 

當我運行它,我得到的標題提到的錯誤。如果我刪除了我設置文件名稱以包含時間的部分,它就可以工作。

+1

文件名中是否有空格?嘗試引用你的參數。 – Tibo

+0

@Tibo你是什麼意思報價參數? –

+1

在你的參數中使用引號,例如:''pg_dump -p foo「%BACKUP_FILE%」'否則shell會擴展你的文件名(使用它的空格)和''pg_dump''會看到多個參數。 – Tibo

回答

0

我重複Tibo的正確答案,以便從未回答的問題列表中刪除此問題。

在提問者的計算機上執行的命令time /t返回時間字符串 AM PM結束。請注意AM/PM之前的空格字符。

這意味着,同樣的環境變量的字符串值時間datestr最後BACKUP_FILE包含空格字符。

因此,"%BACKUP_FILE%"必須在最後一行使用以獲取整個文件名,其中包含空格字符的路徑讀取爲1參數,而不是2個參數,因爲AM/PM留下了空格字符。

注意:命令time /t輸出的時間字符串格式取決於Windows區域和語言設置中定義的時間格式。例如,使用24小時制格式,僅輸出17:45而不是05:45 PM

相關問題