为什么我得到pg_dump:备份批处理文件上的命令行参数错误太多了?

时间:2014-06-25 16:38:47

标签: postgresql batch-file

我正在使用此批处理文件来备份我的数据库:

    @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 个答案:

答案 0 :(得分: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