Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Программы » Командная строка, батники, сценарии (bat, cmd)

Модерирует : gyra, Maz

Widok (03-03-2010 16:29): Лимит страниц. Продолжаем здесь.  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101

   

Widok



Moderator-Следопыт
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Командная строка, батники\сценарии (bat, cmd)
(часть 1) (часть 2)
Вопросы, задачи и их решения по работе с командной строкой, файлами, а также сопутствующие ссылки.

 
Важно: копируя батник через буфер обмена из форума не забывайте удалять пробелы в конце каждой строки, т.к. в некоторых случаях из-за этого программа будет работать неправильно!!!
 
Примечание: Большие куски кода заключайте в тэг [more]  
 
Смежные темы:
В помощь системному администратору » Автоматизация администрирования
Microsoft Windows » Задачи на bat-файлах 5
 
Полезные ссылки:
· Cmd. Описание от разработчиков
· Урок bat-аники (для начинающих)
· Курс лекций для начинающих. Полезно и просто описано
· Набор GNU утилит для win32
· Пакет утилит для организации интерфейса в bat-файлах
· Использование ansi.sys
· cmdow — изменение параметров и видимости дос-окна
· blat — отправка почты из консоли
· Справка по командам в виде Html
· Команды RunDll32
· Quick Batch File Compiler - Позволяет превратить ваш батник в независимое приложение
· Пример - получение и обработка списка пользователей
· Уильям Станек - Командная строка Microsoft Windows (вплоть до w2k3)
· Простой способ получать текущую дату всегда в одном формате (не зависит от языков и настроек)
· Переход из 32-битной версии cmd.exe в 64-битную

Всего записей: 24190 | Зарегистр. 07-04-2002 | Отправлено: 12:38 10-03-2009 | Исправлено: TechnicsKuzya, 13:54 27-12-2009
Rush

Уже за тридцать...
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
lid111

Цитата:
Видимо, подразумевается год - 365 дней, а месяц - 30?

Подразумевается год=1 году, а месяц одному месяцу.
Ничто ведь не мешает поэкспериментировать на достаточно больших промежутках и сравнить правильность ответов.

Всего записей: 3551 | Зарегистр. 20-11-2003 | Отправлено: 06:45 06-06-2009
lid111

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Rush, я вам ПМ послал - не заметили?

Всего записей: 1547 | Зарегистр. 15-09-2006 | Отправлено: 18:18 06-06-2009
Rush

Уже за тридцать...
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
lid111

Цитата:
Rush, я вам ПМ послал - не заметили?  

Да, вроде, давно уже ответил. Продублировал.

Всего записей: 3551 | Зарегистр. 20-11-2003 | Отправлено: 04:02 07-06-2009
artem1982



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Никто не напишет,как сделать,чтобы при запуске игры,запускалось YASU и автоматом нажимало Cloak?

Всего записей: 274 | Зарегистр. 03-04-2005 | Отправлено: 04:49 07-06-2009
Engaged Clown



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
artem1982
Посмотри в сторону AutoIt или s0m

Всего записей: 8782 | Зарегистр. 08-06-2006 | Отправлено: 13:53 07-06-2009
Scream_Wolf



Newbie
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
ХЕЛП!!! Как осуществить следующее:

Код:
echo.for /f "tokens=1,2,3 delims=:" %%%a in ("%time:~0,8%") do (set hh=%%%a) ^& (set mm=%%%b) ^& (set ss=%%%c) >txt.bat

 
...что бы появился батник следующего содержания:

Код:
for /f "tokens=1,2,3 delims=:" %%a in ("%time:~0,8%") do (set hh=%%a) & (set mm=%%b) & (set ss=%%c)

Всего записей: 1 | Зарегистр. 09-06-2009 | Отправлено: 14:15 09-06-2009
ScreamWolf



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
echo.for /f "tokens=1,2,3 delims=:" %%%a in ("%time:~0,8%") do (set hh=%%%a) ^& (set mm=%%%b) ^& (set ss=%%%c) >txt.bat  

 
Получаеться...

Код:
for /f "tokens=1,2,3 delims=:" %time:~0,8%a) & (set mm=%%c)  
 

 

Всего записей: 197 | Зарегистр. 15-05-2009 | Отправлено: 14:29 09-06-2009
Maza_Faka



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Scream_Wolf

Код:
 
Echo for /f "tokens=1,2,3 delims=:" %%a in ("%%time:~0,8%%") do (set hh=%%%%a) ^& (set mm=%%%%b) ^& (set ss=%%%%c)>result.txt
 

Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 15:13 09-06-2009
ScreamWolf



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Maza_Faka
 
Исправлена не точность...

Цитата:
Echo for /f "tokens=1,2,3 delims=:" %%%%a in ("%%time:~0,8%%") do (set hh=%%%%a) ^& (set mm=%%%%b) ^& (set ss=%%%%c)>result.txt  

 
Работает спасибо!!!
 
И еще вопрос... 1.bat создает и запускает 2.bat. Вопрос: как отследить процесс (он ведь CMD.EXE а таких может быть несколько) дабы убить его потом (именно 2.bat) так же батником (taskkill /f /im "cmd.exe" - в этом случае он грохнет все имеющиесь CMD.exe в том числе и себя) При попытке просто удалить 2.bat cmd.exe прекращает выполняться и спрашивает о завершение пакетного файла т е нада нажимать Y/N...
 
Добавлено:
Помогите с батником...
Код
 
можно ли как-нибудь заставить батник, что-бы он спросил сколько будет серверов для проверки и после этого, в зависимости от указанного количества, спросил имя каждого сервера...
 
проводя проверку если например юзер отсутствует на месте, и если один из серверов недоступен, то на экране юзера будет полно выведеных сообщений (hs_message.exe)  
как-бы сделать так, что бы например если server2 не доступен, то больше одного сообщения не выводилось, но при этом проверка ...и server2... продолжалась
 
еще бы был бы очень презнателен если в поможете с выводом лога батником...
 
содержание лога примерно следующее

Код:
 
01.01.2001 10:00:00 Запуск проверки
01.01.2001 11:00:00 Сервер server2 - недоступен
01.01.2001 12:00:00 Сервер server4 - недоступен
01.01.2001 13:00:00 Сервер server2 - доступен
01.01.2001 14:00:00 Сервер server4 - доступен
01.01.2001 15:00:00 Остановка проверки
 

Всего записей: 197 | Зарегистр. 15-05-2009 | Отправлено: 15:52 09-06-2009 | Исправлено: ScreamWolf, 17:27 09-06-2009
William Gates

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Всем привет!
Такая проблема. Нужно узнать внешний ip не используя браузер. Наковырял на форуме такой код  
@echo off
setlocal
 
cmd /c wget -c http://www.myip.ru/ 1>nul 2>&1
 
for /f "tokens=4" %%i in ('findstr .title.* index.html') do set "ip=%%i"
echo %ip%
del index.html  
 
но что-то не срабатывает. Wget уствновлен. Что может быть? Помогите, плз.

Всего записей: 22 | Зарегистр. 12-10-2007 | Отправлено: 19:20 09-06-2009
HaK1R



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
ScreamWolf

Цитата:
И еще вопрос... 1.bat создает и запускает 2.bat. Вопрос: как отследить процесс (он ведь CMD.EXE а таких может быть несколько) дабы убить его потом (именно 2.bat) так же батником (taskkill /f /im "cmd.exe" - в этом случае он грохнет все имеющиесь CMD.exe в том числе и себя) При попытке просто удалить 2.bat cmd.exe прекращает выполняться и спрашивает о завершение пакетного файла т е нада нажимать Y/N...

а попробуй убивать не по имени процесса а по PID
 
Добавлено:
ScreamWolf

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


Код:
@echo off
set /p "NumberOfServers=Сколько серверов?"
for /l %%a in (1,1,%NumberOfServers%) do (
  set /p "ServerName_%%a=Введите имя %%a-го сервера"
)
set ServerName
pause 1>nul

 
Добавлено:
William Gates
адрес не менять!

Код:
@echo off
setlocal
cmd /c wget -c http://www.cmyip.com/ 1>nul 2>&1
for /f "tokens=4" %%i in ('findstr .title.* index.html') do set "ip=%%i"
echo %ip%
del index.html
pause 1>nul

 
Добавлено:
ScreamWolf

Цитата:
Помогите с батником...
Код  

А зачем вот это дублировать?

Код:
set server=server1  
set log=%temp%\%server%.scan  
ping -n 1 %server% >%log%  
find /i "ttl" "%log%"  
if %errorlevel%==1 goto offline
:%server%
set server=server2  
set log=%temp%\%server%.scan  
ping -n 1 %server% >%log%  
find /i "ttl" "%log%"  
if %errorlevel%==1 goto offline
:%server%
set server=server3
set log=%temp%\%server%.scan  
ping -n 1 %server% >%log%  
find /i "ttl" "%log%"  
if %errorlevel%==1 goto offline  
:%server%
set server=server4
set log=%temp%\%server%.scan  
ping -n 1 %server% >%log%  
find /i "ttl" "%log%"  
if %errorlevel%==1 goto offline  
:%server%
set server=server5
set log=%temp%\%server%.scan  
ping -n 1 %server% >%log%  
find /i "ttl" "%log%"  
if %errorlevel%==1 goto offline
?
Я сейчас немного переделаю, не против? :)
 
Добавлено:
ScreamWolf
вот вариант, с отчетом, исправил ошибки, и недочеты.
красным файл отчета

Цитата:
как-бы сделать так, что бы например если server2 не доступен, то больше одного сообщения не выводилось, но при этом проверка ...и server2... продолжалась  

А до какого момента это сообщение не должно выводится иными словами, когда оно будет снова появляться? (в примере при следующем запуске проги)
Посмотри то что синем, привильно ли написано, утилита нет, сам не могу проверить, там во втором в конце Е вместо I появилось, не знаю, нормально ли это.
И еще в конце было удоление 1.bat - убрал это

Код:
@echo off
set "report=report.txt"
set h1=18
set h2=9
set m1=0
set m2=0
set s1=0
set s2=0
set timesleep=30
set /a TimeInSec1=(%h1%*60+%m1%)*60+%s1%
set /a TimeInSec2=(%h2%*60+%m2%)*60+%s2%
set /a timesleep+=1
set /a MASS=0
set /p "NumberOfServers=Сколько серверов?"
for /l %%a in (1,1,%NumberOfServers%) do (
  set /p "ServerName_%%a=Введите имя %%a-го сервера"
)
(echo %date% %time:~0,8% Запуск проверки) 1>>%report%
start hs_message.exe "Server Controll ONLINE - ЗАПУЩЕН c %h2%:%m2%:%s2% до %h1%:%m1%:%s1% таймаут:%timesleep%сек" "!!!ВНИМАНИЕ!!!   ***   %date% %time:~0,8%" I OK
:scan
for /f "tokens=1,2,3 delims=:" %%a in ("%time:~0,8%") do (set hh=%%a) & (set mm=%%b) & (set ss=%%c)
set /a TimeInSec=(%hh%*60+%mm%)*60+%ss%
if %TimeInSec% GEQ %TimeInSec1% (goto :stop)
if %TimeInSec% Lss %TimeInSec2% (goto :stop)
for /f "tokens=1* delims==" %%h in ('set ServerName') do (
  ping -n 1 "%%i" | find /i "TTL=" 1>nul 2>&1
  if %errorlevel% 1 (
    (echo %date% %time:~0,8% Сервер %%i - недоступен) 1>>%report%
    call :offline "%%i"
  ) else (
    (echo %date% %time:~0,8% Сервер %%i - доступен) 1>>%report%
  )
)
ping -n %timesleep% localhost 1>nul 2>&1
goto :scan
:offline
if MASS==0 (start hs_message.exe "Сервер %~1 не доступен (не виден в сети)! Проверьте сетевые подключения сервера!" "!!!ВНИМАНИЕ!!!   ***   %date% %time:~0,8%" E OK)
set /a MASS=1
goto :EOF
:stop
(echo %date% %time:~0,8% Остановка проверки) 1>>%report%
start hs_message.exe "Server Controll ONLINE - ОСТАНОВЛЕН по истечению времени!" "!!!ВНИМАНИЕ!!!   ***   %date% %time:~0,8%" I OK
goto :EOF

Всего записей: 136 | Зарегистр. 04-05-2009 | Отправлено: 20:55 09-06-2009 | Исправлено: HaK1R, 22:42 09-06-2009
Maza_Faka



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
William Gates
HaK1R
Уже было:

Код:
 
@Echo Off
 
Set "TmpFile=%TEMP%\~tmp"
 
Del /F /Q "%TmpFile%">Nul 2>&1
wget -O"%TmpFile%" "http://whatismyip.com/automation/n09230945.asp" 2>Nul  
 
Set /P _IP=<"%TmpFile%"
 
Echo %_IP%
 
Del /F /Q "%TmpFile%"
 

 
ScreamWolf

Цитата:
При попытке просто удалить 2.bat cmd.exe прекращает выполняться и спрашивает о завершение пакетного файла т е нада нажимать Y/N...

Попробуйте удалять так:

Код:
 
Echo Y | Del /F /Q 2.bat
 

Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 07:39 10-06-2009
ScreamWolf



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
HaK1R
Выделонное красным не верно... на этой команде обрыв (не наю посиму ((((( )
Тута код
 

Цитата:
а попробуй убивать не по имени процесса а по PID  

а как этим же (1.bat - который создает и запускает 2.bat) батником узнать PID зпущеного батника 2.bat (cmd.exe) если сам 1.bat так же висит в прцессах (!возможно не толбько он!)...
 

Цитата:
А зачем вот это дублировать?

Я просто не знал как
Цитата:
заставить батник, что-бы он спросил сколько будет серверов для проверки и после этого, в зависимости от указанного количества, спросил имя каждого сервера...  
так что на этом спасибо большое, теперь будем знать =)
 
Maza_Faka - работает! СПАСИБО...

Цитата:
Echo Y | Del /F /Q 2.bat  

 
 
Добавлено:
Простите за глупые вопросы, но
Цитата:
(echo %date% %time:~0,8% Сервер %%i - доступен) 1>>%report%

почему в скобках (если скобки не пренадлежат FOR'у)
 
и вопрос на засыпку: в команде GOTO :EOF - 9 (8-без пробела) знаков, когда команда EXIT - в 2 раза короче... зачем тогда использовать переход в конец файла, если можно просто выйти...?

Всего записей: 197 | Зарегистр. 15-05-2009 | Отправлено: 09:32 10-06-2009 | Исправлено: ScreamWolf, 10:01 10-06-2009
William Gates

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Maza_Faka
HaK1R
 
Спасибо!Работает отлично. А можно сохранить полученый ip в файле, в определённом каталоге. Напр., С:\IP\ip.txt?  

Всего записей: 22 | Зарегистр. 12-10-2007 | Отправлено: 12:29 10-06-2009
ScreamWolf



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
William Gates
 

Код:
@Echo Off  
Set "TmpFile=%TEMP%\~tmp"  
Set DR=%SYSTEMDRIVE%\IP
if not exist "%DR%" md "%DR%"
Del /F /Q "%TmpFile%">Nul 2>&1  
wget -O"%TmpFile%" "http://whatismyip.com/automation/n09230945.asp" 2>Nul  
Set /P _IP=<"%TmpFile%"  
Echo IP-adress:%_IP% >%DR%\ip.txt
Del /F /Q "%TmpFile%"
start notepad %DR%\ip.txt

Всего записей: 197 | Зарегистр. 15-05-2009 | Отправлено: 13:06 10-06-2009 | Исправлено: ScreamWolf, 13:09 10-06-2009
Maza_Faka



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
William Gates

Цитата:
А можно сохранить полученый ip в файле

WGET имеет такой ключ:

Код:
 
wget -O"С:\IP\ip.txt" "http://whatismyip.com/automation/n09230945.asp"
 

Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 14:21 10-06-2009
ScreamWolf



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Maza_Faka

Цитата:
wget -O"С:\IP\ip.txt" "http://whatismyip.com/automation/n09230945.asp"

а каталог он тоже создаст?
 
 
Добавлено:
HaK1R
I - это окно ИНФОРМАЦИИ
E - окно ошибки
(W - предупреждение Q - вопрос)

Цитата:
Посмотри то что синем, привильно ли написано, утилита нет, сам не могу проверить, там во втором в конце Е вместо I появилось, не знаю, нормально ли это.

 
удаление 1.bat - это т.е. сам себя удалял...
 
 
Добавлено:
HaK1R

Цитата:
Я сейчас немного переделаю, не против?

я впринцыпе и мечтал об этом... ОГРОМНОЕ СПАСИБО

Всего записей: 197 | Зарегистр. 15-05-2009 | Отправлено: 14:31 10-06-2009
HaK1R



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
ScreamWolf

Цитата:
Простите за глупые вопросы, но
Цитата:
(echo %date% %time:~0,8% Сервер %%i - доступен) 1>>%report%
 
почему в скобках (если скобки не пренадлежат FOR'у)  

 
это чтобы в файл не попадали лишние пробелы, в принцыпе можно без скобочек и единички
 

Цитата:
и вопрос на засыпку: в команде GOTO :EOF - 9 (8-без пробела) знаков, когда команда EXIT - в 2 раза короче... зачем тогда использовать переход в конец файла, если можно просто выйти...?

 
когда переходит в конец файла, заканчивается выполнение операции call, и он продолжает выполнение дальше с места вызова функции, а когда exit, он завершает программу, что нам не нужно
 

Цитата:
удаление 1.bat - это т.е. сам себя удалял...  

тогда лучше не так

Код:
del /f /q 1.bat

а так(не будет привязан к имени)

Код:
del /f /q "%~0"

Цитата:
 
 
I - это окно ИНФОРМАЦИИ
E - окно ошибки
(W - предупреждение Q - вопрос)  

 
А скинь мне ссылку на hs_message.exe а то я найти не могу
 
Добавлено:
ScreamWolf

Цитата:
Выделонное красным не верно... на этой команде обрыв (не наю посиму ((((( )  

 
а вот такой в батнике отдельно работает?

Код:
@echo off
for /f "tokens=1* delims==" %%h in ('set PR') do echo %%i


Всего записей: 136 | Зарегистр. 04-05-2009 | Отправлено: 18:22 10-06-2009 | Исправлено: HaK1R, 18:28 10-06-2009
spider91

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
подскажите плиз как у всех файлов в папке убрать приставку New_ в начале

Всего записей: 605 | Зарегистр. 02-02-2009 | Отправлено: 22:39 10-06-2009
HaK1R



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
spider91

Код:
pushd "C:\ada96faa1b7f6aeaef1414a08756\"
for /f %%i in ('dir /b /a-d') do (call :renfile "%%i")
popd
gotto :EOF
 
:renfile
set "name=%~1"
ren "%name%" "%name:~4%"

Всего записей: 136 | Зарегистр. 04-05-2009 | Отправлено: 23:46 10-06-2009
   

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101

Компьютерный форум Ru.Board » Компьютеры » Программы » Командная строка, батники, сценарии (bat, cmd)
Widok (03-03-2010 16:29): Лимит страниц. Продолжаем здесь.


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru