Ru-Board.club
← Вернуться в раздел «Программы»

» Командная строка, батники, сценарии (bat, cmd) 2

Автор: d per
Дата сообщения: 16.03.2008 23:13
Спасибо за nnCron - то, что доктор прописал.
Вопрос снят, спасибо за помощь

Добавлено:
Не работает через nn-крон. Я хотел запустить utorrent, он запускается, но пустой, без информации. обясните если не сложно- как запускать процессы от имени в кроне. Это наверно должно помочь
Автор: igor_andreev
Дата сообщения: 17.03.2008 02:49
d per
В топике про nnCron, ссылку см. в посту 01MDM, про авторизацию задачи написано жирными буквами прямо в шапке
Автор: svradmin
Дата сообщения: 17.03.2008 08:15

Цитата:
Проверь этот вариант. Батник должен быть в папке, где нужно проверять подпапки


Большое спасибо за помощь, только можно сделать так чтоб я запускал батник со своего рабочего места используя путь потому что меня 12 машин где это нужно делать очень далеко друг от друга.
Автор: 01MDM
Дата сообщения: 17.03.2008 08:48
Значит пропиши нужный путь в команду dir

Код:
@echo off
setlocal

for /f "tokens=4*" %%i in ('dir /ad "Z:\Path" ^| findstr %date% ^| findstr /v [.]$') do (
set "folder=%%i %%j" && call:move
)
goto:eof

:move
if "%folder:~-1,1%"==" " set "folder=%folder:~0,-1%"
echo D | xcopy /e /y /q "%folder%" "\\Share\%date%\%folder%" 1>nul 2>&1
Автор: svradmin
Дата сообщения: 17.03.2008 11:51
Попробовал поставил не работает доступ есть
Автор: 01MDM
Дата сообщения: 17.03.2008 11:55
svradmin
Локально работает?
Автор: svradmin
Дата сообщения: 17.03.2008 11:59
Да если прям из папки запускать то работает запускаю допустим с рабочего стола - нет
Автор: 01MDM
Дата сообщения: 17.03.2008 12:25
svradmin
Тогда измени

Код:
@echo off
:: chcp 1251 >nul -- Расскоментируй эту строку если не получится
setlocal
pushd "Z:\Path"
for /f "tokens=4*" %%i in ('dir /ad ^| findstr %date% ^| findstr /v [.]$') do (
set "folder=%%i %%j" && call:move
)
popd
goto:eof

:move
if "%folder:~-1,1%"==" " set "folder=%folder:~0,-1%"
echo D | xcopy /e /y /q "%folder%" "C:\Path\%date%\%folder%" 1>nul 2>&1
Автор: svradmin
Дата сообщения: 17.03.2008 12:37
ОГРОМНОЕ СПАСИБО РАБОТАЕТ, КУЧУ ВРЕМЕНИ ПОСЛЕ 18.00 ПОМОГ СЭКОНОМИТЬ, СПАСИБО
Автор: 19w85
Дата сообщения: 19.03.2008 13:03
Добрый день.
Есть вопрос...требуется из батника приостановить (не убивать) один процесс, потом через некоторое время из другого батника снять его "с паузы"...

В графическом варианте описанную задачу умеет делать "Process Killer 1.4.2"
http://alex-home-pg.nm.ru/prkiller_manual.htm

Цитата:
suspend/resume process
временно приостановить/снова запустить процесс
Ctrl+Left

Автор: Elroir
Дата сообщения: 19.03.2008 13:10
19w85
Утилита PsSuspend от Марка Руссиновича.
Автор: 19w85
Дата сообщения: 19.03.2008 13:15
Elroir
Спасибо, не в первый раз выручаешь
Автор: slide1
Дата сообщения: 19.03.2008 19:18
Архивирование базы 1С 8:

Хочу батник, работающий как сервис, выполняющий архивацию всей базы в определенное время постоянно, например в 19.00 каждый день на сервере Windows Server 2003 R2.

Чтобы он создавал архив, например 7z a -r -y с:\Архив с:\База\*.* c именами: база1, база2, база3, база4, база5, потом база1 перезаписывается и дальше по кругу.
Пишут, что можно не всю 1С архивировать, но место есть, можно и всю
http://coder.kh.ua/razrabotka-na-1c/malenkie-hitrosti-3.html

Батник планирую запустить как сервис таким образом:
http://forum.ru-board.com/topic.cgi?forum=8&topic=0221

Спасибо.

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

создаю файлы, типа Base_dd-mm-yy_hh-mm-ss "Base_19-03-2008_19-00-00.7z"
каждый день в 19.00

если файлов <5 - пишутся новые

если = 5 то перезаписывается каждый день самый старый в 19.00
(сервак то может и перезагружаться)

я не знаю как проверить и произвести сравнение даты и времени всех пяти файлов
выбрать самый старый и его перезаписать

сначала я сделал подсчет ко-ва файлов:
set countfiles=0
for %%a in (d:\Test2\*) do set /a countfiles+=1
echo %countfiles%

все ок - пишет кол-во

как добавить дату понял: 7z a -r -y d:\Test2\%name%%date%.7z d:\Test1\*.*
но как время нет - там формат hh:mm:ss

и как узнать дату время файлов пока не нашел

полный ПЭ этот язык пакетный, проще ассемблер и си и т.п.
вроде все просто, а синтаксис просто капец и функционал
Автор: Adramelek
Дата сообщения: 20.03.2008 04:01
Вот так можно узнать имя самого старого файла в папке:
Код: @echo off
dir /b /o:-d>filenames.tmp
for /f "tokens=*" %%I in (filenames.tmp) do set FILENAME=%%I & set FILETIME=%%~tI
erase filenames.tmp
echo Oldest file: %FILENAME%
echo And his time: %FILETIME%
echo on
Автор: alers
Дата сообщения: 20.03.2008 16:17
Нужно удалить из текстового файла первые 1000 строк имеется вот такой батник:
FOR /F "skip=1000 delims= " %%i in (1.txt) Do Echo %%i>2.txt
Он удаляет все строки кроме послденей, подскажите мб дописать что нить ?

Добавлено:
Нужно удалить из текстового файла первые 1000 строк имеется вот такой батник:
FOR /F "skip=1000 delims= " %%i in (1.txt) Do Echo %%i>2.txt
Но он удаляет все строки кроме послденей, подскажите мб дописать что нить ?
Автор: Elroir
Дата сообщения: 20.03.2008 16:56
alers
Гораздо быстрее сделать так:

Код: more +1000 1.txt>2.txt
Автор: slide1
Дата сообщения: 20.03.2008 18:07
Adramelek спасибо!

Теперь мне видно как тут приходиться изворачиваться, может действительно легче на Java-script или чем то еще
Все эти коды напоминают мазохизм )))

Как в переменной из значения времени hh:mm:ss сделать hh-mm-ss чтобы его можно было добавить в название файла ?
Автор: igor_andreev
Дата сообщения: 20.03.2008 18:16
slide1

Код:
set i=%time:~0,8%
set i=%i::=-%
Автор: slide1
Дата сообщения: 20.03.2008 20:44
igor_andreev огромное спасибо! ))

Добавлено:
все теперь нашел в set /?
Автор: Adramelek
Дата сообщения: 21.03.2008 01:31
slide1
Ну да, извраты, -- но это ж даже не язык программирования. Проще всего твою задачу решить, наверное, можно с nnCron + nnBackup. Погугли, если ещё не сталкивался. Это если нужно создание бэкапа автоматизировать. В батнике для этого придётся запускать бесконечный цикл (типа, TIME /T | FIND "19:00", если ERRORLEVEL 1, по новой, а если нет, -- удаляем самый старый файл и запускаем архиватор для создания нового), и этот батник должен работать постоянно, -- что будет, естественно, кушать CPU time. Или смотри AT /?, но как по мне, лучше nnCron.
Автор: slide1
Дата сообщения: 21.03.2008 04:02
я сделал наконец, все работает:

ставлю винде задачу, запускается от SYSTEM
schtasks /create /ru system /tn 1cbk /tr c:\1cbk\1cbk.cmd /sc daily /st 03:00:00

от SYSTEM оказался другой формат даты и времени типа Fri 03/21/2008 3:33:00.09
подстроившись все вышло > Base_Fri.03.21.2008_03-33-00-09.7z

cls
chcp 1251
set count=0
set filenametime=%time%
set filenametime=%filenametime: =0%
set filenametime=%filenametime::=-%
set filenametime=%filenametime:.=-%
set filenamedate=%date%
set filenamedate=%filenamedate: =.%
set filenamedate=%filenamedate:/=.%
set basefolder=c:\База
set archivefolder=c:\1cbk_arc
set tempfolder=c:\1cbk_tmp
set prfolder=c:\1cbk

rd /q /s %tempfolder%
md %tempfolder%
xcopy %basefolder%\*.* %tempfolder%\ /e
c:\progra~1\7-zip\7z.exe a -r -y -ssw %archivefolder%\Base_%filenamedate%_%filenametime%.7z %tempfolder%\>>%prfolder%\1cbk.log

dir %archivefolder%\ /b /o:-d>%prfolder%\filenames.tmp
for /f "tokens=*" %%I in (%prfolder%\filenames.tmp) do set filename=%%I & set filetime=%%~tI & set /a count+=1
erase %prfolder%\filenames.tmp
if /i %count% GTR 5 erase %archivefolder%\%filename% & echo file %filename% deleted at %date% %time%>>%prfolder%\1cbk.log

rd /q /s %tempfolder%
@echo on

в лог файл 1cbk.log инфа от 7zip выводится в DOS кодировке, хотелось бы в WIN
файл писал в блокноте, поэтому сменил кодировку на 1251
Автор: igor_andreev
Дата сообщения: 21.03.2008 05:11

Цитата:
dir %archivefolder%\ /b /o:-d>%prfolder%\filenames.tmp
for /f "tokens=*" %%I in (%prfolder%\filenames.tmp) do set filename=%%I & set filetime=%%~tI & set /a count+=1
erase %prfolder%\filenames.tmp
if /i %count% GTR 5 erase %archivefolder%\%filename% & echo file %filename% deleted at %date% %time%>>%prfolder%\1cbk.log

А ты хочешь, чтобы оставалось пять самых новых файлов? У тебя так будет удаляться только самый последний. То есть будет в папке %archivefolder% сорок файлов - останется 39 и т.п. Правильнее так:

Код:
FOR /F "SKIP=5 TOKENS=*" %%I IN ('DIR /B /O:-D "%archivefolder%"\*.7z') DO (
ERASE "%archivefolder%"\%%I
ECHO file %%I deleted at %date% %time:~0,8%>>"%prfolder%\1cbk.log"
)
Автор: alers
Дата сообщения: 21.03.2008 07:49
Elroir спасиба
действительно проще юзать more)
Автор: slide1
Дата сообщения: 21.03.2008 09:02
igor_andreev Супер! код еще меньше, спасибо!

Добавлено:
Уже купили программу http://backupper.ru/products/keeper5_serverSQL.htm
Пока она поставляется попросили временно сделать батник

Мне понравилось решение на батнике, может поставлю на следующие серваки.

Какие + - у Cron для такой задачи ?

могут быть ошибки копирования, архивирования, сервак может вырубится (упс сдох) зависнуть, что еще ? - в батнике такие случаи не мониторятся, а в Cron ?

на Win Server 2003 - получается архив включающий первую папку "1cbk_tmp"
c:\progra~1\7-zip\7z.exe a -r -y -ssw %archivefolder%\Base_%filenamedate%_%filenametime%.7z %tempfolder%\>>%prfolder%\1cbk.log
- и в лог файле было сообщение Warning Access Denied - и путь к папке, из которой я установил 7-zip o_O

на XP - просто повисает 7-zip, пока не добавить * - и архив без папки "1cbk_tmp" готов, также и на 2003 с * "готов"
c:\progra~1\7-zip\7z.exe a -r -y -ssw %archivefolder%\Base_%filenamedate%_%filenametime%.7z %tempfolder%\*>>%prfolder%\1cbk.log

- почему такое происходит непонятно в Win Server 2003
Автор: igor_andreev
Дата сообщения: 21.03.2008 11:21
slide1

Цитата:
Уже купили программу

Описание улыбнуло. Абсолютно все ты можешь сделать батником + пару-тройку утилит консольных, особо и не за что там деньги платить. Не знаю только насчет архивирования открытых баз SQL, не пробовал.

Цитата:
Какие + - у Cron для такой задачи ?

Минус у nnCron один, но жирный - он не умеет кофе приносить. Приходится самому носиться как пчелке по офису, чайник в одном конце, сахар в другом, блин... Да ты скачай-посмотри-хэлп почитай http://nncron.ru/index_ru.shtml Этот "Хранитель V для сервера" - детский лепет по сравнению с ним.

Цитата:
в батнике такие случаи не мониторятся, а в Cron ?

И в батнике мониторятся, errorlevel никто не отменял, а приличные консольные утилиты его всегда возвращают.

Цитата:
- почему такое происходит непонятно в Win Server 2003

Тут не знаю, у меня нет сейчас сервера





Добавлено:
Кстати у nnCron-a есть младший "братан" под именем nnCron LITE, он бесплатен и для коммерчеcкого использования, им тоже можно батники запускать
Автор: slide1
Дата сообщения: 21.03.2008 18:06
igor_andreev

Для этой простой задачи, предполагаю, шедулер винды подходит лучше, родной все-таки, наверняка жрет меньше ресурсов, все равно запущен, если службу не остановить, а Cron + еще процесс, и зачем ?

Мне понравилось что в шедулере можно запускать от SYSTEM, без логона все пашет
Автор: KfarYm
Дата сообщения: 21.03.2008 19:36
Гуру`s, объясните зачем используется перенаправление в нуль `>nul`
и если не сложно - пример, где без этого не работает
Автор: slide1
Дата сообщения: 21.03.2008 20:27
для архивации нескольких баз сделал два пакетника, круто все )
--------------------------------
rem 1cbk_st.cmd

rem basefolder1 = c:\База = c:\8C54~1
rem basefolder2 = c:\База8\ = c:\84EA5~1

rem archivefolder1=c:\1cbk_arc\base
rem archivefolder2=c:\1cbk_arc\base8

call c:\1cbk\1cbk.cmd c:\8C54~1 c:\1cbk_arc\base base
call c:\1cbk\1cbk.cmd c:\84EA5~1 c:\1cbk_arc\base8 base8

--------------------------------
rem 1cbk.cmd

set filenametime=%time%
set filenametime=%filenametime: =0%
set filenametime=%filenametime::=-%
set filenametime=%filenametime:.=-%
set filenametime=%filenametime:,=-%
set filenamedate=%date%
set filenamedate=%filenamedate: =.%
set filenamedate=%filenamedate:/=.%
set basefolder=%1%
set archivefolder=%2%
set filenamename=%3%
set tempfolder=c:\1cbk_tmp
set prfolder=c:\1cbk

rd /q /s %tempfolder%
md %tempfolder%
xcopy %basefolder%\*.* %tempfolder%\ /e
c:\progra~1\7-zip\7z.exe a -r -y -ssw %archivefolder%\%filenamename%_%filenamedate%_%filenametime%.7z %tempfolder%\*>>%prfolder%\1cbk.log

for /f "skip=5 tokens=*" %%i in ('dir /b /o:-d "%archivefolder%"\*.7z') do (
erase "%archivefolder%"\%%i
echo file %%i deleted at %date% %time:~0,8%>>"%prfolder%\1cbk.log"
)

rd /q /s %tempfolder%
Автор: Elroir
Дата сообщения: 21.03.2008 22:01
KfarYm
Перенаправления в nul используется, чтобы скрыть вывод команд, когда он не нужен. Например, при использовании команды ping, меня интересует не вывод информации, а код возврата (прошел пинг или нет). При этом удобнее скрыть вывод команды. Также перенаправление в nul очень удобно, когда надо скрыть вывод ошибок при исполнении команд.
Автор: KfarYm
Дата сообщения: 21.03.2008 23:09
Elroir
Спасибо за быстрый и конкретный ответ

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172

Предыдущая тема: DVD-video (ДВД-видео) - что и как (часть 3)


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.