Archive for the Category: ' Bat-файлы '

На работе частенько стали отключать электричество в ночное время, чтобы приехать с утра пораньше и включить сервера, нужно было придумать оповещение. На работе завалялся GSM модем Teltonika TMK-10x, поэтому решил что самый удобный способ оповещения это SMS сообщение.

1. Первое что нужно написать приложение которое будет отсылать AT команды на COM порт, к которому подключен модем. Приложение должно принимать два параметра первый номер телефона, второй сообщение.

Вот исходный код, или можете скачать скомпилированное приложение  SendSMS.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
using System;
using System.IO.Ports;
using System.Text;
using System.Threading;

namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
string phoneNo = args[2];
string message = args[3];
int speed = int.Parse(args[1]);
string port_name = args[0];
SerialPort port = OpenPort(port_name, speed, 8, 1000, 3000);

try
{
ExecCommand(port, "AT", 300, "No phone connected");
ExecCommand(port, "AT+CMGF=1", 300, "Failed to set message format.");
string command = "AT+CMGS=\"" + phoneNo + "\"";
ExecCommand(port, command, 300, "Failed to accept phoneNo");
command = message + char.ConvertFromUtf32(26) + "\r";
ExecCommand(port, command, 3000, "Failed to send message");

}
catch (Exception ex)
{
throw ex;
}

ClosePort(port);
}

//Open Port
public static SerialPort OpenPort(string portName, int baudRate, int dataBits, int readTimeout, int writeTimeout)
{
ReceiveNow = new AutoResetEvent(false);
SerialPort port = new SerialPort();

try
{
port.PortName = portName; //COM1
port.BaudRate = baudRate; //9600
port.DataBits = dataBits; //8
port.StopBits = StopBits.One; //1
port.Parity = Parity.None; //None
port.ReadTimeout = readTimeout; //300
port.WriteTimeout = writeTimeout; //300
port.Encoding = Encoding.GetEncoding("iso-8859-1");
port.DataReceived += PortDataReceived;
port.Open();
port.DtrEnable = true;
port.RtsEnable = true;
}
catch (Exception ex)
{
throw ex;
}
return port;
}

//Close Port
public static void ClosePort(SerialPort port)
{
try
{
port.Close();
port.DataReceived -= PortDataReceived;
}
catch (Exception ex)
{
throw ex;
}
}

public static string ExecCommand(SerialPort port, string command, int responseTimeout, string errorMessage)
{
try
{
port.DiscardOutBuffer();
port.DiscardInBuffer();
ReceiveNow.Reset();
port.Write(command + "\r");

string input = ReadResponse(port, responseTimeout);
if ((input.Length == 0) || ((!input.EndsWith("\r\n> ")) && (!input.EndsWith("\r\nOK\r\n"))))
throw new ApplicationException("No success message was received.");
return input;
}
catch (Exception ex)
{
throw ex;
}
}

public static AutoResetEvent ReceiveNow;

//Receive data from port
public static void PortDataReceived(object sender, SerialDataReceivedEventArgs e)
{
try
{
if (e.EventType == SerialData.Chars)
{
ReceiveNow.Set();
}
}
catch (Exception ex)
{
throw ex;
}
}

public static string ReadResponse(SerialPort port, int timeout)
{
int tryNo = 0;

string buffer = string.Empty;
do
{
tryNo++;

if (ReceiveNow.WaitOne(timeout, false))
{
string t = port.ReadExisting();
buffer += t;
}

}
while (!buffer.EndsWith("\r\nOK\r\n") && !buffer.EndsWith("\r\n> ") && !buffer.EndsWith("\r\nERROR\r\n") && tryNo < 10);
return buffer;
}
}
}

2. Вторым этапом надо написать скрипт, который будет выполняться при отключении электричества. Выявлять событие отключения электричества решил при помощи простого пинга на сетевой принтер.

1
2
3
4
5
:begin
ping -n 1 192.168.3.69 || Goto else
exit
:else
C:\SMS\SendSMS.exe COM1 9600 89********* "sveta_net"

Сохраняем код в файле с расширением bat.

3. Создаем назначенное задание, я сделал выполнение под отдельным пользователем, чтобы не было заметно. Периодичность 5 минут.

Статья написана автором Галиев Руслан

Объединение dbf-файлов

Простой java-скрипт для объединения нескольких DBF-файлов с одинаковой структурой в один UNIDBF
Запускаем из командной строки

1
cscript //nologo unidbf.js C:\DBF C:\DBF\all.dbf

При этом объединяются не индексированные, без MEMO-полей DBASE-II,III,IV файлы одинаковой структуры файлы из папки C:\DBF в файл C:\DBF\all.dbf За образец принимается первый, в порядке создания, dbf из исходной папки.
Возврат:
0 – успех;
1 – объединены не все файлы;
2 – файл назначения не создан.

Для того чтобы очистить список недавно открытых файлов в 1С 7.7 необходимо сделать следующее:
Пуск>Выполнить

1
reg delete "HKCU\Software\1C\1Cv7\7.7\<ИД_Вашей_Базы>\Config\Recent File List" /f
Статья написана автором Галиев Руслан

uptime Windows

1 Используем утилиту Systeminfo

Утилита Systeminfo покажет вам время когда была загружена система. Путем несложных математических вычислений можно получить время uptime’а.

Для запуска команды,

1. Нажмите Start — search и введите “cmd” (Start — Run, cmd в Windows XP/2003). ями вы запустите командную строку.

2. Находясь в командной строке, введите “systeminfo“. Результатом выполнения команды будут различные системные параметры подобные дате установки, установленные хосфиксы, информация о системе и тому подобное. Найдите параметр “System boot time”.

2 Используем команду “net statistics”

С помощью команды “net” можно выполнять различные операции, и одной из них является получение системной статиcтики рабочей станции или сервера.

Находясь в командной строке, введите следующую команду

1
c:\&gt;net statistics workstation

В строке “statistics since” указано время после загрузки системы, с которого началась собираться статистика.

3 Используем утилиту uptime от Microsoft

http://support.microsoft.com/kb/232243

Статья написана автором Галиев Руслан

Копирование на удалённый сервер

Копирование информации на удаленный сервер и создание записи средствами командной строки.

1
2
rcp -r %FOLDER% \\SERVER\Backup\%FOLDER%\
eventcreate /T Information /L APPLICATION /ID 0001 /SO "INFINITY BACKUP" /D "INFINITY DATA BASE BACKUP COMPLETED"

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

1
2
3
4
5
6
7
8
cd "C:\Program Files\1cv81\bin"
START 1cv8.exe CONFIG /S Сервер\Имя_БД /NАдминистратор /PПароль /DumpIB c:\backup\backup.dt
SET FOLDER=%DATE%
cd C:\BACKUP
mkdir "%FOLDER%"
cd "%FOLDER%"
timeout 120
"C:\Program Files\WinRAR\winrar.exe" a -m5 -ep -dh -inul  baza_1C81 C:\backup\backup.dt
Статья написана автором Галиев Руслан

Форматирование флешки в NTFS

Есть несколько способов форматирования флешки в NTFS:

1. Щелкните правой кнопкой мыши значок Мой компьютер, из открывшегося контекстного меню выберите Свойства. В открывшемся диалоговом окне Свойства системы откройте вкладку Оборудование -> Диспетчер устройств.

В диалоговом окне Диспетчер устройств раскройте Дисковые устройства, двойным щелчком раскройте окно свойств своей флэшки. Откройте вкладку Политика, установите переключатель Оптимизировать для выполнения . После этих операций в окне форматирования флешки будет доступен выбор файловой системы NTFS.

2. Также можно отформатировать флешку используя встроенную утилиту преобразования файловой системы convert.exe (File System Conversion Utility File System Conversion Utility >> C:\WINDOWS\system32\convert.exe ), для этого в командной строке прописываем следующее:

1
 convert h: /fs:ntfs /nosecurity /x

(Плюсы утилиты в том что она позволяет конвертировать файловую систему без потерь данных, также для преобразования файловой системы необходимо иметь некоторое свободное пространство)

При работе 1С в терминальном режиме(RDP) есть необходимость того чтобы было доступно только приложение 1С и ничего более(Explorer), для этого заносим данные в реестр с помощью погтоговленного файла .reg а затем уже запускаем сеанс

1
2
3
4
@ECHO OFF
cD "C:\Program Files\1cv81\bin"
REGEDIT.EXE /S C:\ALL.REG
START 1CV8.EXE

Пример создание директории с текущей датой и создания архива посредством архиватора WinRar.

1
2
3
4
5
6
7
8
9
@ECHO OFF

SET FOLDER=%DATE%

cd C:\BACKUP
mkdir "%FOLDER%"
cd "%FOLDER%"

"C:\Program Files\WinRAR\winrar.exe" a -m5 -ep -dh -inul  baza_1C81 C:\1sbdb81\trade\*.*
Статья написана автором Галиев Руслан

Коментарии в .bat файлах

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

Коментарии можно писать двумя способами:

  1. Блоком
    1
    2
    3
    4
    5
    6
    goto start
    ==============
    комментарии не будут восприниматься интерпретатором
    т.к. будет сразу переход по метке start
    ==============
    :start
  2. Строкой
    1
    2
    rem это коментарий
    :: одна строка коментария

    Далее »