Ru-Board.club
← Вернуться в раздел «Microsoft Windows»

» Задачи на bat-файлах 5

Автор: king_stiven
Дата сообщения: 30.04.2008 15:47
Cheerful_a_bear
-tn<время>
Обрабатывать файлы не старее, чем указанный период времени.

Задающая время строка имеет следующий формат:

[<дни>d][<часы>h][<минуты>m][<секунды>s]

Например, для обработки файлов, изменённых менее 15 дней назад,
используйте ключ '-tn15d', а для обработки файлов, изменённых
менее чем 2 часа 15 минут назад, используйте '-tn2h15m'.


-to<время>
Обрабатывать файлы более старые, чем указанный период времени.

По формату аналогичен ключу '-tn<время>'.
или тебе нужно строго по дням, 10 марта-10 февраля?
Автор: Cheerful_a_bear
Дата сообщения: 30.04.2008 16:34
Эту я задачу я решил просто...

@echo off Привет Всем

set T_Date=%DATE%-2
SET /A T_DAY=%T_DATE:~0,2%
SET /A T_MONTH=%T_DATE:~3,2%
SET /A T_YEAR=%T_DATE:~6,4%
IF %T_DATE:~3,1%==0 (
SET /A O=%0%) else (
SET /A O=%%)
IF %T_DAY:~0,1%==0 (
SET /A OO=%0%) else (
SET /A OO=%%)

set /A T_DAY=%T_DAY%-2
if %T_DAY%==0 (
SET /A T_MONTH=%T_MONTH%-1
if %T_MONTH%==0 (
set /A T_YEAR=%T_YEAR%-1
SET /A T_MONTH=12
set /A T_DAY=31)
else (
if %T_MONTH%==1 (Set /A T_Day=31)
if %T_MONTH%==2 (Set /A T_Day=28)
if %T_MONTH%==3 (Set /A T_Day=31)
if %T_MONTH%==4 (Set /A T_Day=30)
if %T_MONTH%==5 (Set /A T_Day=31)
if %T_MONTH%==6 (Set /A T_Day=30)
if %T_MONTH%==7 (Set /A T_Day=31)
if %T_MONTH%==8 (Set /A T_Day=31)
if %T_MONTH%==9 (Set /A T_Day=30)
if %T_MONTH%==10 (Set /A T_Day=31)
if %T_MONTH%==11 (Set /A T_Day=30)
if %T_MONTH%==12 (Set /A T_Day=31)
)
)
md c:\BackUP\DOC\
md c:\BackUP\XLS\
for /R %%f IN (.) DO (
cd %%f
xcopy/v /y /d:%O%%T_MONTH%-%OO%%T_DAY%-%T_YEAR% "*.doc" "c:\BackUP\DOC\"
xcopy/v /y /d:%O%%T_MONTH%-%OO%%T_DAY%-%T_YEAR% "*.xls" "c:\BackUP\XLS\"
cd ..
)
rar.exe a -r -agdd-mm-yyyy -m5 -df -y -ta%T_YEAR%%O%%T_MONTH%%OO%%T_DAY% c:\BACKUP\Архив\NET\Архив_DOC_за_.rar c:\BackUP\DOC\
rar.exe a -r -agdd-mm-yyyy -m5 -df -y -ta%T_YEAR%%O%%T_MONTH%%OO%%T_DAY% c:\BACKUP\Архив\NET\Архив_XLS_за_.rar c:\BackUP\XLS\
del /s/q c:\BackUP\DOC\
del /s/q c:\BackUP\XLS\
rmdir c:\BackUP\DOC\
rmdir c:\BackUP\XLS\



А вот ка удалять созданные архивы старее 15 дней?
Вот вопрос...
Автор: kucuk
Дата сообщения: 30.04.2008 16:34
Всем привет!

Как можно присвоить переменной значение следующей команды
netstat -an | find "3389" | find /c "ESTABLISHED" ?
Сделал через файл, но как-то коряво читать-писать один символ через файл.
Заранее спасибо
Автор: 01MDM
Дата сообщения: 30.04.2008 17:45
kucuk
for /?
Автор: STtt
Дата сообщения: 30.04.2008 21:32
Спасибо
Nagual
01MDM
Пришлось правда поискак эту robocopy немного, но за то теперь все работае со скриптами.
Автор: Takuja
Дата сообщения: 01.05.2008 10:01
Всем привет. Ребята, и Нэйджел, помогите в одном не большом вопросе. Я относительно недавно спрашивал у вас как можно создать журнал трасировки в хорошем читабельном виде, для проверки стабильности конекта на протяжении определенного времени.
Вообщем я его написал из командной строки. Почти...
Вот код.


Код: :_start
setlocal
set _var=X
for /F "usebackq skip=4 tokens=1-5 delims= " %%i IN (`tracert combats.ru -d -w 1000`) DO set _var%%i=%%j
endlocal
goto _start
Автор: 01MDM
Дата сообщения: 01.05.2008 10:14
Takuja
Используй setlocal enabledelayedexpansion для set _var=!_var!%%i в цикле.

Или выноси set из цикла

Код:
for ..... do (
call:label "%%i"
)
goto:eof

:label
set _var=%_var%%~1
Автор: Takuja
Дата сообщения: 01.05.2008 11:44
01MDM
то что ты предложил не очень помогло, так как CALL вызывает разово якорь и выходит из цыкла, потому присваивается только первре значение и всё, больше вичего не происходит.
Другой вариант есть?
Автор: 01MDM
Дата сообщения: 01.05.2008 12:24
Takuja

Ну да, это особенности tracert...
Тогда, как-нибудь так

Код:
@echo off
setlocal
tracert ya.ru -d -w 1000 >>1.tmp
for /F "usebackq skip=4 tokens=1-5 delims= " %%i IN (1.tmp) DO (
    call:res "%%i" "%%j"
)
del 1.tmp
echo %var:~0,-1%
goto:eof
:res
echo %~1 %~2 | findstr [0-9] 1>nul && (
    set var=%var%%~1:%~2_
)

Автор: Takuja
Дата сообщения: 01.05.2008 16:48
Таааак. Вот написал, полностью рабочий вариант, давольно просто и сердито.
Вобщем копируете это в батник, и запускаете, по умолчанию там внесено трассировка Комбатс.ру и сохранение отчета на диске Д.
Эти параметры можно поменять в заголовке сетап.

Суть программы заключается в проверке каждого компьютера от локальной машины до машины пункта назначения, показывая в удобной форме задержку между машинами.
Вот сам Код, может комуто пригодиться.


Код: @echo off
setlocal enabledelayedexpansion
rem ------------------
rem SETUP NASTROIKI
rem _sname - server name (imja servera)
rem _path - document path (put' jurnala)
rem ------------------
set _sname=combats.ru
set _path=d:\

echo TRACERT SERVIS IS RUNING
echo Tracering %_sname%
echo Jurnal in %_path%%_sname%.txt
tracert %_sname% -w 1000 >> %_path%%_sname%.txt

:_start
set _var=%TIME%
for /F "usebackq eol=’ skip=4 tokens=1-5 delims= " %%i IN (`tracert %_sname% -d -w 1000`) DO (call:label "%%j")
echo %_var% >> %_path%%_sname%.txt

goto _start

endlocal
goto:eof
:label
set _var=%_var%    "%~1"
Автор: Astron
Дата сообщения: 03.05.2008 19:43
Глубокоуважаемый мной Elroir! Подниму тему, которую Вы любезно решили ранее, касаемо:

http://forum.ru-board.com/topic.cgi?forum=62&topic=11825&start=1820#7
http://forum.ru-board.com/topic.cgi?forum=62&topic=11825&start=1860#2
http://forum.ru-board.com/topic.cgi?forum=62&topic=11825&start=1920#19

в общем, в районе эти постов, помнишь? Могу ли я попросит сделать универсальные батник+cmdшник, которые работали бы следующим образом:

Команда №1 в контекстном меню, например "Spaces to Underscores"
--->меняет в имени пробелы на подчеркивания для текущего файла или каталога, причем имена всех содержащихся в текущем каталоге файлов и подкаталогов НЕ изменяются

Команда №2 в контекстном меню, например "All Sub Spaces to Underscores"
--->меняет пробелы на подчеркивания для текущего файла, а в случае каталога, то для него и всех содержащихся в нем файлов и каталогов

Это было бы здорово!
Автор: angeltwo
Дата сообщения: 03.05.2008 20:13
Dantis


Цитата:
1) Как Запустиьть с Помощью Батника Службу?? ( имя ее Diskeeper )

Если служба установлена:
net start Diskeeper или
sc start Diskeeper (этой командой можно запускать эту службу и с удаленного компьютера, читай хелп по ней)

Цитата:
2) Как убить процесс avp.exe (Антивирус Карсперского 6.0 ) и oupost.exe (Фаер Вол OutPost 4.0) (через диспетчер задач я их убить не могу =( )

не знай, поможет или нет, проверить не могу
taskkill /F /IM avp.exe /IM outpost.exe /T
(либо с помощью утилиты из PsTools: pskill -t avp.exe
pskill -t outpost.exe)

Цитата:
3)
Как запутить программы с помощью батника.&

пишу start F:\Проги\Norton WinDoctor 2007\WINDOC.EXE и не работает.... похоже запинается на русских буквах и пробелах =(

Мне надо запустить пару файлов:

F:\Проги\Norton WinDoctor 2007\WINDOC.EXE
F:\Проги\Diskeeper Corporation\Diskeeper\Diskeeper.msc
F:\Проги\VitSoft\Vit Registry Fix\Vit Registry Fix 4.2.exe
F:\Проги\CCleaner2.03\CCleaner.exe

Надо имя с пробелами в кавычки брать: start "F:\Проги\Norton WinDoctor 2007\WINDOC.EXE" (если хочешь, чтобы батник ждал завершения этой программы, то используй start /wait "F:\Проги\Norton WinDoctor 2007\WINDOC.EXE") Остальные exe-шники точно так же.
Msc-файл запускай так(правда это только консоль, сама она делать ничего не будет):
либо: "F:\Проги\Diskeeper Corporation\Diskeeper\Diskeeper.msc"
либо: mmc "F:\Проги\Diskeeper Corporation\Diskeeper\Diskeeper.msc"
Автор: Elroir
Дата сообщения: 03.05.2008 20:36
angeltwo

Цитата:
Надо имя с пробелами в кавычки брать: start "F:\Проги\Norton WinDoctor 2007\WINDOC.EXE" (если хочешь, чтобы батник ждал завершения этой программы, то используй start /wait "F:\Проги\Norton WinDoctor 2007\WINDOC.EXE")

Все верно, только работать оно не будет. Имя с пробелами, действительно надо брать в кавычки, но перед этим именем, обязательно добавлять еще и пустые кавычки. Это обсуждалось несчетное количество раз.
Dantis

Код:
start "" "F:\Проги\Norton WinDoctor 2007\WINDOC.EXE"
start /wait "" "F:\Проги\Norton WinDoctor 2007\WINDOC.EXE"
Автор: panda3
Дата сообщения: 03.05.2008 21:52
Есть ли простой способ преобразовать строку вида "000054" в десятичное число (количество ведущих нулей может быть произвольное)?
Автор: Elroir
Дата сообщения: 03.05.2008 21:57
panda3
Тебе нужно отбросить все нули слева?
Автор: panda3
Дата сообщения: 03.05.2008 22:01
Elroir
ну да. Пока что вот придумал так:


Код: set tmp=1%str%
set /a a=tmp-1000000
Автор: igor_andreev
Дата сообщения: 03.05.2008 22:43
panda3
for /f "tokens=* delims=0" %%a in ('echo %str%') do set "str=%%a"
Автор: Astron
Дата сообщения: 03.05.2008 22:50
Elroir
Спасибо, если будет время. Я напомню
Автор: Dantis
Дата сообщения: 03.05.2008 22:52
Elroir

Спасибо русские символы работают. и проги запускаются =).
angeltwo


Цитата:
не знай, поможет или нет, проверить не могу
taskkill /F /IM avp.exe /IM outpost.exe /T
(либо с помощью утилиты из PsTools: pskill -t avp.exe
pskill -t outpost.exe)


Эти команды не работают =(.


Цитата:
Msc-файл запускай так(правда это только консоль, сама она делать ничего не будет):
либо: "F:\Проги\Diskeeper Corporation\Diskeeper\Diskeeper.msc"

Работает но как то через раз


Цитата:
либо: mmc "F:\Проги\Diskeeper Corporation\Diskeeper\Diskeeper.msc"


Эт запускает консоль. она мне нах не нужна =).
Цитата:
net start Diskeeper или




Цитата:
net start Diskeeper


Это работает =).


angeltwo, Elroir Огромное спасибо за помощь.



Автор: bmax
Дата сообщения: 04.05.2008 09:20
To All
Прошу прощения за настойчивость, задача может быть простая и не интересная, но не для меня, поэтому может кто-нибудь все таки поможет решить ее

Суть задачи еще раз переписывать не буду(есть на прдыдущей страничке)


Цитата:
@echo off
FOR /f "tokens=*" %%i in ('dir /b /s /a-d "D:\4\*.*"') do set /a count+=1
IF EXIST D:3\*.* set "count=0%count%" ELSE
set "count=00%count%"
set "count=%count:~-2%"
for /f "tokens=*" %%c in ('dir "D:\1\*.*" /o:-d /t:c /b /a:-d') do (

find /n %%c d:\2\qqq.dat - определить номер строки в которой встречается имя найденного выше файла и занести его в переменную??????????

- Затем в папке "D:\3" берем файл с именем 'старое имя' +'номер строки -2' + 'старое расширение' и копируем его в папку "D:\4" с переименовыванием???????????

copy /y /D "D:\3\%%f" "D:\4\17%date:~0,2%%count%.dvc"
goto :eof
)
)


Всем откликнувшимся спасибо!


Автор: cluster
Дата сообщения: 04.05.2008 10:58
Ребят, а как в сценарии организовать индикацию выполнения команды?
Если выполнена успешно - ОК. Если ошибка - Error.
Я так понимаю нужно использовать error level'ы?
Автор: king_stiven
Дата сообщения: 04.05.2008 11:23
cluster
if not errorlevel 1 echo ОК
if errorlevel 1 echo Error

Правда иногда не прокатывает, надо проверять.
Автор: igor_andreev
Дата сообщения: 04.05.2008 12:24
bmax

Цитата:
find /n %%c d:\2\qqq.dat - определить номер строки в которой встречается имя найденного выше файла и занести его в переменную??????????

Лучше не FIND /N, а FINDSTR /N

Код:
for /f "tokens=1 delims=:" %%a in ('findstr /n "что искать" файл') do set "numm=%%a"
Автор: ruan13BRD
Дата сообщения: 04.05.2008 13:49
Помогите,пожалуйста, сделать батник, который формировал бы ежемесячный отчет об изменениях в рабочем каталоге. То есть каждый месяц в рабочем каталоге проходит проверка на измененые файлы, те файлы в которых произошли изменения, попадают в отчет (например файл report.txt)
Автор: bmax
Дата сообщения: 04.05.2008 13:52
igor_andreev, спасибо!
а как синтаксически верно уменьшить значение numm на 2?
Автор: Nagual
Дата сообщения: 04.05.2008 13:58
cluster

Цитата:
как в сценарии организовать индикацию выполнения команды?

для этого надо лезть в справку каждой команды и изучать её коды возврата (errorlevels)
самому протестить команду на ошибки можно примерно так

Код:
@echo off
title Џа®ўҐаЄ  -  ®иЁЎЄг Є®¬ -¤л:
:repeat
echo
.
set /p "input= ‚ўҐ¤ЁвҐ Є®¬ -¤г: "
set "comm=%input%"
title Џа®ўҐаЄ  -  ®иЁЎЄг Є®¬ -¤л: "%comm%"
%comm%
echo
.&echo Џ®«гзҐ- Є®¤ ў®§ўа в  ®иЁЎЄЁ %errorlevel%&echo.&goto:repeat

ну и if/? тебе в помощь
Автор: igor_andreev
Дата сообщения: 04.05.2008 14:30
ruan13BRD
Если только средствами Windows, то можешь сбрасывать аттрибут "Архивный" с файлов в папке(ATTRIB /?), в конце месяца смотреть, на каких файлах он появился - те и изменены.

Но лучше fastsum консольную возьми отсюда www.fastsum.com
В начале месяца

Код:
rem создать в корне папки файл WORKDIR.MD5, рекурсивно,
rem перезаписать MD5, если уже существует
fastsum D:\WORKDIR /R /O /T:R
Автор: bmax
Дата сообщения: 04.05.2008 14:58
igor_andreev


Цитата:
Понятия не имею, как синтаксически верно, я обычно просто отнимаю 2
set /a numm=%numm%-2


Я все перепробывал, но вот такого варианта расстановки процентов не делал, сейчас наверное все получится

Огромное спасибо!
Автор: JI063uk
Дата сообщения: 04.05.2008 19:07
Нужна помощь в следующем вопросе есть батник, который удалено прибивает процесс на компах которые прописаны тут list.txt, надо чтобы он потом его обратно запустил на этих же компах после того как прибил. Не знаю как это реализовать…. Заранее благодарю

Код
@echo off
setlocal
for /f "tokens=*" %%i in (list.txt) do (
taskkill /s "\\%%i" /im 1.exe /f
)
///если выполняется то запускает это start "" "C:\111\1.exe"
PAUSE

Автор: 01MDM
Дата сообщения: 04.05.2008 19:42
JI063uk
psexec из набора PSTools (ссылка в шапке).

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566

Предыдущая тема: Сброс пароля администратора


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