Модераторы: bartram, Akella

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Несколько вопросов по командной строке 
V
    Опции темы
01MDM
Дата 1.3.2011, 18:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 273
Регистрация: 10.5.2008
Где: Default City

Репутация: 29
Всего: 29



MrDmitry, 
Цитата

Твой пример с калькулятором у меня не работает (

Ну не знаю. У меня все работает
user posted image

PS. Может у тебя батник не OEM-кодировке ( 866 ) и не понимает заголовок? Тогда убери `1>nul chcp 1251` 

Чтоб избежать проблем с заголовком окна, если знаешь название исполняемого файла, то можно с помощью findstr:
Код

for /f "tokens=2" %%i in (' tasklist ^| findstr "crash.exe" ') do echo %%i


Это сообщение отредактировал(а) 01MDM - 1.3.2011, 19:30


--------------------
Вопросы в личке останутся без ответов.
PM MAIL   Вверх
MrDmitry
Дата 1.3.2011, 22:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 556
Регистрация: 10.11.2006

Репутация: нет
Всего: нет



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

Это сообщение отредактировал(а) MrDmitry - 1.3.2011, 23:51
PM MAIL   Вверх
01MDM
Дата 2.3.2011, 07:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 273
Регистрация: 10.5.2008
Где: Default City

Репутация: 29
Всего: 29



MrDmitry, 
Тогда без записи действительно не обойтись. Вот наколенник, не проверял, спешу на работу:

Код

@echo off
setlocal enabledelayedexpansion


:: Если нет файла dat.txt начинаем с порта 20000

if not exist dat.txt (

    start calc
    for /f "tokens=2" %%i in (' tasklist ^| findstr "crash.exe" ') do 1>dat.txt echo 1 20000 %%i

)

:: Меню выбора

set "choice=0"

echo [0] Exit
echo [1] Start new process
echo [2] Kill process
echo [3] Kill all
echo --------- 
set /p choice="Choose: "

if %choice% equ 0 goto:eof
if %choice% equ 1 goto:start
if %choice% equ 2 goto:kill
if %choice% equ 3 (

    1>nul taskkill /im crash.exe
    del dat.txt

)
goto:eof

:: Запускаем новый процесс и перезаписываем файл dat.txt

:start

for /f "tokens=2" %%i in (dat.txt) do (

    set /a port=%%i+1
    set /a cnt+=1

)

start crash.exe
for /f "tokens=2" %%i in (' tasklist ^| findstr "crash.exe" ') do 1>>dat.txt echo %cnt% %port% %%i
goto:eof

:: Убиваем процесс на выбор и перезаписываем dat.txt

:kill

set "choice=1"

echo.
type dat.txt
set /p choice="Enter number to kill (default 1): "

for /f "tokens=3" %%i in (' findstr /b "%choice%" dat.txt ') do 1>nul taskkill /pid %%i

for /f "tokens=3" %%i in (' findstr /b "%choice%" dat.txt ') do (

    1>nul taskkill /pid %%i
    for /f "tokens=2,3" %%j in (' findstr /v "%%i" dat.txt ') do (

        set /a cnt+=1
        1>>dat.tmp echo !cnt! %%j %%k

))

move dat.tmp dat.txt


Это сообщение отредактировал(а) 01MDM - 2.3.2011, 20:32


--------------------
Вопросы в личке останутся без ответов.
PM MAIL   Вверх
MrDmitry
Дата 2.3.2011, 18:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 556
Регистрация: 10.11.2006

Репутация: нет
Всего: нет



Твой вариант прекрасно работает с калькулятором. Но не работает с моим примером.

Код

@echo off
set sum_port=27015

setlocal enabledelayedexpansion
if not exist dat.txt (
    set /a sum_port=sum_port + 1
    start crash.exe +port %sum_port%
    for /f "tokens=2" %%i in (' tasklist ^| findstr "crash.exe" ') do 1>dat.txt echo 1 %sum_port% %%i
)

:: Меню выбора
:Menu
set "choice=0"
echo [0] Exit
echo [1] Start new process
echo [2] Kill process
echo --------- 
set /p choice="Choose: "
if %choice% equ 0 goto:eof
if %choice% equ 1 goto:start
if %choice% equ 2 goto:kill

:: Запускаем новый процесс и перезаписываем файл dat.txt
:start
for /f "tokens=2" %%i in (dat.txt) do (
    set /a port=%%i+1
    set /a cnt+=1
)
start crash.exe +port %port%
for /f "tokens=2" %%i in (' tasklist ^| findstr "crash.exe" ') do 1>>dat.txt echo %cnt% %port% %%i
goto:Menu

:: Убиваем процесс на выбор и перезаписываем dat.txt
:kill
set "choice=1"
echo.
type dat.txt
set /p choice="Enter number to kill (default 1): "
for /f "tokens=3" %%i in (' findstr /b "%choice%" dat.txt ') do 1>nul taskkill /pid %%i
for /f "tokens=2,3" %%i in (dat.txt) do (
    set /a cnt+=1
    1>>dat.tmp echo !cnt! %%i %%j
)
move dat.tmp dat.txt


Результат

Код

1 27015 4596
1 27016 4596
1 27016 4796
4 27017 4596
4 27017 4796
4 27017 4916
10 27018 4596
10 27018 4796
10 27018 4916
10 27018 5056


Такой результат выдался после трех запусков программы crash.exe из скрипта
PM MAIL   Вверх
01MDM
Дата 2.3.2011, 20:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 273
Регистрация: 10.5.2008
Где: Default City

Репутация: 29
Всего: 29



Спешил, немного исправил в предыдущем листинге


--------------------
Вопросы в личке останутся без ответов.
PM MAIL   Вверх
MrDmitry
Дата 3.3.2011, 15:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 556
Регистрация: 10.11.2006

Репутация: нет
Всего: нет



Код

1 20000 2536
1 20001 2536
1 20001 764
4 20002 2536
4 20002 764
4 20002 3048
10 20003 2536
10 20003 764
10 20003 3048
10 20003 1200


Вот что записывается в файл dat.txt 
Это я только запускаю экземпляры программы

Это сообщение отредактировал(а) MrDmitry - 3.3.2011, 15:46
PM MAIL   Вверх
01MDM
Дата 3.3.2011, 21:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 273
Регистрация: 10.5.2008
Где: Default City

Репутация: 29
Всего: 29




Попробуй такой вариант. С калькуляторами работает =)

Код

@echo off
setlocal enabledelayedexpansion


:: Если нет файла dat.txt начинаем с порта 20000

if not exist dat.txt (

    start crash -port 20000
    for /f "tokens=2" %%i in (' tasklist ^| findstr "crash.exe" ') do 1>dat.txt echo 1 20000 %%i

)

:: Меню выбора

set "choice=0"

echo [0] Exit
echo [1] Start new process
echo [2] Kill process
echo [3] Kill all
echo --------- 
set /p choice="Choose: "

if %choice% equ 0 goto:eof
if %choice% equ 1 goto:start
if %choice% equ 2 goto:kill
if %choice% equ 3 (

    1>nul taskkill /im crash.exe
    del dat.txt

)
goto:eof

:: Запускаем новый процесс и перезаписываем файл dat.txt

:start
for /f "tokens=2" %%i in (dat.txt) do set /a port=%%i+1

start crash -port %port%

for /f "tokens=1,3" %%i in (dat.txt) do (
    
    set /a num=%%i+1
    for /f "tokens=2" %%k in (' tasklist ^| findstr "crash.exe" ') do (
        
        if "%%j"=="%%k" (set "pid=") else (set "pid=%%k") 
    
    )
    
)

1>>dat.txt echo %num% %port% %pid%

goto:eof

:: Убиваем процесс на выбор и перезаписываем dat.txt

:kill

1>nul findstr /b "\<2\>" dat.txt || (
    
    1>nul taskkill /im crash.exe
    del dat.txt
    goto:eof

)

set "choice=1"

echo.
for /f "tokens=1-3" %%i in (dat.txt) do echo [%%i] %%j %%k
echo -----
set /p choice="Enter number to kill (default 1): "

for /f "tokens=3" %%i in (' findstr /b "%choice%" dat.txt ') do (

    1>nul taskkill /pid %%i
    for /f "tokens=2,3" %%j in (' findstr /v "%%i" dat.txt ') do (

        set /a cnt+=1
        1>>dat.tmp echo !cnt! %%j %%k

))

move dat.tmp dat.txt


Это сообщение отредактировал(а) 01MDM - 3.3.2011, 21:14


--------------------
Вопросы в личке останутся без ответов.
PM MAIL   Вверх
MrDmitry
Дата 4.3.2011, 18:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 556
Регистрация: 10.11.2006

Репутация: нет
Всего: нет



01MDM Огромное спасибо. Кое что подправил под себя и теперь все работает как часы! 
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Windows"
December
bartram
Akella

Запрещается!

1. Обсуждать взлом и делиться кряками

2. Способствовать созданию и распространению вирусов

  • Для бессмертных бородатых вопросов типа Win vs Nix есть специальный форум Религиозные Войны
  • Несанкционированная реклама на форуме запрещена
  • Пожалуйста, давайте своим темам осмысленный, информативный заголовок. Вопль "Помогите!" таковым не является.
  • Чем полнее и яснее Вы изложите проблему, тем быстрее мы её решим.
  • ВСЕГДА УКАЗЫВАЙТЕ ВЕРСИЮ ОС

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, December, bartram, Akella.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MS Windows | Следующая тема »


 




[ Время генерации скрипта: 0.0454 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.