Показаны сообщения с ярлыком bat. Показать все сообщения
Показаны сообщения с ярлыком bat. Показать все сообщения

понедельник, 9 апреля 2018 г.

Скрипты для сборки АЦК-Транспорт и АРМ ПБС

!.BAT:
SET pth1=%cd:~0%
cd ..\
SET pth2=%cd:~0%
cd %pth1%
SET PATH=%pth2%\SYSTEM;%pth2%\USER;%PATH%
START %1 %2 %3 %4 %5 %6 %7 %8 %9
pause

!cbank.bat:
!.bat cbank.exe %1 %2 %3 %4 %5 %6 %7 %8 %9

!dedug_cbank.bat:
!.bat bsdebug.exe cbmain.ex %1 %2 %3 %4 %5 %6 %7 %8 %9

!dictman.bat:
!.bat dictman.exe %1 %2 %3 %4 %5 %6 %7 %8 %9

!operedit.bat:
!.bat operedit.exe %1 %2 %3 %4 %5 %6 %7 %8 %9

!setlogin.bat:
!.bat setlogin.exe %1 %2 %3 %4 %5 %6 %7 %8 %9

понедельник, 5 февраля 2018 г.

azk_dir_port_listing.bat

@echo off

REM date-change 2018-02-05
REM date-create 2017-10-13
REM d.aryshtaev@bftcom.com
REM Утилита предназначена для сопровожденца АЦК.
REM Она выводит на экран текстовый файл со списком портов сборок (для удобства учета портов).
REM Ее нужно поместить в папку, в которой находятся сборки АЦК.
REM При этом наименования папок сборок должны соответсвовать формату <ВерсияАЦК>_<ИдентификаторСУБД>_<ПОРТ>_<ПРОИЗВОЛЬНЫЙ ТЕКСТ>, например:
REM 2.43.2.49e_21118_OR_AZ_IRKOBL_280917
REM 2.43.2.49e_21123_OR_AZ_LENOBL_8747_181017
REM 2.43.2.66e_21107_OR_AZ_AMUROBL_8898_221017
REM 2.43.2.72e_21114_FB_USTILIMSKE_170808

set tmp_rslt_file=%TEMP%\list_ports_result.csv
set rslt_file=%TEMP%\list_ports_result.txt
if exist %tmp_rslt_file% del %tmp_rslt_file%
for /f "delims=_, tokens=3" %%a in ('dir /A:D /B') do echo %%a>>%tmp_rslt_file%
sort %tmp_rslt_file%>%rslt_file%
start %rslt_file%

четверг, 7 декабря 2017 г.

Установка web-службы для АЦК-Мониторинг (_installService.bat)

На обучении по АЦК-Мониторинг был предоставлен батник "installService.bat" для установки web-службы АЦК-М.
После его применения в окне настройки web-службы нужно было еще вручную дописывать некоторые параметры.
Со временем стало понятно, что эти ручные операции можно запихнуть в тот же самый батник.

_installService.bat:
SET SERVICE_NAME=M_IRKOBL_161213
SET SERVICE_DISPLAY_NAME="Apache Tomcat 8.0 %SERVICE_NAME%"
tomcat8.exe //IS//%SERVICE_NAME% ^
  --DisplayName=%SERVICE_DISPLAY_NAME% ^
  --Description="АЦК-Мониторинг" ^
  --Install="%cd%\tomcat8.exe" ^
  --Classpath=".\bin\bootstrap.jar;.\bin\tomcat-juli.jar" ^
  --StartMode=jvm ^
  --StopMode=jvm ^
  --StartClass=org.apache.catalina.startup.Bootstrap ^
  --StartPath=%cd%\..\ ^
  --StartParams=start ^
  --StopClass=org.apache.catalina.startup.Bootstrap ^
  --StopParams=stop ^
  --LogPath=..\logs ^
  --LogLevel=Info ^
  --StdOutput=auto ^
  --StdError=auto ^
  --StopPath=%cd%\..\ ^
  --Jvm=%JRE_HOME%\bin\server\jvm.dll ^
  --JvmMs=2048 ^
  --JvmMx=2048 ^
  --JvmOptions=-Dcatalina.home=.;-Dcatalina.base=.;-Djava.endorsed.dirs=.\endorsed;-Djava.io.tmpdir=.\temp;-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager;-Djava.util.logging.config.file=.\conf\logging.properties;-XX:ReservedCodeCacheSize=96m;-XX:+HeapDumpOnOutOfMemoryError;-XX:HeapDumpPath=.\;-Dorg.jboss.logging.provider=slf4j
copy /Y tomcat8w.exe %SERVICE_NAME%.exe
pause

пятница, 17 ноября 2017 г.

showme_webapps_url.bat

Батник открывает текстовый файл, в котором указан адрес страниц web-приложений, которые запущены текущим Tomcat (работает только локально на WEB-сервере) (положить батник нужно в корень папки Tomcat) (положить сюда:
<tomcat>/
и батник будет проверять папку
<tomcat>/webapps/
):
@echo off
setlocal EnableDelayedExpansion
set adr_begin=https://localhost:23991/
set output_file=%TEMP%\tomcat_webaddresses.txt
if exist %output_file% del %output_file%
for /F %%a in ('dir /B /A:D ..\webapps') do echo %adr_begin%%%a>> %output_file%
if exist %output_file% (start %output_file%) else (echo Папка webapps пуста && pause)

Что нужно доработать?
- Нужно реализовать автоматический анализ файла
<tomcat>/conf/server.xml
сейчас сделана "заглушка" в коде - просто вручную прописан номер порта "23991" в строке №3.
- сделать версию для Linux (когда возникнет необходимость).

среда, 23 августа 2017 г.

Внешний IP-адрес из cmd

@echo off
nslookup myip.opendns.com resolver1.opendns.com > %TEMP%\myip.txt
FOR /F "skip=4 delims=: tokens=2" %%a in (%TEMP%\myip.txt) do set myipp1=%%a
FOR /F "usebackq delims= tokens=*" %%i in (`echo %myipp1%`) do set myipp2=%%i
echo %myipp2%> %TEMP%\showme_myip.txt
start notepad %TEMP%\showme_myip.txt

понедельник, 13 февраля 2017 г.

"cmd /k" вместо "& pause"

Чтобы увидеть результаты выполнения утилит командной строки (например, "ipconfig /all", "route print", "systeminfo" и т.д.) нужно, либо сначала открывать сам интерпретатор командной строки ("cmd"), либо перенаправлять вывод в текстовый файл, либо дописывать к концу команды "& pause" (но это решение помогает только если нужно увидеть результат выполнения пакетного файла).

Вариант №1
Проще давать команду интерпретатору "не закрывать консоль после выполнения команды" с помощью конструкции "cmd /k <команда>":
cmd /k ipconfig /all
cmd /k route print
cmd /k systeminfo
и т.д.

Вариант №2
У строкового параметра "(По умолчанию)" В ветках
HKEY_CLASSES_ROOT\batfile\shell\open\command
HKEY_CLASSES_ROOT\cmdfile\shell\open\command
нужно заменить значение
"%1" %*
на
cmd /k "%1" %*

понедельник, 25 июля 2016 г.

xcopy - подавление запроса типа назначения

"xcopy" выдает запрос о типе назначения:
«
Что означает <file>:
имя файла или каталога
(F = файл, D = каталог)?
».

Как его подавить, если "xcopy /I" не помогает?

Решение, если тип назначения - это файл (имитируем нажатие клавиши "f"):
echo f|xcopy ...

Решение, если тип назначения - это директория (имитируем нажатие клавиши "d"):
echo d|xcopy ...

Восстановление DOCATTACHEX

select
 ff.FOLDER||'atch#'||dae.ID "Файлы в хранилище"
,'insert into FileFolder(FILE_NAME,FOLDER,DEVICE_NAME,STORAGE_NAME) values('
 ||''''||ff.FILE_NAME||''','
 ||''''||ff.FOLDER||''','
 ||''''||ff.DEVICE_NAME||''','
 ||''''||ff.STORAGE_NAME||''');' "SQL для тестовой БД"
,'echo F|xcopy /Y '||replace(ff.FOLDER,'/','\')||'atch#'||trim(dae.ID)||' mydest\'||replace(ff.FOLDER,'/','\')||'atch#'||dae.ID "win_bat_copy" /*Строки этого столбца нужно копировать в BAT-файл для Windows - он скопирует в mydest нужные файлики-вложения*/
from DOCATTACHEX dae join filefolder ff on ff.FILE_NAME=trim(dae.ID) where dae.DOCUMENT_ID in (
select
 del.DOCUMENT_ID
from DOCEVERRLOG del
join document d on d.id = del.DOCUMENT_ID
where del.EVENT_MSG like '%AZK-9038. Ошибка удаленного вызова задания%'
and to_date(del.EVENT_BEGIN, 'DD.MM.YY') = to_date('06.07.16', 'DD.MM.YY')
);

понедельник, 25 апреля 2016 г.

Sybase Backup

Формат команды:
dbbackup -c "uid=<username>;pwd=<password>;dbf=<database file>" <backup directory>

Пример для Windows:
C:\PROGRA~1\Sybase\SQLANY~1\win32\dbbackup -y -o C:\Backup\backup.log -c "uid=DBA;pwd=sql;dbf=C:\BASE\BASE.db" C:\Backup

Описание ключей:
-y: создает папку или заменяет уже существующий файл без запроса;
-o <log-file>: выводит информацию о выполнения команды в лог-файл;
-c "строка": содержит информацию о подключении к БД;
дополнительную информацию о ключах можно получить с помощью команды: «dbbackup.exe /?».

Преимущества:
- использование штатной утилиты "dbbackup" позволяет создавать резервную копию БД даже если БД используется, т.е. отключать АЦК-Транспорт и останавливать сервис Sybase необязательно;
- можно создать пакетный файл (*.bat);
- можно создать запланированное задание, которое будет регулярно создавать резервную копию, можно, например, использовать встроенные в Linux или Windows планировщики заданий.

Примечание:
сказывается на производительности, поэтому использовать такой метод рекомендуется в периоды наименьшего использования базы данных.

Восстановление:
в результате выполнения утилита "dbbackup" создает полную копию БД, чтобы ее использовать достаточно указать к ней путь или разместить на месте прежней БД.

вторник, 28 апреля 2015 г.

[успешно] "SET /A" в составе цикла "FOR"

Задача:
В батнике, в составе цикла FOR команда "SET /A ..." с последующим выводом результата (внутри того же цикла "FOR") почему-то не обрабатывается.

Решение:
Для вывода результата нужно обращаться к переменной через восклицательный знак "!" (см. строку с "echo") и обязательно в режиме "ENABLEDELAYEDEXPANSION":
BAT-вариант:
SETLOCAL ENABLEDELAYEDEXPANSION
SET myCount=0
FOR /F "tokens=*" %%i in (my_list_file.txt) DO (
SET /A myCount+=1
ECHO !myCount!
)

четверг, 16 апреля 2015 г.

Запуск СП АЦК-ГЗ с предпроверкой статуса Firebird

Интересная задача попалась:
при запуске Windows-сервера с автоматическим запуском СП АЦК-Госзаказ периодически СП завершается с ошибкой:
org.firebirdsql.jdbc.FBSQLException: GDS Exception. 335544721. Unable to complete network request to host "localhost"., error code: HY000
Reason: Unable to complete network request to host "localhost".
Данная ошибка возникает из-за того, что СП пытается запустится в тот момент, когда служба Firebird еще не успела запустится.

Решение: перед запуском СП проверяем состояние службы Firebird, если не запущена, то запускаем, затем стартуем СП.
BAT-вариант:

@ECHO OFF
REM Inspired by http://forum.oszone.net/nextoldesttothread-273062.html

SETLOCAL ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION
SET daAzkPath=C:\home\soft\azk-gz-lic\1.26.0.180\
SET daAzkFile=StartServer.bat
SET daSvcName=FirebirdServerFB21
:begin
FOR /f "usebackq" %%i IN (`wmic Service where "Name='%daSvcName%'" get State /value 2^>nul ^| find /i "State"`) DO SET b%%~i
IF NOT DEFINED bState echo %daSvcName% not found &GOTO end
IF NOT %bState% == Running (SC START %daSvcName% &GOTO begin)
CD %daAzkPath%
CALL %daAzkFile%
:end
ENDLOCAL

четверг, 12 февраля 2015 г.

StopServer.bat

cd .\XML &&call .\xml.cmd .\shutdown.xml
@echo off
if %ERRORLEVEL%==0 (goto mrk_ok) else (goto mrk_fail)
:mrk_ok
    rem Если команда завершения выполнилась успешно, то окно можно и закрыть по таймауту
    timeout 5
    goto end
:mrk_fail
    rem Если команда завершения выполнилась с ошибкой, то окно не закрываем, чтобы администратор мог ознакомиться с ее текстом
    pause
    goto end
:end

четверг, 18 декабря 2014 г.

StopServer.bat

cd .\XML &&call .\xml.cmd .\shutdown.xml &timeout 5

Либо Ctrl+C.

azka.bat

Пакетник для запуска клиентских частей АЦК-Ф, АЦК-П и АЦК-ГЗ

/* Метаязыком:
Если существует client\maincontroller.exe, то: если существует client\Payables.ocx (P.S. тут можно любой из 4-х ключевых файлов упомянуть: killcache.bat, CapInvest.ocx, Payables.ocx, reciprocal.ocx), то это клиентская часть АЦК-Ф,
иначе это клиентская часть АЦК-П,
Иначе, если существует client\order.exe, то это клиентская часть АЦК-ГЗ,
иначе - хз.
*/

@ECHO OFF
REM prev1 version 09.12.2015
REM prev2 version 15.10.2016
REM prev3 version 22.10.2016
REM prev4 version 03.09.2019
REM curr version 15.02.2021
SETLOCAL ENABLEDELAYEDEXPANSION
SET okstart=0
IF EXIST AzkExchange.exe (
TITLE [AZKExchange] && ECHO [AZKExchange] запускается ...
  SET okstart=1
  START AzkExchange.exe
) ELSE (
  IF EXIST client (
    IF EXIST client\maincontroller.exe (
      IF EXIST client\Payables.ocx (
TITLE [АЦК-Финансы] && ECHO [АЦК-Финансы] запускается ...
        IF EXIST client\Azk2Clnt.ini (
          FOR /F "tokens=2 delims=:" %%a IN ('findstr /B /I /P /C:"Server=localhost:" client\Azk2Clnt.ini') DO (
          SET PORT_CLNT=%%a
          )
          IF EXIST StartServer.bat (
            FOR /F "tokens=2 delims==" %%a IN ('findstr /B /I /P /C:"set SERVER_PORT=" StartServer.bat') DO (
            SET PORT_SRVR=%%a
            )
            IF "!PORT_SRVR!"=="!PORT_CLNT!" (
              SET okstart=1
              CD client
              START maincontroller.exe /PREFIX:!PORT_CLNT! /CAPTION:"[!PORT_CLNT!]" %*
            ) ELSE (
              ECHO Выполнение прервано:
              ECHO не совпадают порты в файлах
              ECHO StartServer.bat=!PORT_SRVR!
              ECHO client\Azk2Clnt.ini=!PORT_CLNT!
              start %CD%\client\Azk2Clnt.ini
              goto exit
            )
          ) ELSE (
            ECHO Выполнение прервано: не найден файл StartServer.bat
            goto exit
          )
        ) ELSE (
          ECHO Выполнение прервано: не найден файл client\Azk2Clnt.ini
          goto exit
        )
      ) ELSE (
TITLE [АЦК-Планирование] && ECHO [АЦК-Планирование] запускается ...
        IF EXIST client\Azk2Clnt.ini (
          FOR /F "tokens=2 delims=:" %%a IN ('findstr /B /I /P /C:"Server=localhost:" client\Azk2Clnt.ini') DO (
          SET PORT_CLNT=%%a
          )
          IF EXIST StartServer.bat (
            FOR /F "tokens=2 delims==" %%a IN ('findstr /B /I /P /C:"set SERVER_PORT=" StartServer.bat') DO (
            SET PORT_SRVR=%%a
            )
            IF "!PORT_SRVR!"=="!PORT_CLNT!" (
              SET okstart=1
              CD client
              START maincontroller.exe /PREFIX:!PORT_CLNT! /CAPTION:"[!PORT_CLNT!]" %*
            ) ELSE (
              ECHO Выполнение прервано:
              ECHO не совпадают порты в файлах
              ECHO StartServer.bat=!PORT_SRVR!
              ECHO client\Azk2Clnt.ini=!PORT_CLNT!
              start %CD%\client\Azk2Clnt.ini
              goto exit
            )
          ) ELSE (
            ECHO Выполнение прервано:
            ECHO не найден файл
            ECHO StartServer.bat
            goto exit
          )
        ) ELSE (
          ECHO Выполнение прервано:
          ECHO не найден файл
          ECHO client\Azk2Clnt.ini
          goto exit
        )
      )
    ) ELSE (
      IF EXIST client\order.exe (
TITLE && ECHO [АЦК-Госзаказ] запускается ...
        IF EXIST client\order.ini (
          FOR /F "tokens=2 delims=:" %%a IN ('findstr /B /I /P /C:"Server=localhost:" client\order.ini') DO (
          SET PORT_CLNT=%%a
          )
          IF EXIST StartServer.bat (
            FOR /F "tokens=2 delims==" %%a IN ('findstr /B /I /P /C:"set SERVER_PORT=" StartServer.bat') DO (
            SET PORT_SRVR=%%a
            )
            IF "!PORT_SRVR!"=="!PORT_CLNT!" (
              SET okstart=1
              CD client
              START order.exe /PREFIX:!PORT_CLNT! /CAPTION:"[!PORT_CLNT!]" %*
            ) ELSE (
              ECHO Выполнение прервано:
              ECHO не совпадают порты в файлах
              ECHO StartServer.bat=!PORT_SRVR!
              ECHO client\order.ini=!PORT_CLNT!
              start %CD%\client\order.ini
              goto exit
            )
          ) ELSE (
            ECHO Выполнение прервано:
            ECHO не найден файл
            ECHO StartServer.bat
            goto exit
          )
        ) ELSE (
          ECHO Выполнение прервано:
          ECHO не найден файл
          ECHO client\order.ini
          goto exit
        )      ) ELSE (
        ECHO Выполнение прервано:
        ECHO подсистема не распознана
      )
    )
  ) ELSE (
ECHO Выполнение прервано:
ECHO не удалось распознать подсистему, не найдены ни каталог "client", ни файл AzkExchange.exe
  )
)
:exit
IF "%okstart%"=="1" (timeout 5) ELSE (pause)
ENDLOCAL

вторник, 22 мая 2012 г.

Отключение/включение визуального оформления для приложений Windows

azkf.bat [/t]

rem Если пакетный файл запущен с ключом /t, то клиентская часть АЦК запустится с поддержкой визуального оформления
if %1s==/ts goto azk_with_theme else goto azk_no_theme

:azk_no_theme
rem Отключение визуального оформления для текущего maincontroller.exe
reg add "HKCU\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers" /v "%CD%\client\maincontroller.exe" /t REG_SZ /d DISABLETHEMES /f
goto azk_start

:azk_with_theme
rem Включение визуального оформления для текущего maincontroller.exe
reg delete "HKCU\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers" /v "%CD%\client\maincontroller.exe" /f
goto azk_start

:azk_start
cd client
call killcache.bat
start maincontroller.exe /instance

:exit

среда, 7 марта 2012 г.

BAT-файл, который распознает версию Firebird, на которой создан бэкап

rem mv_fb_restore.bat

@echo off
SETLOCAL

rem version 4 (07.03.2012)

rem Порт службы Firebird 1.5:
set PORT_FB15=3050
rem Порт службы Firebird 2.1:
set PORT_FB21=3021
rem Порт службы Firebird 2.5:
set PORT_FB25=3025

set applog=mv_fb_restore.log

rem Раскладываем дату на составные (ден, месяц, год):
set daDD=%DATE:~0,2%
set daMM=%DATE:~3,2%
set daYYYY=%DATE:~-4%
rem В переменной времени заменяем пробел (который ставиться для числа часов с одним знаком) нулём:

set datime=%time: =0%

rem Раскладываем время на составные (часы, минуты, секунды):
set daho=%datime:~0,2%
set dami=%datime:~3,2%
set dass=%datime:~6,2%
rem Складываем разложенные составные в необходимой форме:
set daDATE=%daYYYY%%daMM%%daDD%_%daho%%dami%%dass%

rem Защита от некорректного запуска:
if %1s==s goto daErrSyntax
if NOT EXIST %1 goto daErrFileExist
prompt run:

set daFile=%1
set daFile=%daFile:~,-4%

rem Службы Firebird должны быть запущены на разных портах (в данном примере, это службы 3050, 3021, 3025)
title RESTORE is running
rem ####### RESTORE FB 1.5
set gbaklog=LOG-RESTORE_FB15_%daDATE%.log
echo %DATE% %TIME% - Firebird 1.5 base restore started with source file %1>>%applog%
c:\Firebird_1_5\bin\gbak.exe -user SYSDBA -password masterkey -R -c -V -P 4096 -Y %gbaklog% %1 localhost/%PORT_FB15%:%CD%\R_%daFile%_FB15.fdb
echo %DATE% %TIME% - Firebird 1.5 base restore complete (status %errorlevel%)>>%applog%

rem АНАЛИЗ ЛОГА
echo %DATE% %TIME% - log_analize start>>%applog%
FOR /F "skip=1 tokens=1 delims=zzz" %%a in (%gbaklog%) do (IF "%%a"=="gbak: finishing, closing, and going home" (goto end) ELSE (IF "%%a"=="gbak: ERROR: Expected backup version 1, 2, or 3. Found 8" (goto fb21_blk) ELSE (IF "%%a"=="gbak: ERROR: Expected backup version 1, 2, or 3. Found 9" (goto fb25_blk))))

:fb21_blk
set gbaklog=LOG-RESTORE_FB21_%daDATE%.log
echo %DATE% %TIME% - Firebird 2.1 base restore started with source file %1>>%applog%
c:\Firebird_2_1\bin\gbak.exe -user SYSDBA -password masterkey -R -c -V -P 4096 -Y %gbaklog% %1 localhost/%PORT_FB21%:%CD%\R_%daFile%_FB21.fdb
echo %DATE% %TIME% - Firebird 2.1 base restore complete>>%applog%
goto end

:fb25_blk
set gbaklog=LOG-RESTORE_FB25_%daDATE%.log
echo %DATE% %TIME% - Firebird 2.5 base restore started with source file %1>>%applog%
c:\Firebird_2_5\bin\gbak.exe -user SYSDBA -password masterkey -R -c -V -P 4096 -Y %gbaklog% %1 localhost/%PORT_FB25%:%CD%\R_%daFile%_FB25.fdb
echo %DATE% %TIME% - Firebird 2.5 base restore complete>>%applog%
goto end

:daErrSyntax
echo Не указан backup-файл.
echo Запускать нужно так:
echo mv_fb_restore.bat ПолноеИмяБэкапа
goto exit
:daErrFileExist
echo Файл %1 не найден. Проверьте правильность написания имени файла.
goto exit

:end
title RESTORE is complete
start notepad %applog%
start notepad %gbaklog%
:exit
endlocal
pause

понедельник, 13 февраля 2012 г.

Получение номера версии в консоли

rem Т.к. обновляем одну и ту же переменную внутри цикла FOR, включаем режим "отложенного раскрытия переменной" (ENABLEDELAYEDEXPANSION), чтобы переменные обновлялись именно внутри цикла, а не после выхода за скобки:
setlocal ENABLEDELAYEDEXPANSION

@echo off
rem ######### Информация о версии АЦК (начало)
rem ######### АЦК-Финансы
7z.exe e %1\server\AzkServer.jar com\bssys\version.properties
rem ######### АЦК-Госзаказ
rem 7z.exe e %1\server\ordersrv.jar com\bssys\version.properties
move version.properties %temp%

FOR /F "skip=1 tokens=1,2 delims==" %%i in (%temp%\version.properties) do (IF %%i==version.minor (set ver_minor=%%j) ELSE (IF %%i==version.release (set ver_release=%%j) ELSE (IF %%i==version.build (set ver_build=%%j) ELSE (IF %%i==version.major set ver_major=%%j))))

set AZK_ver=%ver_major%.%ver_minor%.%ver_release%.%ver_build%

echo %AZK_ver%

endlocal

Исполнение внешних скриптов и сохранение результатов во внешний файл (Oracle)

Ключ "-S" включает "тихий режим", который отключает вывод баннера SQL*Plus, запросы подтверждений и отчеты о выполнении команд.

sqlplus -S / as sysdba @c:\script.sql > output.txt

Пример использования:
echo Получение списка схем Oracle:
@echo off
setlocal
rem Раскладываем дату на составные (ден, месяц, год):
set daDD=%DATE:~0,2%
set daMM=%DATE:~3,2%
set daYYYY=%DATE:~-4%
rem В переменной времени заменяем пробел (который ставиться для числа часов с одним знаком) нулём:
set datime=%time: =0%
rem Раскладываем время на составные (часы, минуты, секунды):
set daho=%datime:~0,2%
set dami=%datime:~3,2%
set dass=%datime:~6,2%
rem Складываем разложенные составные в необходимой форме:
set daDATE=%daDD%.%daMM%.%daYYYY% %daho%:%dami%:%dass%

set daScr=%temp%\tmp_120213.sql
set daOut=%temp%\tmp_120213.txt

echo %daDATE%>%daOut%
echo select username ^|^| case when account_status = 'OPEN' then '' else ' (' ^|^| account_status ^|^| ')' end case from dba_users where default_tablespace='USERS' order by account_status desc, username asc;>%daScr%
echo exit>>%daScr%
sqlplus / as sysdba @%daScr%>>%daOut%
del /F /Q %daScr%
start notepad %daOut%
endlocal

Архив