Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - автоматическое обновление справочников Биков ПО 01RKC#.exe

Ответить
Настройки темы
CMD/BAT - автоматическое обновление справочников Биков ПО 01RKC#.exe

Пользователь


Сообщения: 102
Благодарности: 1

Профиль | Отправить PM | Цитировать


Изменения
Автор: Anufriev
Дата: 25-05-2012
Описание: решение перенес в шапку
Вложения
Тип файла: rar read1804.rar
(352 байт, 19 просмотров)
добрый день!

необходимо создать батник, который делает такое

1. по пути "C:\INFO\" имеется файл вида "readDDMM.001" (пример файла во вложении, кодировка DOS) где DD и MM день и месяц соответственно, в нем необходимо найти текст (имя файла) "*.arj" (* - постоянно меняется)
2. создать текстовый файл "get.txt" по пути "C:\БИКИ\get\" стекстом "get mfo *.arj"
3. из "C:\INFO\" файл "readDDMM.001" переместить в папку "C:\INFO\сегодняшняя дата в формате «год.месяц.число» (пример 2012.05.21)" (для того что бы повторно не прочитался файл)
4. сканировать папку "C:\BNK\IZM\" на появление архива "*.arj", его необходимо распаковать в туже папку
5. необходимо запустить досовское ПО по пути "C:\BNK\01RKC#.exe"
6.появится ошибка, необходимо кликнуть как то на «ignore»
7. закрыть ПО двойным нажатием "ESC"
8. на сетевом диске "Z:\" изменить имя папки "DAT" на нынешнюю дату в формате год.месяц.число (пример 2012.04.18)
9. скопировать папку "DAT" из "C:\BNK\" на сетевой диск "Z:\"
10. P.s. было бы не плохо сделать что бы он постоянно сканировал папку "C:\INFO\" на появление файла "readDDMM.001" и только когда появился файлик он начал те действия что описаны выше
11. отправить сообщение о завершении обновлений

получился очень хороший батник:

Код: Выделить весь код
@Echo Off
rem Пути
Set ReadPath=C:\INFO
Set GetPath=C:\biki\get
Set ARJPath=C:\BNK\IZM
rem Таймаут проверки файлов, в секундах
Set Timeout=10

Set /A Timeout+=1
If Not Exist "%ReadPath%" Echo Error - Directory not found&Exit /B 1
rem Подготавливаем структуру директорий
If Not Exist "%GetPath%" MD "%GetPath%"

:Loop
Set ARJName=&Set NFOName=
rem Поиск файла
For /F "delims=" %%F In ('Dir "%ReadPath%\read*.*" /B') Do (
    Set NFOName=%%F
rem Поиск в найденном строки с архивом 
    For /F "delims=" %%S In ('Findstr /R /I /C:"\<*.arj\>" "%ReadPath%\%%F"') Do (
rem Разбор строки на составляющие, вычленение имени архива
        For %%A In (%%S) Do (
            Echo %%A|Find /I "arj">nul&&Set ARJName=%%A
        )
    )
)
If Defined ARJName (
    Echo Found %NFOName%, processing...
rem Создаем get-файл
    Echo get mfo %ARJName%>"%GetPath%\get.txt"
rem Перемещаем обработанный файл, чтобы исключить повторное прочтение
rem Если в системе установлен другой формат даты - исправить.
    For /F "tokens=1,2,3 delims=." %%A In ("%Date%") Do (
        If Not Exist "%ReadPath%\%%C.%%B.%%A" MD "%ReadPath%\%%C.%%B.%%A"
        Move "%ReadPath%\%NFOName%" "%ReadPath%\%%C.%%B.%%A\%NFOName%"
    )
:WaitForARJ
rem Распаковка архива, или ожидание, если он ещё не появился
    If Exist "%ARJPath%\%ARJName%" (
        c:\arj\ARJ32.EXE e C:\BNK\IZM\*.arj C:\BNK\IZM\
        Echo Archive %ARJName% successfuly extracted
rem Запускаем программу
        Start "" "C:\BNK\01RKC#.EXE"
        Ping -n 10 127.0.0.1>nul
        taskkill /IM ntvdm.exe
rem Делаем бэкап баз
        For /F "tokens=1,2,3 delims=." %%A In ("%Date%") Do (
            If Not Exist "D:\%%C.%%B.%%A" (
                Ren "y:\DAT" "%%C.%%B.%%A" 2>nul||MD "D:\%%C.%%B.%%A"
                Xcopy "C:\BNK\DAT" "y:\DAT" /E /I /Y /Q
                msg console /server:*.*.*.* "обновление завершено"
            )
        )
    ) Else (
        Echo Waiting for ARJ in %ARJPath%
        Ping -n %Timeout% 127.0.0.1>nul
        GoTo WaitForARJ
    )
)
rem Уход на новую итерацию после таймаута
Cls&Echo Scanning %ReadPath%...
Ping -n %Timeout% 127.0.0.1>nul
GoTo Loop
шестой пункт решается этим способом предложенным Iska

Цитата:
сделайте копии файла «config.nt», расположенного в папке «system32» Вашей папки «Windows», и файла «config.fp», расположенного в папке с приложением. Затем поменяйте в обоих вышеупомянутых файлах строку:
Код: Выделить весь код
FILES=40
на:
Код: Выделить весь код
FILES=200
Спасибо за помощь!

Отправлено: 15:07, 21-05-2012

 

Пользователь


Сообщения: 102
Благодарности: 1

Профиль | Отправить PM | Цитировать


Всем кто помогал, большое спасибо, задача выполнена, я ликую

Отправлено: 14:02, 23-05-2012 | #21



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Цитата Anufriev:
Код: Выделить весь код
taskkill /IM ntvdm.exe
»
Боюсь, рано или поздно, принудительные снятия процесса, работающего с *.dbf-базами, аукнутся.

Отправлено: 14:08, 23-05-2012 | #22


Пользователь


Сообщения: 102
Благодарности: 1

Профиль | Отправить PM | Цитировать


я думаю что необходимо сделать ожидание побольше, корректировки там не большие проходят, так что надеюсь будет успевать все корректироваться до того как завершится процесс

конечно можно поискать вариант с более щедящим завершением работ ПО

и не понадобилось стороннее ПО, что очень радует.
Получился вод такой код

Код: Выделить весь код
@Echo Off
rem Пути
Set ReadPath=C:\INFO
Set GetPath=C:\biki\get
Set ARJPath=C:\BNK\IZM
rem Таймаут проверки файлов, в секундах
Set Timeout=10

Set /A Timeout+=1
If Not Exist "%ReadPath%" Echo Error - Directory not found&Exit /B 1
rem Подготавливаем структуру директорий
If Not Exist "%GetPath%" MD "%GetPath%"

:Loop
Set ARJName=&Set NFOName=
rem Поиск файла
For /F "delims=" %%F In ('Dir "%ReadPath%\read*.*" /B') Do (
    Set NFOName=%%F
rem Поиск в найденном строки с архивом 
    For /F "delims=" %%S In ('Findstr /R /I /C:"\<*.arj\>" "%ReadPath%\%%F"') Do (
rem Разбор строки на составляющие, вычленение имени архива
        For %%A In (%%S) Do (
            Echo %%A|Find /I "arj">nul&&Set ARJName=%%A
        )
    )
)
If Defined ARJName (
    Echo Found %NFOName%, processing...
rem Создаем get-файл
    Echo get mfo %ARJName%>"%GetPath%\get.txt"
rem Перемещаем обработанный файл, чтобы исключить повторное прочтение
rem Если в системе установлен другой формат даты - исправить.
    For /F "tokens=1,2,3 delims=." %%A In ("%Date%") Do (
        If Not Exist "%ReadPath%\%%C.%%B.%%A" MD "%ReadPath%\%%C.%%B.%%A"
        Move "%ReadPath%\%NFOName%" "%ReadPath%\%%C.%%B.%%A\%NFOName%"
    )
:WaitForARJ
rem Распаковка архива, или ожидание, если он ещё не появился
    If Exist "%ARJPath%\%ARJName%" (
        c:\arj\ARJ32.EXE e C:\BNK\IZM\*.arj C:\BNK\IZM\
        Echo Archive %ARJName% successfuly extracted
rem Запускаем программу
Start "" "C:\BNK\01RKC#.EXE"
Ping -n 10 127.0.0.1>nul
taskkill /IM ntvdm.exe
start C:\DAT.vbs
    ) Else (
        Echo Waiting for ARJ in %ARJPath%
        Ping -n %Timeout% 127.0.0.1>nul
        GoTo WaitForARJ
    )
)
rem Уход на новую итерацию после таймаута
Cls&Echo Scanning %ReadPath%...
Ping -n %Timeout% 127.0.0.1>nul
GoTo Loop
p.s. думаю теперь лучше скрипт vbs переделать на bat и вообще красота будет, простите Iska, лишний скриптик писали(хотя он не лишний, очень хороший, и выручал пока не разобрались с батником), подскажете как его на bat переделать, ну и дописать в тот общий батник

Код: Выделить весь код
Option Explicit


Dim dtCurrDate
Dim strFormattingDate

dtCurrDate = Now()
strFormattingDate = Right("0000" & Year(dtCurrDate), 4) & "." & Right("00" & Month(dtCurrDate), 2) & "." & Right("00" & Day(dtCurrDate), 2)

With WScript.CreateObject("Scripting.FileSystemObject")
	If .FolderExists("Y:\DAT") Then
		If .FolderExists("C:\bnk") Then
			If Not .FolderExists("Y:\" & strFormattingDate) Then
				.GetFolder("Y:\DAT").Name = strFormattingDate
				.CopyFolder "C:\bnk\DAT", "Y:\DAT", True
			Else
				WScript.Echo "Folder [Y:\" & strFormattingDate & "] already exists"
			End If
		Else
			WScript.Echo "Folder [C:\bnk] not found"
		End If
	Else
		WScript.Echo "Folder [Y:\DAT] not found"
	End If
End With

WScript.Quit 0

Последний раз редактировалось Anufriev, 23-05-2012 в 15:02.


Отправлено: 14:17, 23-05-2012 | #23


Старожил


Сообщения: 415
Благодарности: 257

Профиль | Отправить PM | Цитировать


Переделал.
Код: Выделить весь код
For /F "tokens=1,2,3 delims=." %%A In ("%Date%") Do (
    If Not Exist "D:\%%C.%%B.%%A" (
        Ren "D:\DAT" "%%C.%%B.%%A" 2>nul||MD "D:\%%C.%%B.%%A"
        Xcopy "C:\BNK\DAT" "D:\DAT" /E /I /Y /Q
    )
)
Это ежедневный бэкап баз? В каком месте основного скрипта он должен вызываться?
Это сообщение посчитали полезным следующие участники:

Отправлено: 15:18, 23-05-2012 | #24


Пользователь


Сообщения: 102
Благодарности: 1

Профиль | Отправить PM | Цитировать


этот бекап баз делается после обновления тоеть в конце всего процесса

возможно ли по завершению батника отправить сообщение не определенный ПК?

Отправлено: 15:19, 23-05-2012 | #25


Старожил


Сообщения: 415
Благодарности: 257

Профиль | Отправить PM | Цитировать


Anufriev, попробуйте net send (net send /? для синтаксиса) или заменитель.

Код: Выделить весь код
@Echo Off
rem Пути
Set ReadPath=C:\INFO
Set GetPath=C:\biki\get
Set ARJPath=C:\BNK\IZM
rem Таймаут проверки файлов, в секундах
Set Timeout=10

Set /A Timeout+=1
If Not Exist "%ReadPath%" Echo Error - Directory not found&Exit /B 1
rem Подготавливаем структуру директорий
If Not Exist "%GetPath%" MD "%GetPath%"

:Loop
Set ARJName=&Set NFOName=
rem Поиск файла
For /F "delims=" %%F In ('Dir "%ReadPath%\read*.*" /B') Do (
    Set NFOName=%%F
rem Поиск в найденном строки с архивом 
    For /F "delims=" %%S In ('Findstr /R /I /C:"\<*.arj\>" "%ReadPath%\%%F"') Do (
rem Разбор строки на составляющие, вычленение имени архива
        For %%A In (%%S) Do (
            Echo %%A|Find /I "arj">nul&&Set ARJName=%%A
        )
    )
)
If Defined ARJName (
    Echo Found %NFOName%, processing...
rem Создаем get-файл
    Echo get mfo %ARJName%>"%GetPath%\get.txt"
rem Перемещаем обработанный файл, чтобы исключить повторное прочтение
rem Если в системе установлен другой формат даты - исправить.
    For /F "tokens=1,2,3 delims=." %%A In ("%Date%") Do (
        If Not Exist "%ReadPath%\%%C.%%B.%%A" MD "%ReadPath%\%%C.%%B.%%A"
        Move "%ReadPath%\%NFOName%" "%ReadPath%\%%C.%%B.%%A\%NFOName%"
    )
:WaitForARJ
rem Распаковка архива, или ожидание, если он ещё не появился
    If Exist "%ARJPath%\%ARJName%" (
        c:\arj\ARJ32.EXE e C:\BNK\IZM\*.arj C:\BNK\IZM\
        Echo Archive %ARJName% successfuly extracted
rem Запускаем программу
        Start "" "C:\BNK\01RKC#.EXE"
        Ping -n 10 127.0.0.1>nul
        taskkill /IM ntvdm.exe
rem Делаем бэкап баз
        For /F "tokens=1,2,3 delims=." %%A In ("%Date%") Do (
            If Not Exist "D:\%%C.%%B.%%A" (
                Ren "D:\DAT" "%%C.%%B.%%A" 2>nul||MD "D:\%%C.%%B.%%A"
                Xcopy "C:\BNK\DAT" "D:\DAT" /E /I /Y /Q
            )
        )
rem Отсылаем уведомление
        Net send ADMIN "Created backup D:\%%C.%%B.%%A"
    ) Else (
        Echo Waiting for ARJ in %ARJPath%
        Ping -n %Timeout% 127.0.0.1>nul
        GoTo WaitForARJ
    )
)
rem Уход на новую итерацию после таймаута
Cls&Echo Scanning %ReadPath%...
Ping -n %Timeout% 127.0.0.1>nul
GoTo Loop

Последний раз редактировалось Anonymоus, 23-05-2012 в 15:33.

Это сообщение посчитали полезным следующие участники:

Отправлено: 15:28, 23-05-2012 | #26


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Цитата Anufriev:
возможно ли по завершению батника отправить сообщение не определенный ПК? »
Лучше:
Код: Выделить весь код
msg.exe /server:…
Это сообщение посчитали полезным следующие участники:

Отправлено: 16:43, 23-05-2012 | #27


Пользователь


Сообщения: 102
Благодарности: 1

Профиль | Отправить PM | Цитировать


net send в win7 не имеется, стороннее ПО ставить не хочется
вопрос а как работает msg, сам себе получается отправить на другой ПК не удается "Ошибка 1722 при получении имен сеанса"

необходимо в реестре изменить HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\AllowRemoteRPC=1

Последний раз редактировалось Anufriev, 24-05-2012 в 06:41. Причина: ответил себе на вопрос


Отправлено: 06:26, 24-05-2012 | #28


Новый участник


Сообщения: 11
Благодарности: 0

Профиль | Отправить PM | Цитировать


оффтоп

Отправлено: 07:26, 24-05-2012 | #29


Пользователь


Сообщения: 102
Благодарности: 1

Профиль | Отправить PM | Цитировать


консоль приходится запускать от имени доменного админа с ПК на ПК которые в домене отправляется

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

p.s. russur, ты какой то странный

Последний раз редактировалось Anufriev, 24-05-2012 в 08:02.


Отправлено: 07:52, 24-05-2012 | #30



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - автоматическое обновление справочников Биков ПО 01RKC#.exe

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
VBS/WSH/JS - [решено] Добавление параметра в текстовый файл равный названию файла XXXp Скриптовые языки администрирования Windows 14 31-03-2012 23:56
CMD/BAT - [решено] Вставить имя файла в текстовый файл (UTF-8 without BOM) Jahnhoy Скриптовые языки администрирования Windows 11 19-09-2011 17:39
CMD/BAT - [решено] как из bat файла дописать символ в текстовый файл? idzs Скриптовые языки администрирования Windows 6 22-02-2011 03:49
[решено] Можно ли создать текстовый файл внутри самой программы автоайти? R.M.L AutoIt 7 03-10-2009 00:34
Интерфейс - изменение стандартного предложения создать текстовый файл Irekson Microsoft Windows 2000/XP 3 25-02-2008 10:26




 
Переход