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

среда, 28 июня 2017 г.

(wmic) Отфильтрованный список запущенных процессов с полной информацией

Пример команды, которая создает HTML-файл "C:\proclist.htm" со списком запущенных процессов с информацией о пути к исполняемому файлу процесса и отфильтрованный по наименованию исполняемого файла (в примере это "java.exe"):
wmic /output:C:\proclist.htm process where "name='java.exe'" list full /format:htable

понедельник, 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" %*

вторник, 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!
)

пятница, 17 апреля 2015 г.

Управление виртуальной машиной VirtualBox в консоли

Просмотр списка зарегистрированных виртуальных машин:
vboxmanage list vms
Запуск без окна (в фоне):
vboxheadless -s <VM_name>
Закрыть, сохранив состояние:
vboxmanage controlvm <VM_name> savestate
Закрыть, принудительно отключив питание:
vboxmanage controlvm <VM_name> poweroff
Закрыть, симулировав однократное нажатие на кнопку питания (дальше уже зависит от настроек ОС: либо "спросить о действии", либо "завершить работы", либо "ничего не делать"):
vboxmanage controlvm <VM_name> acpipowerbutton

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

WMIC

WMIC - Windows Management Instrumentation Command-line.
Пример использования для получения статуса службы:

C:\>wmic Service where "Name='FirebirdServerFB25'" get State /value


State=Running

вторник, 17 марта 2015 г.

ousers.sh

cat ousers.sh
#!/bin/bash
# 17.03.2015
# Selecting usernames and their statuses from dba_users (ORACLE)
daScr=/tmp/osu_120629.sql
echo SET PAGESIZE 0\;>$daScr

if [ -z $1 ]; then # Выполнять этот блок, если скрипт запущен без ключей.

echo select username \|\| case when account_status=\'OPEN\' then \'\' else \' \(\' \|\| account_status \|\| \'\)\' end case from dba_users>>$daScr
echo where default_tablespace=\'USERS\'>>$daScr
echo and username not in \(\'APEX_PUBLIC_USER\',\'ORACLE_OCM\'\,\'SPATIAL_CSW_ADMIN_USR\',\'SPATIAL_WFS_ADMIN_USR\'\) --Исключаем из выборки пользователей, которые создаются по-умолчанию в процессе установки и конфигурирования Oracle>>$daScr
echo and username like \'%=_%\' escape \'=\' -- Включаем в выборку только тех пользователей, у которых в имени есть символ подчеркивания \(мы только так схемы и называем\)>>$daScr
echo order by account_status desc, username asc\;>>$daScr
echo exit\;>>$daScr
sqlplus -S / as sysdba @$daScr

if [[ -n $DISPLAY ]]; then read -p 'Press ENTER key to exit.'; fi

elif [ $1 == "-s" ]; then # Скрипт выводит список схем с указанием размера каждой из них

echo select owner, to_char\(sum\(bytes\)/1048576,\'999G999G999G999D999\'\) \"SIZE \(MB\)\" from dba_segments group by owner order by sum\(\bytes\) desc\;>>$daScr
echo exit\;>>$daScr
sqlplus -S / as sysdba @$daScr

else
  echo Usage:
  echo $0 [-s]
fi
rm $daScr

osize.sh

cat osize.sh
#!/bin/sh
# 11.03.2015
daScr=/tmp/ots_150306.sql
echo SET LINESIZE 125\;>$daScr
echo SET PAGESIZE 90\;>>$daScr
if [ -z $1 ]; then # Выполнять этот блок, если скрипт запущен без ключей.
  echo --DBA_DATA_FILES>>$daScr
  echo SELECT /\* + RULE \*/>>$daScr
  echo df.tablespace_name,>>$daScr
  echo round\(sum\(df.maxbytes\)/1048576\) \"SizeMAX\(MB\)\",>>$daScr
  echo --round\(sum\(df.bytes\)/1048576\) \"SizeCUR\(MB\)\",>>$daScr
  echo round\(\(sum\(df.maxbytes\) - sum\(df.bytes\)\)/1048576\) \"Free\(MB\)\",>>$daScr
  echo 100-round\(\(sum\(df.bytes\)\*100\)/sum\(df.maxbytes\)\)\|\|\'\%\' \"Free\(%\)\">>$daScr
  echo FROM dba_data_files df>>$daScr
  echo GROUP BY df.tablespace_name>>$daScr
  echo UNION ALL>>$daScr
  echo --DBA_TEMP_FILES>>$daScr
  echo SELECT /\* + RULE \*/>>$daScr
  echo df.tablespace_name,>>$daScr
  echo round\(sum\(df.maxbytes\)/1048576\),>>$daScr
  echo --round\(sum\(df.bytes\)/1048576\),>>$daScr
  echo round\(\(sum\(df.maxbytes\) - sum\(df.bytes\)\)/1048576\),>>$daScr
  echo 100-round\(\(sum\(df.bytes\)\*100\)/sum\(df.maxbytes\)\)\|\|\'\%\'>>$daScr
  echo FROM dba_temp_files df>>$daScr
  echo GROUP BY df.tablespace_name>>$daScr
  echo order by 1 desc\;>>$daScr
  echo exit\;>>$daScr
  sqlplus -S / as sysdba @$daScr
  if [[ -n $DISPLAY ]]; then read -p 'Press ENTER key to exit.'; fi # Если скрипт запущен в GUI, то окно не закрываем.

elif [ $1 == "-g" ]; then # Скрипт выводит дополнительный столбец (SizeCUR - текущий фактический размер на диске), и все числовые значения, группируются по разрядам.
  echo --DBA_DATA_FILES>>$daScr
  echo SELECT /\* + RULE \*/>>$daScr
  echo df.tablespace_name,>>$daScr
  echo to_char\(round\(sum\(df.maxbytes\)/1048576\),\'999G999G999G999\'\) \"SizeMAX\(MB\)\",>>$daScr
  echo to_char\(round\(sum\(df.bytes\)/1048576\),\'999G999G999G999\'\) \"SizeCUR\(MB\)\",>>$daScr
  echo to_char\(round\(\(sum\(df.maxbytes\)-sum\(df.bytes\)\)/1048576\),\'999G999G999G999\'\) \"Free\(MB\)\",>>$daScr
  echo 100-round\(\(sum\(df.bytes\)\*100\)/sum\(df.maxbytes\)\)\|\|\'\%\' \"Free\(%\)\">>$daScr
  echo FROM dba_data_files df>>$daScr
  echo GROUP BY df.tablespace_name>>$daScr
  echo UNION ALL>>$daScr
  echo --DBA_TEMP_FILES>>$daScr
  echo SELECT /\* + RULE \*/>>$daScr
  echo df.tablespace_name,>>$daScr
  echo to_char\(round\(sum\(df.maxbytes\)/1048576\),\'999G999G999G999\'\),>>$daScr
  echo to_char\(round\(sum\(df.bytes\)/1048576\),\'999G999G999G999\'\),>>$daScr
  echo to_char\(round\(\(sum\(df.maxbytes\) - sum\(df.bytes\)\)/1048576\),\'999G999G999G999\'\),>>$daScr
  echo 100-round\(\(sum\(df.bytes\)\*100\)/sum\(df.maxbytes\)\)\|\|\'\%\'>>$daScr
  echo FROM dba_temp_files df>>$daScr
  echo GROUP BY df.tablespace_name>>$daScr
  echo order by 1 desc\;>>$daScr
  echo exit\;>>$daScr
  sqlplus -S / as sysdba @$daScr
else
  echo Usage:
  echo $0 [-g]
fi
rm $daScr

пятница, 13 марта 2015 г.

importdp.sh - вариант без FROM_USERNAME

Формат команды
./import.sh <ИМЯ НОВОЙ СХЕМЫ> <ФАЙЛ ДАМПА>
Данная редакция скрипта "самостоятельно узнаёт" "старое" имя схемы, которое скрывается в параметре OWNER_NAME в файле дампа.
Может работать только с дампами, содержащими лишь одну схему!
Перед импортом создает схему с предустановленным в параметре NEW_SCHEMA_PASSWD паролем.

cat importdp.sh
#!/bin/sh

# Set the parameters first
# -------------------------------------
# system user name
SYSTEM=<DBA_USERNAME>
# system user password
PASSWD=<DBA_PASSWORD>

# Instance name (if any)
URL=@<ORACLE_SID>

# New schema password
NEW_SCHEMA_PASSWD=<NEW_SCHEMA_PASSWD>

# Set the ORACLE_HOME variable to find an "imp" utility
# ORACLE_HOME=/usr/oracle
# -------------------------------------

help() {
  echo "-------------------------------------"
  echo "Logical Database restore utility v0.1"
  echo "-------------------------------------"
  echo "USAGE:"
  echo "./importdp.sh <TO_USERNAME> <FILE_NAME>"
  echo 
  echo "EXAMPLE:"
  echo "./importdp.sh LNXTEST23 lnx.dmp"
}

if [ $# -eq 0 ] ; then
  help;
  exit 1;
fi

TO_USERNAME=$1
FILENAME=$2
LOGFILE="restore_$TO_USERNAME.log"

if [ "$FILENAME" == "" ] ; then
  FILENAME="expdat.dmp";
fi  

if [ "$TO_USERNAME" == "" ] ; then
  TO_USERNAME=$FROM_USERNAME;
fi  

if [ "$ORACLE_HOME" != "" ] ; then
  CMD="$ORACLE_HOME/bin/impdp";
else
  CMD="impdp";  
fi  

if [ ! -f $FILENAME ] ; then
  echo "ERROR:"
  echo "File $FILENAME does not exist."; 
  exit 1;
fi

# block_150312_2116(begin)
# d.aryshtaev@bftcom.com, 13.03.2015 02:31 IRKT
# Проверка наличия новой схемы (импорт будет выполнен только в случае, если новой схемы в экземпляре Oracle нет):
daScr=/tmp/imp_150312_2100.sql
echo SET PAGESIZE 0\;>$daScr
echo select count\(\*\) from dba_users where username=upper\(\'$TO_USERNAME\'\)\;>>$daScr
echo exit\;>>$daScr
daUsrCnt=`sqlplus -S / as sysdba @$daScr`
if [ $daUsrCnt == 0 ]; then
  # block_150312_2116_A(begin)
  # Создаем схему до импорта, чтобы сразу же задать ей пароль [потому что мы ленимся :-) ]:
  echo create user $TO_USERNAME identified by $NEW_SCHEMA_PASSWD\;>$daScr
  echo grant connect\,resource to $TO_USERNAME\;>>$daScr
  echo grant select on v_\$locked_object to $TO_USERNAME\;>>$daScr
  echo GRANT SELECT ANY DICTIONARY TO $TO_USERNAME\;>>$daScr
  echo exit \;>>$daScr
  sqlplus -S / as sysdba @$daScr

  # block_150312_2116_B(begin)
  # Вытаскиваем OWNER_NAME из дампа и запоминаем значение в переменной FROM_USERNAME:
  daDDLfile=tmp_ddl_`date +%y%m%d_%H%M%S`.txt
  $CMD $SYSTEM/$PASSWD$URL SILENT=ALL NOLOGFILE=Y DIRECTORY=BACKUP_DIR DUMPFILE=$FILENAME SQLFILE=$daDDLfile
  daStrFromDDL=`cat $daDDLfile|grep "CREATE USER"`
  rm $daDDLfile
  FROM_USERNAME=${daStrFromDDL:14:$(expr `expr index "${daStrFromDDL:14}" \"` - 1)}
  # block_150312_2116_B(end)
  # block_150312_2116_A(end)

echo "-----------------------------------------"
echo "Restoring from $FROM_USERNAME to $TO_USERNAME using dump $FILENAME ..."
echo "-----------------------------------------"

export NLS_DATE_FORMAT="YYYY-MM-DD" 
export NLS_TIMESTAMP_FORMAT="YYYY-MM-DD HH24:MI:SS"

$CMD $SYSTEM/$PASSWD$URL SCHEMAS=$FROM_USERNAME DIRECTORY=BACKUP_DIR REMAP_SCHEMA=$FROM_USERNAME:$TO_USERNAME TRANSFORM=OID:N DUMPFILE=$FILENAME LOGFILE=$LOGFILE
else
  # Если новая схема уже существует, то сообщаем об этом пользователю и не выполняем импорт:
  echo Schema $TO_USERNAME already exists.
fi
rm $daScr
# block_150312_2116(end)

четверг, 12 марта 2015 г.

importdp.sh - вариант с FROM_USERNAME

#!/bin/sh

# Set the parameters first
# -------------------------------------
# system user name
SYSTEM=<DBA_USERNAME>
# system user password
PASSWD=<DBA_PASSWORD>

# Instance name (if any)
URL=@<ORACLE_SID>

# New schema password
NEW_SCHEMA_PASSWD=<NEW_SCHEMA_PASSWD>

# block_150312_2116(begin)
# Проверка наличия новой схемы (импорт будет выполнен только в случае, если новой схемы в экземпляре Oracle нет):
daScr=/tmp/imp_150312_2100.sql
echo SET PAGESIZE 0\;>$daScr
echo select count\(\*\) from dba_users where username=upper\(\'$2\'\)\;>>$daScr
echo exit\;>>$daScr
export daUsrCnt=`sqlplus -S / as sysdba @$daScr`
if [ $daUsrCnt == 0 ]; then
  # block_150312_2116_A(begin)
  # Создаем схему до импорта, чтобы сразу же задать ей пароль [потому что мы ленимся :-) ]:
  echo create user $2 identified by $NEW_SCHEMA_PASSWD\;>$daScr
  echo grant connect\,resource to $2\;>>$daScr
  echo grant select on v_\$locked_object to $2\;>>$daScr
  echo exit \;>>$daScr
  sqlplus / as sysdba @$daScr
# Весь остальной скрипт ниже не изменялся.
  # block_150312_2116_A(end)

# Set the ORACLE_HOME variable to find an "imp" utility
# ORACLE_HOME=/usr/oracle
# -------------------------------------

help() {
  echo "-------------------------------------"
  echo "Logical Database restore utility v0.1"
  echo "-------------------------------------"
  echo "USAGE:"
  echo "./importdp.sh <FROM_USERNAME> [<TO_USERNAME>] [<FILE_NAME>]"
  echo 
  echo "EXAMPLE:"
  echo "./importdp.sh LNXSTEND23 LNXTEST23 lnx.dmp"
}

if [ $# -eq 0 ] ; then
  help;
  exit 1;
fi

FROM_USERNAME=$1
TO_USERNAME=$2
FILENAME=$3
LOGFILE="restore_$TO_USERNAME.log"

if [ "$FILENAME" == "" ] ; then
  FILENAME="expdat.dmp";
fi  

if [ "$TO_USERNAME" == "" ] ; then
  TO_USERNAME=$FROM_USERNAME;
fi  

if [ "$ORACLE_HOME" != "" ] ; then
  CMD="$ORACLE_HOME/bin/impdp";
else
  CMD="impdp";  
fi  

if [ ! -f $FILENAME ] ; then
  echo "ERROR:"
  echo "File $FILENAME does not exist."; 
  exit 1;
fi

echo "-----------------------------------------"
echo "Restoring from $FROM_USERNAME to $TO_USERNAME using damp $FILENAME ..."
echo "-----------------------------------------"

export NLS_DATE_FORMAT="YYYY-MM-DD" 
export NLS_TIMESTAMP_FORMAT="YYYY-MM-DD HH24:MI:SS"

$CMD $SYSTEM/$PASSWD$URL SCHEMAS=$FROM_USERNAME DIRECTORY=BACKUP_DIR REMAP_SCHEMA=$FROM_USERNAME:$TO_USERNAME TRANSFORM=OID:N DUMPFILE=$FILENAME LOGFILE=$LOGFILE
else
  # Если новая схема уже существует, то сообщаем об этом пользователю и не выполняем импорт:
  echo Schema $2 already exists.
fi
rm $daScr
# block_150312_2116(end)

понедельник, 2 марта 2015 г.

Информация о крайнем подключении к БД Oracle

Реализован скрипт, который показывает дату крайнего подключения к базам Oracle:

select du.username||case when du.account_status='OPEN' then '' else ' ('||du.account_status||')' end USERNAME, to_char(max(da.TIMESTAMP),'DD.MM.YYYY') LASTLOGON
from dba_users du left join dba_audit_session da on da.username=du.username
where du.default_tablespace='USERS'
and du.username not in ('APEX_PUBLIC_USER','ORACLE_OCM','SPATIAL_CSW_ADMIN_USR','SPATIAL_WFS_ADMIN_USR') --Исключаем из выборки пользователей, которые создаются по-умолчанию в процессе установки и конфигурирования Oracle
and du.username like '%=_%' escape '=' -- Включаем в выборку только тех пользователей, у которых в имени есть символ подчеркивания (мы только так схемы и называем)
group by du.username||case when du.account_status='OPEN' then '' else ' ('||du.account_status||')' end
order by 1 asc;

Пример:
[oracle@dbserver playground]$ ./olastlogon.sh

USERNAME                                                      LASTLOGON
----------------------------------------------------------------- ----------
F_ANGARSK_150218                                              04.03.2015
F_BRATSK_150218
F_IRKOBL_150129                                                   06.03.2015

3 rows selected.


/* bash-вариант */:
cat olastlogon.sh
#!/bin/bash
# Selecting usernames and their statuses from dba_users with last logon info from dba_audit_session (ORACLE)
daScr=/tmp/osu_140829.sql
echo SET LINESIZE 150\;>$daScr
echo SET PAGESIZE 300\;>>$daScr
echo select du.username\|\|case when du.account_status=\'OPEN\' then \'\' else \' \(\'\|\|du.account_status\|\|\'\)\' end USERNAME, to_char\(max\(da.TIMESTAMP\),\'\DD.MM.YYYY'\) LASTLOGON>>$daScr
echo from dba_users du left join dba_audit_session da on da.username=du.username>>$daScr
echo where du.default_tablespace=\'USERS\'>>$daScr
echo and du.username not in \(\'APEX_PUBLIC_USER\',\'ORACLE_OCM\'\,\'SPATIAL_CSW_ADMIN_USR\',\'SPATIAL_WFS_ADMIN_USR\'\) --Исключаем из выборки пользователей, которые создаются по-умолчанию в процессе установки и конфигурирования Oracle>>$daScr
echo and du.username like \'%=_%\' escape \'=\' -- Включаем в выборку только тех пользователей, у которых в имени есть символ подчеркивания \(мы только так схемы и называем\)>>$daScr
echo group by du.username\|\|case when du.account_status=\'OPEN\' then \'\' else \' \(\'\|\|du.account_status\|\|\'\)\' end>>$daScr
echo order by 1 asc\;>>$daScr
echo exit\;>>$daScr
if [ $USER == root ]
then
su - oracle -c "sqlplus / as sysdba @$daScr"
else
sqlplus / as sysdba @$daScr
fi
rm $daScr
if [[ -n $DISPLAY ]]; then read -p 'Press ENTER key to exit.'; fi

----
Необходимо, чтобы заполнялась таблица dba_audit_session, для этого:
alter system set audit_trail=true scope=spfile; --включение параметра
audit connect; --либо аудит любого подключения
audit create session whenever successful; --либо аудит только успешно созданных сессий (сейчас указано это)
create pfile from spfile; - сохранить параметры
Перезапустить экземпляр Oracle.

воскресенье, 1 марта 2015 г.

/ read only

При сбое во время загрузки ОС Linux корневая директория "/" монтируется с уровнем доступа "только чтение" (read only). Чтобы получить возможность вносить изменения в системные файлы, необходимо перемонтировать корневой раздел в режиме "чтения и изменения" (read-write), например, внести изменения в /etc/fstab, нужно выполнить команду:
mount / -o remount,rw

+

четверг, 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

среда, 24 декабря 2014 г.

chmod для директорий и файлов по отдельности

С помощью команды find можно устанавливать права для файлов и директорий по отдельности. Например:
для директорий:
chmod 755 $(find /path/to/base/dir -type d)
для файлов:
chmod 644 $(find /path/to/base/dir -type f)
отсюда

Но эта комбинация не работает в случаях, когда в названии файлов или директорий есть пробелы. Нужно разобраться.

четверг, 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

Архив