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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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
ScreamWolf



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

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

За инфу - СПАСИБО
 
А вот это можно поконкретнее... что такое "%~0" ? и что значит привязан к имени в этом случае?

Цитата:
del /f /q 1.bat  
 
 
а так(не будет привязан к имени)  
 
Код:del /f /q "%~0"

 

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

я брал в шапке... но сайтик не всегда доступен... если очень нада могу выложить архивчик...
Предупреждаю!

Цитата:
@echo off  
for /f "tokens=1* delims==" %%h in ('set PR') do echo %%i

работает отдельно...
 
Добавлено:
HaK1R

Цитата:
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%"

 
а у меня аналогичный вопрос... тока мне надо в конце каждого файла (файл является ярлыком - *.lnk) удалить слова с пробелом перед ним "_Управление" (ПОДЧЕРКИВАНИЕ - означает пробел)

Всего записей: 197 | Зарегистр. 15-05-2009 | Отправлено: 11:29 11-06-2009 | Исправлено: ScreamWolf, 16:33 11-06-2009
HaK1R



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

Цитата:
А вот это можно поконкретнее... что такое "%~0" ? и что значит привязан к имени в этом случае?  

%~0 это ссылка на данный файл
не привязан в смысле
del 1.bat будет работать если сам файл назван как 1.bat
а если del "%~0" то он может быть назван как угодно.

Цитата:
работает отдельно...  

я тогда не знаю почему сбивается на той строчке
 
spider91
ScreamWolf
я там описался  

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

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

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

Цитата:
 
 День добрый!Подскажите как с помощью bat'а отправить файл на указанную по4ту 4ерез outlook.Спасибо.

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

Всего записей: 10 | Зарегистр. 29-05-2009 | Отправлено: 11:26 15-06-2009
rainring

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Нужен маленький батник, буду очень рад помощи!!!
нужно чтоб делалось следущее:
найти на всех дисках все папки (кроме системных) с именами Temp, TMP, не учитывая регистр имени папок, и удалить эти папки без вопросов. На дисках есть WinXP & Win 7

Всего записей: 2 | Зарегистр. 16-06-2009 | Отправлено: 10:40 16-06-2009
ScreamWolf



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

Цитата:
%~0 это ссылка на данный файл  
не привязан в смысле  
del 1.bat будет работать если сам файл назван как 1.bat  
а если del "%~0" то он может быть назван как угодно.

спасибо за инфу...!!!
 

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

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


Цитата:
я там описался
->
Цитата:
тока мне надо в конце каждого файла (файл является ярлыком - *.lnk) удалить слова с пробелом перед ним "_Управление" (ПОДЧЕРКИВАНИЕ - означает пробел)

 
подскажи плиз... и можно ли это сообразить так что бы в начале батника было set /p delstr=.... и кое-нить определение "с конца"/"с начала" искать и править имя... а то по работе частенько встречаються разнообразные группы файлов которые необходимо переименовывать, я конечно тоталом пробовал (вроде ниче), но хотелось бы просто разобраться как это можно при помощу батника делать...
 
Добавлено:
HaK1R

Цитата:
@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 ffline "%%i"  
  ) else (  
    (echo %date% %time:~0,8% Сервер %%i - доступен) 1>>%report%  
  )  
)  
ping -n %timesleep% localhost 1>nul 2>&1  
goto :scan  
ffline  
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
И еще... вверхнем коде raport.txt (лог) пишится в кодировке 866, можно ли как-нить его писать в 1251?
и все же никак... обрыв на for /f "tokens=1* delims==" %%h in ('set ServerName') ....
Пробовал отдельно такой батник:

Код:
set ServerName=192.168.0.1
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 - недоступен
  ) else (
    echo %date% %time:~0,8% Сервер %%i - доступен
  )
)
pause
не работает (((
 

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

 
Добавлено:
HaK1R
Нашел трабл... красным цветом

Цитата:
set ServerName=192.168.0.1  
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 - недоступен  
  ) else (  
    echo %date% %time:~0,8% Сервер %%i - доступен  
  )  
)

но почему-то в любом случае пишет что доступен ((

Всего записей: 197 | Зарегистр. 15-05-2009 | Отправлено: 11:55 16-06-2009 | Исправлено: ScreamWolf, 13:12 16-06-2009
HaK1R



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

Цитата:
с шапки не брал? ->  

взял, ссылка работает

Цитата:
тока мне надо в конце каждого файла (файл является ярлыком - *.lnk) удалить слова с пробелом перед ним "_Управление" (ПОДЧЕРКИВАНИЕ - означает пробел)  

в смысле из "Привет тебе.lnk" нкжно "тебе .lnk"?
Цитата:
еще... вверхнем коде raport.txt (лог) пишится в кодировке 866, можно ли как-нить его писать в 1251?  

там где идет запись в файл, перед этой строчкой поставь новую строчку с chcp 1251 1>nul
а после строчки записи поставь строчку с chcp 866 1>nul
 
 
попробуй так

Код:
set ServerName=192.168.0.1
for /f "tokens=1* delims==" %%h in ('set ServerName') do (
  ping -n 1 "%%i" | find /i "TTL="
)
pause  
пишет что-нибудь?
 

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

сегодня попозже выложу
 

Цитата:
Нашел трабл... красным цветом  

это ничего не меняет, тоже самое
 
Добавлено:

Цитата:
сегодня попозже выложу  

не выложу, тока завтра

Всего записей: 136 | Зарегистр. 04-05-2009 | Отправлено: 21:15 16-06-2009
HaK1R



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

Код:
@echo off
setlocal enabledelayedexpansion
 
REM блаблабла
call :SeeProcess
REM запускаешь 2.bat
REM blablabla
call :KillProcess
REM blablabla
goto :EOF
 
:SeeProcess
for /f "tokens=2" %%i in ('tasklist ^| findstr /b cmd.exe') do (
  set "PROCESSOR_PID=!PROCESSOR_PID!,%%i"
)
set "PROCESSOR_PID=%PROCESSOR_PID:~1%"
goto :EOF
 
:KillProcess
for /f "tokens=2" %%i in ('tasklist ^| findstr /b cmd.exe') do (
  set "kill=1"
  for /f "tokens=*" %%a in ('set PROCESSOR_PID ^| findstr "%%i"') do (
    set "kill=0"
  )
  if !kill!==1 (taskkill /PID %%i 1>nul 2>&1)
)
goto :EOF

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

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
здравствуйте, помогите написать батник..
требуется извлечь из ветки регистра, например из HKLM\SOFTWARE\MyProg, значение ключа, например ключ=ExeсString - полный путь файла, и запустить это значение.

Всего записей: 83 | Зарегистр. 27-05-2009 | Отправлено: 17:52 17-06-2009
Rush

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

Код:
cmd /c for /f "tokens=2*" %a in ('reg query "HKLM\SOFTWARE\MyProg" /v ExeсString ^|find /i "ExeсString"') do (start "" "%b")

Всего записей: 3551 | Зарегистр. 20-11-2003 | Отправлено: 18:40 17-06-2009 | Исправлено: Rush, 18:41 17-06-2009
New_KoMa

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

Цитата:
из комстроки:

спасибо за отклик, вот что выдает:
c:\>cmd /c for /f "tokens=2*" %a in ('reg query "HKLM\SOFTWARE\MyProg" /v ExecString ^|find /i "ExecString"') do (start "" "%b")
Непредвиденное появление: |.

Всего записей: 83 | Зарегистр. 27-05-2009 | Отправлено: 20:24 17-06-2009 | Исправлено: New_KoMa, 20:25 17-06-2009
Ortios



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

Код:
for /f "tokens=2*" %a in ('reg query "HKLM\SOFTWARE\MyProg" /v ExecString ^|find /i "ExecString"') do (start "" "%b")

 
 

Всего записей: 73 | Зарегистр. 24-12-2007 | Отправлено: 20:35 17-06-2009
New_KoMa

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

Всего записей: 83 | Зарегистр. 27-05-2009 | Отправлено: 20:39 17-06-2009
Ortios



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Люди, извиняюсь за оффтоп, есть у кого-нить книжка А.Попова "Администрирование Windows с помощью WMI и WMIC" , есстесно в цифровом виде, поделитесь ссылочкой.

Всего записей: 73 | Зарегистр. 24-12-2007 | Отправлено: 21:01 17-06-2009
Maza_Faka



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Ortios
Во первых, для этого есть отдельный раздел
А во вторых Google ещё не отменили

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



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

Цитата:
в смысле из "Привет тебе.lnk" нкжно "тебе .lnk"?

из "Привет тебе.lnk" получить "Привет.lnk"

Цитата:
попробуй так  
 
Код:
set ServerName=192.168.0.1  
for /f "tokens=1* delims==" %%h in ('set ServerName') do (  
  ping -n 1 "%%i" | find /i "TTL="  
)  
pause  

попробовал вот что пишет
 

Цитата:
C:\>set ServerName=10.150.101.1
 
C:\>for /F "tokens=1* delims==" %h in ('set ServerName') do (ping -n 1 "%i"   |
find /i "TTL=" )
 
C:\>(ping -n 1 "10.150.101.1"   | find /i "TTL=" )
Ответ от 10.150.101.1: число байт=32 время<1мс TTL=31
 
C:\>pause
Для продолжения нажмите любую клавишу . . .

т.е. find работает... но если подставлять после if %errorlevel% - то не хочет работать ((
 

Цитата:
это ничего не меняет, тоже самое

согласен, но почему-то без "==" не работает ((

Цитата:
вместо коментов ставишь свой код

ОГРОМНОЕ СПАСИБО - РАБОТАЕТ НА УРА =)
 
 
Добавлено:
HaK1R
 

Цитата:
вместо коментов ставишь свой код

А можно ли после того как 1.bat определил 2.bat его PID записать его например в лог или реестр... необходимо для того что бы при запуске например отдельного батника 3.bat он в логе искал pid и завершал данный процесс (2.bat)...
 
Добавлено:
Подскажите токой вопрос...
 
мое представление:
работа ведеться с батником... в батником создается скрипт и запускается
сам скрипт это появление окна с 2-я кнопками
текст на кнопках должен быть мой! т е не ОК и CANCEL и т.д. лично в моем случае что-то вроде "PC" и "ID" и в зависимости от выбора пользователем кнопки обратно в батник возвращаеться код типа 0 или 1 или там переменная ну в общем как батнику потом определить какую клавишу выбрал юзер...
 
вот
 
думаю нормально поставил вопрос... не ругайтесь зря...

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



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

Код:
setlocal enabledelayedexpansion
set ServerName=192.168.0.1  
for /f "tokens=1* delims==" %%h in ('set ServerName') do (  
  set /a error=1
  for /f "tokens=*" %%i in ('ping -n 1 "%%i" ^| find /i "TTL=" 2>&1') do (set /a error=0)  
  if !error!==1 (  
    echo %date% %time:~0,8% Сервер %%i - недоступен  
  ) else (  
    echo %date% %time:~0,8% Сервер %%i - доступен  
  )  
)  

Всего записей: 136 | Зарегистр. 04-05-2009 | Отправлено: 13:24 18-06-2009
o00oalex

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Здравствуйте! У меня вопрос к знатокам. Как реализавать в bat или cmd запуск mstsc.exe с вводом ip, логина и пароля. Чтобы сразу запускался консольный вариант и не спрашивал данные пользователя. Спрашиваю потому что параметрами самого mstsc такого не сделать. Вариант с сохранением настроек в файл rdp не предлагать, т.к. предполагается запускать этот скрипт на др. машинах, а в этом случае пароли в rdp сбрасываются. Спасибо.

Всего записей: 6 | Зарегистр. 18-06-2009 | Отправлено: 16:27 18-06-2009 | Исправлено: o00oalex, 16:37 18-06-2009
HaK1R



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

Цитата:
в смысле из "Привет тебе.lnk" нкжно "тебе .lnk"?
 
из "Привет тебе.lnk" получить "Привет.lnk"  

 
Работает только на одном уровне

Код:
@echo off
pushd "C:\1\"
for /f "tokens=1*" %%a in ('dir /b *.lnk') do ren "%%~fa %%b" "%%~a%%~xb"
popd

Всего записей: 136 | Зарегистр. 04-05-2009 | Отправлено: 17:35 18-06-2009
DimaMag



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Доброго времени суток. Если не сложно, подсобите.
Задача
Есть многотомный архи созданный архиватором 7z , количество томов не постоянно. Нужно отправить его по почте причём каждый том отправляется отдельно программой postie. Как это написать в bat ?
 
------------
Заранее спасибо.

Всего записей: 379 | Зарегистр. 11-03-2005 | Отправлено: 08:18 19-06-2009
vasijapupkin

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подскажите, пожалуйста, как можно обработать строку содержащую путь, чтобы удвоить слеши. Например:
 
На входе: C:\WINDOWS\SYSTEM32
 
На выходе: C:\\WINDOWS\\SYSTEM32

Всего записей: 2 | Зарегистр. 04-08-2005 | Отправлено: 15:05 19-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