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

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

Автор: duh_S
Дата сообщения: 22.04.2010 14:09
вот как сейчас:

Код: set ThisCmdDir=%~dp0
Set path_ACCOUNT_VCF="%ThisCmdDir%ACCOUNT_duh.VCF"
Set "Key=@mail.ru"
setlocal enabledelayedexpansion
For /F "usebackq delims=" %%i in (`Find /I "%Key%" ^< %path_ACCOUNT_VCF%`) Do Set "Value=%%i" & for /f "delims=:" %%j in ("!Value:%Key%=:!") do set "Value=%%j"
@Echo.%Value%
Автор: 0Vovan0
Дата сообщения: 22.04.2010 15:17
duh_S
К сожалению нет, я же про параметры уточнил. В памяти может висеть одновременно несколько скриптов, а мне нужно проверить висит ли один конкретный, т.е. фильтровать мне надо по "php myscript.php" , а не просто по "php"

Также обнаружил какие-то странности с фильтрацией вывода tasklist с помощью find , бывает не выводит ничего, даже когда процесс запущен. а вот findstr срабатывает нормально
Автор: Joo1z
Дата сообщения: 22.04.2010 16:09
0Vovan0
Если в скрипте задать TITLE для окна, то по tasklist /v |findstr -i %scripttitle% или tasklist /FI "WINDOWTITLE eq %scripttitle%" можно выцепить.
Автор: wolf0425
Дата сообщения: 22.04.2010 16:27
0Vovan0
Цитата:
Можно ли в винХР с её штатными утилитами реализовать аналог никсового
можно на бейсике написать ps, 5 строк батника генератор.
Автор: 0Vovan0
Дата сообщения: 22.04.2010 18:10
Joo1z
скрипт без окошка запускается, так что не подойдет

wolf0425
Ну если пять строк то интересно было бы увидеть

Тем не менее - штатными утилитами винды получить параметры с которыми были вызваны запущенные процессы - получается нельзя?
Автор: wolf0425
Дата сообщения: 22.04.2010 18:49

Цитата:
Тем не менее - штатными утилитами винды получить параметры с которыми были вызваны запущенные процессы - получается нельзя?
я в свое время искал - не нашел.
Может конечно плохо искал. Но вот скрипт - нашел

как-то так
Код: @echo off

> %temp%\tasks.vbs echo Set Procs = GetObject("winmgmts://localhost")
>>%temp%\tasks.vbs echo Set Processes = Procs.ExecQuery("select * from Win32_Process")
>>%temp%\tasks.vbs echo For Each i In Processes
>>%temp%\tasks.vbs echo WScript.Echo i.Name ^& " " ^& i.CommandLine
>>%temp%\tasks.vbs echo Next

cscript //nologo %temp%\tasks.vbs | findstr /r /b /i /c:"php\.exe .*myscript\.php" >nul && Echo Working!
del %temp%\tasks.vbs
Автор: Rush
Дата сообщения: 23.04.2010 04:13
0Vovan0

Код: @echo off

wmic process where (name='php.exe') get commandline | findstr /i "myscript.php">nul && Echo Working!
Автор: BUGL
Дата сообщения: 23.04.2010 07:14
Вопрос глуповат, но никак не могу сообразить с указанием имен файлов:

есть папка. в ней 2 вида файлов textномер01.дата и text2номер001.дата.
к примеру text07.102 и report008.102. дата - номер дня от начала года.

необходимо при наличии хотя бы одного файла одного типа выводить сообщение net send. при наличии файлов другого типа другое сообщение. файлы никак друг с другом не связаны, кроме расположения в одной папке.

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

спасибо за уделяемое время.
Автор: vov4ka
Дата сообщения: 23.04.2010 11:06
Joo1z,спасибо огромное,но что-то он не робает(((Может,какая-то синтаксическая ошибка вкралась?
Автор: Joo1z
Дата сообщения: 23.04.2010 11:57
vov4ka
А что не работает? Скрипт или все-равно проблемы с выборами? Права админа на всех компах?
Можно после sc \\%%a stop browser добавить строчку sc \\%%a config browser start= DISABLED - после "start=" пробел, а затем параметр.
Проверь чтоб в файле со списком компов все было Ок. Должен быть один комп на строку без двойного обратного слэша "\\".
Добавь в конце скрипта PAUSE и глянь что пишет.

Код: @echo off
FOR /f %%a IN (pclist.txt) DO (
REG ADD \\%%a\HKLM\SYSTEM\CurrentControlSet\Services\Browser\Parameters /v IsDomainMaster /t REG_SZ /d FALSE /f
REG ADD \\%%a\HKLM\SYSTEM\CurrentControlSet\Services\Browser\Parameters /v MaintainServerList /t REG_SZ /d NO /f
sc \\%%a stop browser
sc \\%%a config browser start= DISABLED
)
pause
Автор: wolf0425
Дата сообщения: 23.04.2010 12:28

Цитата:
необходимо при наличии хотя бы одного файла одного типа выводить сообщение net send. при наличии файлов другого типа другое сообщение.
а при наличии обоих что выволить?
проверку можно сделать примерно так:

Код: dir /a-d /b | findstr /r /c:"[0-9][0-9][0-9]\." >nul && echo Found xxxNNN.*
Автор: Pavlon333
Дата сообщения: 23.04.2010 12:35
Можно ли организовать какой-нибудь простой progress bar в батнике, который настроен на копирование и сравнение каталогов?
Т.е. там строки xcopy, robocopy. Вывод осуществляется в лог файл.

Хочется, чтобы пользователь видел, что программа работает и не закрывал раньше времени окно.
Вывод служебной информации о копировании на экран отключено (@echo off)
Автор: wolf0425
Дата сообщения: 23.04.2010 13:25

Цитата:
Хочется, чтобы пользователь видел, что программа работает и не закрывал раньше времени окно.
так напиши ему что программа будет работать чтоб не трогал.

просто длительно выполняющаяся операция и зависшая программа - для батника одно и то же.

Но если очень хочется показометр и если ты знаешь как параллельным процессом отловить признаки того, что программа исправно работает - запусти этот процесс индикации параллельно в той же консоли.
пускаешь рекурсивно параллельным процессом через start /b "" "%~f0" pokazometr, в батнике ветвление в начале, и показывай той веткой батника что-то шевелящееся промежуточное - хоть длину того лога в байтах прописывай в заголовок консоли, хоть просто время, если уверен что не зависнет. Ну и флаги на окончание процесса.
только не забудь паузу в цикл индикации вставить, чтоб 100% проца не выжирать. пинг вполне сгодится.

[more=пример с таймером]
Код: @echo off

if not ~%1~==~%~nx0~ (start "" /low %~nx0 %~nx0 %* ) & goto :eof
if not ~%2~==~title~ goto :begin

:loop
Set /a     Time#c=((0%Time:~0,1%)*600 + (%Time:~1,1%)*60 + (%Time:~3,1%)*10 + (%Time:~4,1%))*60 + (%Time:~6,1%)*10 + (%Time:~7,1%) - %Time#S%
title %time#c%
1>nul 2>&1 ping -n 1 -w 500 127.255.255.255
1>nul 2>&1 dir %temp%.\flag%~n0.tmp && goto :loop
exit

:begin
Set /a     Time#s=((0%Time:~0,1%)*600 + (%Time:~1,1%)*60 + (%Time:~3,1%)*10 + (%Time:~4,1%))*60 + (%Time:~6,1%)*10 + (%Time:~7,1%)

echo %time% 1> %temp%.\flag%~n0.tmp
start "" /b %~nx0 %~nx0 title

chcp 1251>nul
pushd "%~dp0"
title %time%

if ~%2~==~skip~ goto :skip

1>nul 2>&1 reg delete hkcu\software\far2\pluginscache /f
1>nul 2>&1 reg export hkcu\software\far2 "%~dp0FarSave1.reg"

cd . 1> filelist.txt

for %%a in ( c:\ d:\ t:\ e:\ ) do echo scan %%a && dir /l /b /s /a-d %%a 1>> filelist.txt
echo optimise list

sed -i -c -r -f exclude.sed filelist.txt
sed -n -r -f filelist.sed filelist.txt | find /v /i "%~dp0filelist.txt%" | sort 1>filelist2.txt
del filelist.txt
if exist sed??????. del sed??????.

:skip
Set /a     Time#E=((0%Time:~0,1%)*600 + (%Time:~1,1%)*60 + (%Time:~3,1%)*10 + (%Time:~4,1%))*60 + (%Time:~6,1%)*10 + (%Time:~7,1%) - %Time#S%
echo compress
winRar.exe a -m5 -s -tl -ac a%date:~6,4%-%date:~3,2%-%date:~0,2%.rar @filelist2.txt

del %temp%.\flag%~n0.tmp
Set /a     Time#f=((0%Time:~0,1%)*600 + (%Time:~1,1%)*60 + (%Time:~3,1%)*10 + (%Time:~4,1%))*60 + (%Time:~6,1%)*10 + (%Time:~7,1%) - %Time#S%
ping -n 2 localhost >nul
title %Time#E% sec - %Time#f% sec
pause & exit
Автор: vov4ka
Дата сообщения: 23.04.2010 13:57
Joo1z пишет вот что:
Операция успешно завершена

Операция успешно завершена
[SC] ControlService FAILED 1062:


[SC] ChangeServiceConfig SUCCESS

Error: Не найден сетевой путь.

Error: Не найден сетевой путь.
[SC] OpenSCManager FAILED 1722:


[SC] OpenSCManager FAILED 1722:

В списке компов:
conserver
isot
А вообще Ваш скрипт гениален-я даже не знал,что такие штуки выделывать можно!!! Как самому такому можно научиться?
Автор: Joo1z
Дата сообщения: 23.04.2010 14:26
vov4ka
Операция успешно завершена

Операция успешно завершена

Это изменились записи в реестре
[SC] ControlService FAILED 1062:
Это говорит о том, что сервис уже остановлен.

[SC] ChangeServiceConfig SUCCESS
Это говорит о том, что параметры запуска сервиса успешно изменены.

Так что все нормально.

А если речь об обучении, то читай эту ветку - лучше в рунете не видел, очень полезно. Просто читай что народ хочет, а потом смотри как выглядит скрипт. Копируй, запускай у себя, модифицируй и снова запускай.
Автор: 0Vovan0
Дата сообщения: 23.04.2010 14:56
wolf0425 Rush
Большое спасибо

Вариант от Rush полностью подошел, хотя пока его не увидел уже собрался доделать скрипт от Rush как аналог никсовой ps
Автор: vov4ka
Дата сообщения: 23.04.2010 15:18
Joo1z
Да,действительно работает! Но только,если вместо NetBios имен IP-адреса компов указывать. А что в Вашем батнике значат ключи /f %%a /t /d ?
Автор: 0Vovan0
Дата сообщения: 23.04.2010 15:26
Еще такой вопрос

Допустим я хочу сделать "аналог" grep в виде grep.bat , в котором будет
findstr /i %*
Сохранил такой батничек, набираю в консоли
dir | grep "php"
и вместо фильрации вывода dir получаю в консоли
findstr /i "php"

Как сделать чтобы findstr в этом случае обрабатывала вывод так как мне надо?
Автор: Joo1z
Дата сообщения: 23.04.2010 15:54
vov4ka
Напиши в командной строке "REG ADD /?" и "FOR /?" и почитай. К тому же все есть в шапке.
Автор: 01MDM
Дата сообщения: 23.04.2010 22:33
0Vovan0
Зачем тебе аналог grep в виде батника? Пользуй grep.exe если в findstr чего-то не хватает.
Автор: wolf0425
Дата сообщения: 24.04.2010 00:15

Цитата:
Как сделать чтобы findstr в этом случае обрабатывала вывод так как мне надо?

сделать то тривиально - берешь
Код: @echo off
findstr /i /r /c:"%~1"
Автор: 0Vovan0
Дата сообщения: 24.04.2010 01:08
wolf0425
Спасибо. Как оказалось я просто немного запутался, не сделав @echo off в батнике я получал на выходе ту команду которая в батнике исполняется.

Ну а так grep.exe рулит А ps.exe не существует случаем?, искал и нигде не нашел. ps.exe интересует исключительно ради синтаксиса и поддержки тех же команд что и в юниксах, если такое найдется будет удобно - не нужно будет писать разные команды для винды и никсов. Ни в UnixUtils, ни в CoreUtils ps.exe я не нашел, какой то ps.exe нашелся в MSYS, но почему то оно даже стандартных виндовых процессов не выводит
Автор: Free_Soft
Дата сообщения: 24.04.2010 14:14
Подскажите, можно ли в батнике организовать нечто вроде прогресс-бара, например из символа "=" и указания прогресса в %?
Автор: king_stiven
Дата сообщения: 24.04.2010 14:20
Free_Soft

Код: @echo off
setlocal enabledelayedexpansion
for %%a in (*.*) do set /a kolvo+=1
set file=1
set e=1
set "bar=#__________________________________"
For %%F In (*.*) Do (
Set /a N+=1
set vsego=!N!
set Percent=!N!
set /a Percent*=100
set /a Percent/=%kolvo%
set /a vsego*=35
set /a vsego/=%kolvo%
call :tyu
if defined e Title !Percent!^%% [!bar!] > nul
xcopy "%%F" A:\ > nul
set e=
)
GoTo :EOF
:tyu
:ert
if !vsego! GTR !file! (
set "bar=#!bar!"
set /a file+=1
set "bar=!bar:~0,-1!"
set e=1
goto :ert
)
Автор: Free_Soft
Дата сообщения: 24.04.2010 14:31
king_stiven
Это как я понял для отображения в заголовке? а в самой консоли можно?
Автор: NIKZZZZ
Дата сообщения: 24.04.2010 15:09
Free_Soft

Цитата:
организовать нечто вроде прогресс-бара, например из символа "=" и указания прогресса в %?


Код: echo off
set /a Percent=0
set "Progres="
:_0
if %Percent% LEQ 100 (
set Progres=%Progres%=
set /a Percent+=1
cls
echo Progres
echo %Progres% Percent=%Percent%
ping -n 1 localhost > nul
goto _0
)
Автор: Free_Soft
Дата сообщения: 24.04.2010 16:06
NIKZZZZ
Спасибо! Подскажите еще, как применить cls только к онкретной строке прогрессбара, т.е. чтобы все, что скрипт отработал до этого не исчезало?
заранее благодарен
Автор: NIKZZZZ
Дата сообщения: 24.04.2010 18:06
Free_Soft

Цитата:
как применить cls только к онкретной строке прогрессбара, т.е. чтобы все, что скрипт отработал до этого не исчезало?

Стандартными средствами Windows, боюсь никак. В шапке есть утилиты, позволяющие это сделать.
Автор: king_stiven
Дата сообщения: 24.04.2010 19:11
Free_Soft
утилиты для организации интерфейса ком строки
Автор: yurkesha
Дата сообщения: 24.04.2010 20:49
king_stiven
Это те утилиты при попытке доступа к которым выдает:
Цитата:
Запрашиваемый раздел не существует.
?
Были такие

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132

Предыдущая тема: XP не видит второй раздел на съемном USB-HDD


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