Я не знаю, является ли последняя рассматриваемая командная строка действительно правильной.У меня есть некоторые сомнения в выводе этой строки.
Но этот код можно использовать для получения имени новейшего * .zip-файла в соответствии с датой последней модификации без пути.
@echo off
set "BackupFolder=D:\Romexis_Bilder\romexis_SQL_Backup"
for /F "eol=| delims=" %%I in ('dir "%BackupFolder%\Romexis_db*.zip" /A-D-H /B /O-D /TW 2^>nul') do set "NewestFile=%%I" & goto DatabaseRestore
echo ERROR: Could not find any *.zip backup file in folder:
echo "%BackupFolder%"
echo/
pause
goto :EOF
:DatabaseRestore
cd /D "%ProgramFiles(x86)%\Pranas.NET\SQLBackupAndFTP"
SqlRestore.exe "%BackupFolder%\%NewestFile%" -db Romexis_db -srv .\ROMEXIS -pwd password disconnect Romexis_db
echo/
pause
FOR выполняется в отдельном командном процессе, запущенном с cmd.exe /C
в фоновом режиме командной строки:
dir "D:\Romexis_Bilder\romexis_SQL_Backup\*.zip" /A-D-H /B /O-D /TW 2>nul
DIR выводит для обработки STDOUT фонаКомандный процесс
- только имена не скрытых файлов из-за
/A-D-H
(атрибут не каталог и не скрытый) - в голом формате из-за
/B
только имя файла с файломрасширение, но без пути к файлу - отсортировано в обратном порядке (сначала самое новое) по дате из-за
/O-D
- с использованием времени записи (время последней модификации) из-за
/TW
- в каталоге
D:\Romexis_Bilder\romexis_SQL_Backup
, соответствующем шаблону Romexis_db*.zip
.
Я рекомендую запустить эту командную строку в окне командной строки, чтобы хотя бы раз увидеть, что DIR выводит.
DIR выведет сообщение об ошибкевозраст для обработки STDERR в случае, если * .zip-файл не найден или каталог не существует вообще.Это сообщение об ошибке подавляется путем перенаправления его на устройство NUL .
Прочтите также статью Microsoft о Использование операторов перенаправления команд для объяснения 2>nul
.Оператор перенаправления >
должен быть экранирован с помощью символа вставки ^
в командной строке FOR , чтобы интерпретироваться как литеральный символ, когда интерпретатор команд Windows обрабатывает эту командную строку перед выполнением команды FOR , котораявыполняет встроенную командную строку dir
в отдельном командном процессе, запущенном в фоновом режиме.
FOR захватывает выходные данные, записанные в STDOUT , и обрабатывает выходные данные построчно сигнорирование пустых строк, которых здесь нет, поскольку DIR с параметром /B
не выводит пустых строк.
FOR с параметром /F
игнорирует запуск строкс точкой с запятой по умолчанию.По этой причине символ конца строки переопределяется с eol=|
из ;
на вертикальную черту, которую имена файлов не могут содержать.eol=|
в этом случае не требуется, поскольку шаблон имени файла Romexis_dbYYYMMDDhhmm.zip
делает маловероятным, чтобы имя файла начиналось с точки с запятой.
FOR с параметром /F
будет разделятьвверх строк в подстроки, используя пробел / табуляцию в качестве разделителя и назначив для каждой строки только первую строку, разделенную пробелом / табуляцией, для указанной переменной цикла I
.Это поведение разделения строки отключается путем указания пустого списка разделителей с delims=
.delims=
в этом случае не требуется, поскольку шаблон имени файла Romexis_dbYYYMMDDhhmm.zip
делает маловероятным, чтобы имя файла содержало символ пробела.
Имя файла, выводимого первым, DIR который является новейшим ZIP-файлом в указанном каталоге, назначен переменной среды NewestFile
.И затем цикл FOR завершается с переходом к метке DatabaseRestore
, поскольку все другие имена файлов, выводимые DIR , не представляют интереса для этой задачи.
Командные строки под командной строкой FOR выполняются только в том случае, если в указанном каталоге нет файла * .zip, сообщающего об этом случае непредвиденной ошибки.
Можно также использовать * 1101Командная строка * DIR ниже в командном файле из-за шаблона имени файла Romexis_dbYYYMMDDhhmm.zip
:
dir "%BackupFolder%\Romexis_db*.zip" /A-D-H /B /O-N 2^>nul
Та же самая командная строка для выполнения из окна командной строки:
dir "D:\Romexis_Bilder\romexis_SQL_Backup\*.zip" /A-D-H /B /O-N 2>nul
Порядок имен файлов в выходных данных здесь обратный по имени, что приводит к печати сначала Romexis_db*.zip
с самой новой датой / временем в имени файла благодаря формату даты / времени YYYMMDDhhmm
.
Для пониманияиспользуемые команды и как они работают, откройте окно командной строки, выполните там следующие команды и полностью прочитайте все страницы справки, отображаемые для каждой команды.
cd /?
dir /?
echo /?
for /?
goto /?
pause /?
set /?
См. Также: