javascript в связке с бат-файлом: фоновый запуск

Для запуска в фоне батника можно воспользоваться следующим javascript-ом (сохраните данный код в файле с расширением *.js):

var WshShell, obj;
WshShell = WScript.CreateObject("WScript.Shell");
obj = WshShell.Run("c:\\test.bat", 0);
WshShell = null;

В методе Run укажите путь к вашему батнику, в нашем случае - c:\\test.bat. В мирных целях при решении задач по администрированию на Windows - платформах можно воспользоваться данной связкой, на рис. 1 приведен пример применения данной связки, когда с одной веб-странички интерактивно можно запускать батники.  
Рис. 1. Пример применения связки javascript - butch








Конечно, серьезно к этому относится не стоит, но может кому и сослужит доброе дело.

Функции в бат-файлах

Говорить о создании функции в бат-файле не совсем правильно, все-таки речь идет о батниках. Поэтому правильнее будет говорить об имитации. 
Для имитации функций и обращений к ним в bat-файлах можно воспользоваться такой
командой как call. Синтаксис в короткой форме выглядит следующим образом:
call [:метка [аргументы]]
Данная команда работает стеково (FILO): будучи вызванной первой в очереди вызовов в пакетном файле, извлекается последней. Как пример приведен батник, вычисляющий факториал числа.
________________
@echo off
call :factorial %1
echo %RESULT%
exit /b
rem Функция для подсчета значения факториала
rem Вход:
rem       %1 - Число, для которого необходимо подсчитать факториал
rem Выход:
rem       %RESULT% - Значение факториала
:factorial
if %1 == 0 (
    set RESULT=1
    exit /b
)
if %1 == 1 (
    set RESULT=1
    exit /b
)
set /a PARAM=%1 - 1
call :factorial %PARAM%
set /a RESULT=%1 * %RESULT%
exit /b
________________
На рисунках 1 и 2 рассмотрена работа данного скрипта и представлен подход к имитации понятия функций в butch-файлах.
Рис. 1. Работа батника, вычисляющего факториал числа
Рис. 2. Аналог функции в butch-файле
 При работе с командой call часто всплывает понятие стека (stack).

Переменные в бат-файле

Для создания переменных необходимо использовать команду set. Например.
@Echo off
Set /p ipadr1="Enter ip-adress 1:"
Set /p ipadr2="Enter ip-adress 2:"
ping %ipadr1%
ping %ipadr2%
Set ipadr1=
Set ipadr2=
pause
exit
Здесь в духе C/C++ в конце батника созданные переменные уничтожаются. Все-таки принципы необходимо соблюдать.

Циклы в бат-файле

 Здесь приведены примеры организации цикла в батнике.
________________
@echo off
rem Включение расширенной обработки команд
setlocal enabledelayedexpansion
rem Инициализация переменной i (счетчик)
set /a i=0
rem Метка условия выполнения цикла
:if
if %i% LSS 10 (
    goto count
) else (
    goto end
)
rem Функциональная метка, содержащая выполнимые команды с последующим заполнением счетчика i
:count
echo Hello world!
set /a i=i+1
goto if
rem Финишная метка
:end
echo Loop finished...
pause
exit
________________
Можно внести небольшую интерактивность, например предоставив возможность выбора условий окончания цикла
________________
@echo off
rem Включение расширенной обработки команд
setlocal enabledelayedexpansion
rem Инициализация переменной i (счетчик)
set /a i=0
set /p n=Enter border
rem Метка условия выполнения цикла
:if
if %i% LSS %n% (
    goto count
) else (
    goto end
)
rem Функциональная метка, содержащая выполнимые команды с последующим заполнением счетчика i
:count
echo Hello world!
set /a i=i+1
goto if
rem Финишная метка
:end
echo Loop finished...
pause
exit /b
________________
Циклы удобны в практических целях, например:
________________
@echo off
rem Включение расширенной обработки команд
setlocal enabledelayedexpansion
rem Инициализация переменной i (счетчик)
set /a i=0
set /p n=Enter border
rem Метка условия выполнения цикла
:if
if %i% LSS %n% (
    goto count
) else (
    goto end
)
rem Функциональная метка, содержащая выполнимые команды с последующим заполнением счетчика i
:count
set /a i=i+1
ping 191.168.0.%i% -n 1
goto if
rem Финишная метка
:end
echo Loop finished...
pause
exit /b

Трансферизация данных в формате *.xls, *.xlsx, and *.xlsb в базы данных

Возможно, кто-то встречался с ошибкой вида:
 
Ошибка разбора файла: The 'Microsoft.ACE.OLEDB.12.0' provider is not registered 
on the local machine.
 
В нашем случае ошибка возникала при попытке произвести импорт данных в формате  
*.xls в базу данных Oracle.
 
Интерфейсом работы с базой данных служило веб-приложение построенное на технологии 
ASP.NET.
 
Решением проблемы был компонент AccessDatabaseEngine.exe. 
 
Смело устанавливайте данный компонент, не смотря на версию установленного пакета офиса. 
 
 Удачи Вам.