Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Обработка условий (IF) (http://forum.oszone.net/showthread.php?t=287226)

V!RTuE 30-08-2014 03:00 2396035

Обработка условий (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"


V!RTuE 30-08-2014 05:44 2396043

Вроде с задачей справился своими силами. Может еще как-то оптимизировать? или и так сойдет?
Код:

@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.

Время: 07:45.
© OSzone.net 2001-