我正在使用此批处理文件来备份我的数据库:
@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
当我运行它时,我收到标题中提到的错误。如果我删除我设置文件名称的部分以包含时间,它就可以工作。
答案 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
。