 |
|
Обработка условий (IF)
Помогите разобраться где допустил ошибку. Может даже как-то можно упростить код:
Код:
@echo off
setlocal enableextensions enabledelayedexpansion
SET f=%~dp0
SET CONS="%f%CONS.exe"
::Формирование usr в скрытом режиме. При ошибке присваиваем значение ErrorAdmUsr=
%CONS% /adm /usr /yes /norunner+ || SET ErrorAdmUsr=Не удалось сформировать usr-файл по ключу /adm /usr
::Задаем переменной %usrnew% полный путь к самому новому *.usr-файлу, а %usrtime% - время его изменения
if exist "%f%RECEIVE\*.USR" (
for /f "delims=" %%i in ('dir /b /a:-d /o:d "%f%RECEIVE\*.USR"') do set usrnew=%%i
set usrnew=%f%RECEIVE\%usrnew%
for %%i in ("%usrnew%") do set usrtime=%%~ti
) else do (
set usrtime=
)
if %ERRORLEVEL%==0 (goto usrtime) else (goto ErrorAdmUsr)
:usrtime
echo Время формирования usr-файла: %usrtime% >> "%f%body.txt"
:ErrorAdmUsr
echo .......... >> "%f%body.txt"
if "%ErrorAdmUsr%"=="Не удалось сформировать usr-файл по ключу /adm /usr" (
echo %ErrorAdmUsr% >> "%f%body.txt"
set WARNING=[ERROR]
)
Почему-то независимо от наличия *.usr файла присваивает usrtime пустое значение. Надо, чтобы usrtime=времени создания этого файла. А так остальное всё работает. Эта часть кода работает нормально, если не применять конструкцию if exist:
Код:
for /f "delims=" %%i in ('dir /b /a:-d /o:d "%f%RECEIVE\*.USR"') do set usrnew=%%i
set usrnew=%f%RECEIVE\%usrnew%
for %%i in ("%usrnew%") do set usrtime=%%~ti
echo Время формирования usr-файла: %usrtime% >> "%f%body.txt"
|
Вроде с задачей справился своими силами. Может еще как-то оптимизировать? или и так сойдет?
Код:
@echo off
setlocal enableextensions enabledelayedexpansion
SET f=%~dp0
SET CONS="%f%CONS.exe"
::Формирование usr в скрытом режиме. При ошибке присваиваем значение ErrorAdmUsr=
%CONS% /adm /usr /yes /norunner+ || SET ErrorAdmUsr=Не удалось сформировать usr-файл по ключу /adm /usr
::Задаем переменной %usrnew% полный путь к самому новому *.usr-файлу, а %usrtime% - время его изменения
for /f "delims=" %%i in ('dir /b /a:-d /o:d "%f%RECEIVE\*.USR"') do set usrnew=%%i
set usrnew=%f%RECEIVE\%usrnew%
for %%i in ("%usrnew%") do set usrtime=%%~ti
if %ERRORLEVEL%==0 (goto usr+) else (goto usr-)
:usr+
echo Время формирования usr-файла: %usrtime% >> "%f%body.txt"
goto usr++
:usr-
set usrtime=
echo .......... >> "%f%body.txt"
echo %ErrorAdmUsr% >> "%f%body.txt"
set WARNING=[ERROR]
goto usr--
:usr++
echo .......... >> "%f%body.txt"
:usr--
Использовал метки goto, т.к. в итоге батник должен записывать в определенной последовательности результат работы и ошибки в файл, а этот файл уже будет использоваться как тело письма, отправляемое на почту.
P.S.: Только сейчас придумал, что лучше было бы записывать в разные файлы отдельно результаты работы и отдельно ошибки, а после файлы объединить. Чтобы в итоге в письме было красиво всё написано.
P.P.S.: А еще лучше использовать переменные с помощью команды set и уже в конце сформировать файл, расположив все переменные в нужной мне последовательности (может быть до 20 переменных)
|
Время: 07:45.
© OSzone.net 2001-