Согласно моему комментарию…
Основная проблема с вашим кодом заключается в том, что вы не следовали инструкциям по использованию команды Set
.Открытие окна командной строки и ввода set /?
должно быть достаточным, чтобы узнать, как использовать эту команду, из вывода .
В настоящее время ваша переменная %print_time %
не %print_time%
, потому что пробелы по обе стороны от =
включены как в имя, так и в значение переменной.Фактически вам нужно изменить set print_time = %mydate%_%mytime%
на set print_time=%mydate%_%mytime%
.
Кроме того, рекомендуется использовать кавычки для защиты пробелов и других «ядовитых» символов в ваших строках.Когда дело доходит до установки переменной, рекомендуемый синтаксис - Set "VariableName=Variable Value"
, поэтому вы должны использовать Set "print_time=%mydate%_%mytime%"
.Также, хотя это и необязательно с указанным путем, безопаснее заключить переменную %DIR%
также в кавычки, (это будет означать, что любое изменение пути назначения, возможно введение пробелов или амперсандов, не повлияет на остальныекода) .Поэтому вы должны сделать это в ваших командных строках MkDir
и mongodump
, таким образом:
@Echo Off
For /F "Tokens=2-4Delims=/ " %%A In ('Date /T')Do Set "MyDate=%%C-%%A-%%B"
For /F "Delims=:" %%A In ('Time /T')Do Set "MyTime=%%A"
Set "print_time=%MyDate%_%MyTime%"
Set "DIR=%print_time%"
Set "DEST=D:\MongoDB\db_backup\%DIR%"
MkDir "%DEST%" 2>NUL
mongodump -h 127.0.0.1:27017 -d DW -u [user] -p [password] -o "%DEST%"
Методы, использованные при создании строки даты и времени, не очень надежны, поскольку результаты Date
и Time
с опцией /T
зависят от локали / ПК / пользователя.Я бы посоветовал вам использовать метод, которого нет, поэтому предложите решение, которое вместо этого использует RoboCopy
.Кроме того, следующее определяет только одну переменную в достижении вашей цели вместо пяти:
@Echo Off
Set "DEST="
For /F "Tokens=1-4Delims=/: " %%A In ('RoboCopy /NJH /L "\|" Null')Do If Not Defined DEST Set "DEST=D:\MongoDB\db_backup\%%A-%%B-%%C_%%D"
If Not Defined DEST GoTo :EOF
MD "%DEST%" 2>NUL
mongodump -h 127.0.0.1:27017 -d DW -u [user] -p [password] -o "%DEST%"