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

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

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

Widok (10-03-2009 12:39): Лимит страниц. Продолжаем здесь.  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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 102 103 104 105 106 107 108

   

Widok



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

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

Всего записей: 24190 | Зарегистр. 07-04-2002 | Отправлено: 12:08 19-11-2007 | Исправлено: Dmitriy05, 22:49 13-04-2008
Alexx123

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Люди, помогите написать батник на скачку одного файла из инета по ссылке и сохранение его в определенный каталог. И ещё на запуск exe`шника из сетевой папки типа //server/distr/file.exe
Заранее всем спасибо!

Всего записей: 45 | Зарегистр. 11-12-2006 | Отправлено: 14:06 05-05-2008
RG81

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Привет всем!
столкнулся с такой проблемой как написание обычного пинга...
цель: записать время вкл и время выкл компов (каждого по отдельности)
вот набросок
 

Код:
echo off
title ping
set not0=not
set not1=not
...
set not10=not
set i=0
cls
if not exist c:\LogSchool.txt (echo ^                           BEGIN...^ >c:\Log.txt)  
:begin
ping pc%i% -n 1 -w 1000 | find "TTL="  
if %not% errorlevel 1 if "%not%%i%" == "not" (set not%i%= ) else (set not%i%=not)&^
echo %errorlevel%  %date%  %time%  pc%i% >> c:\Log.txt
set /a i+=1
if %i%==11 set /a i=0
echo %not%%i%
goto begin
pause

 
проблема в том, что он не обращает условие  (if "%not%%i%" == "not" (set not%i%= ) else (set not%i%=not))

Всего записей: 1 | Зарегистр. 08-05-2008 | Отправлено: 05:32 08-05-2008 | Исправлено: RG81, 07:06 08-05-2008
01MDM



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
RG81
Лучше возьми за основу такую конструкцию:

Код:
 
ping -n 1 CompName && (
         echo success CompName %date% %time% >>Log.txt
) || (
         echo failure   CompName %date% %time% >>Log.txt  
)  
 

 
Добавлено:
Alexx123
Скачать файл можно при помощи wget.exe (обсуждение утилиты в отдельной теме)
 

Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 08:35 08-05-2008
My_Nick_Name



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Здравствуйте, Уважаемые!
Возникла задача добавления Reservation на DHCP сервер. Руками ясно дело "влом". Решил написать батник. Смысл батника следующий:
 
1. я создаю текстовый файл names_dhcp.txt, в котором по следующему шаблону ввожу доменное имя машины и резервируемый за ней IP: [name].[damain];[reservationIP]
 
Пример содержания names_dhcp.txt:
 
                      andrey.sdr;10.10.2.20
                       vova.sdr;10.10.3.180  
 
2. В Log файлах DHCP-сервера, которые он хранит по пути C:\Windows\system32\dhcp ищу MAC-адрес соответствующий имени машины.
 
3. Выполняю команду dhcpcmd входящую в состав набора утилит resource kit'a w2k
 
Dhcpcmd ServerIpAddress AddReservedIp ScopeAddress ReserveIp HardwareString [Clientname] [ClientComment] [DHCP|Bootp|Both]
 
Пример: dhcpcmd 127.0.0.1 addreservedip 11.101.0.0 11.101.13.53 08002B30369B nursvd1 both
 
 
Мой батник:
 
@echo off
for /f "tokens=1,2 delims=;" %%i in (names_dhcp.txt) do (@echo %%i %%j
for /f "tokens=7 delims=," %%c in ('findstr %%i DhcpSrvLog*.log') do (dhcpcmd server 127.0.1.1 addreservedip 10.10.0.0 %%j %%c %%i both
)
)
pause
 
Возникла следующая ПРОБЛЕМА В Log файле для имени машины из names_dhcp.txt может существовать несколько строк и следовательно команда dhcpcmd будет выполняться столько раз сколько строк с содержанием имени машины найдется в  Log файлах.
 
ВОПРОС: как можно сделать так, чтобы команда dhcpcmd выполнялась для всех %%i, но только для первого найденного %%с???
 
 

Всего записей: 16 | Зарегистр. 04-03-2008 | Отправлено: 09:44 08-05-2008
01MDM



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
My_Nick_Name
 
Как понял вопрос в том, что бы вовремя выйти из второго цикла?

Код:
 
@echo off
for /f "tokens=1,2 delims=;" %%i in (names_dhcp.txt) do (
        echo %%i %%j
        call:1 "%%i" "%%j"
)
pause
goto:eof
 
:1
for /f "tokens=7 delims=," %%c in ('findstr %~1 DhcpSrvLog*.log') do (
        dhcpcmd server 127.0.1.1 addreservedip 10.10.0.0 %~2 %%c %~1 both
        goto:eof
)  
 


Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 10:05 08-05-2008
My_Nick_Name



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
01MDM
 
Да, Вы поняли правильно. Спасибо.Все выполняется, как я и хотел. Буду дальше ковырять искусство написания батников
 
A зачем после pause следует команда goto:eof???

Всего записей: 16 | Зарегистр. 04-03-2008 | Отправлено: 11:42 08-05-2008 | Исправлено: My_Nick_Name, 12:08 08-05-2008
01MDM



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

Цитата:
A зачем после pause следует команда goto:eof???

 
Для того что бы батник заканчивал выполнение в нужном месте и не отрабатывал цикл, который в "сабрутине" 1: еще раз.
 
 

Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 12:20 08-05-2008
JI063uk



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

Здравствуйте. У меня возник такой вопрос почему данная команда не работает и программа не запускает на удаленном компе зато запускается у меня
tasklist /s "\\имя компа" | find /i "1.exe" || start "" "C:\1.exe"  
может есть другая вариант решения проблемы или есть ошибка в коде??? подскажите пожалуйста
 

Всего записей: 55 | Зарегистр. 24-01-2008 | Отправлено: 23:27 08-05-2008
Elroir



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

Цитата:
или есть ошибка в коде???  

Есть. Во первых - выдает ли команда
Код:
tasklist /s "\\имя компа"
список процессов на удаленном компе?
Во вторых, чтобы запустить программу на удаленном компе, нужно воспользоваться утилитами удаленного запуска, вроде psexec.exe

----------
"В интернете есть все, но не всегда"

Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 00:03 10-05-2008
JI063uk



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

Цитата:
список процессов на удаленном компе?  
Во вторых, чтобы запустить программу на удаленном компе, нужно воспользоваться утилитами удаленного запуска, вроде psexec.exe

 
tasklist /s "\\имя компа" работает как часики, а  psexec.exe выкачял щас буду юзать спасибо за помащь  Elroir

Всего записей: 55 | Зарегистр. 24-01-2008 | Отправлено: 05:08 10-05-2008 | Исправлено: JI063uk, 05:09 10-05-2008
Ortios



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
У меня вопрос к специалистам по утилите SED.
Возьмем к примеру типовое использование sed.

Цитата:
sed -e "что-то делаем" old.txt > new.txt

При массовой обработке файлов довольно неудобно порождать другие файлы.
Логичнее производить изменения непосредственно в файле. Но как это сделать
я пока не нашел. Хотя упоминается ключ -i, вроде бы позволяющий делать это,

Цитата:
sed -i -e "что-то делаем" source.txt

но у меня он не отрабатывает, как положено, а наоборот порождает файл
с именем sedDOSSUW.
Пользуюсь версией super Sed (sed-3.59). Ссылка
Скачал версию 3.62 Ссылка та же картина.
Кто-нибудь знает как заставить SED производить изменения непосредственно в файле?

Всего записей: 73 | Зарегистр. 24-12-2007 | Отправлено: 21:56 11-05-2008
01MDM



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

Цитата:
 
 > sed --version
GNU sed версия 4.1.5
Copyright (C).....
 

 
Все работает, из набора gnuwin32

Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 00:58 12-05-2008 | Исправлено: 01MDM, 09:21 12-05-2008
Ortios



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
01MDM
Спасибо, возьму на вооружение версию Sed 4.15. Хотя придется для переносимости с компа на комп в дополнение к exe-шнику держать в комплекте две dll-ки из каталога Bin.
Отличий в синтаксисе от SuperSed-ов при поверхностном взгляде пока не нашел.

Всего записей: 73 | Зарегистр. 24-12-2007 | Отправлено: 12:21 12-05-2008
01MDM



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ortios
ssed почему-то не может исходный файл /переименовать/заменить/ временным, вот и утыкается.

Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 13:01 12-05-2008
zx12r



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
привет всем.
Люди подскажите, пожалуйста, как передать параметр из командной строки в cmd-файл.
 
Т.е. мне нужно чтобы я набирал к примеру:    mycopy.cmd file1.txt
И батник копировал указанный файл в папки d:\folder1, d:\folder2, d:\folder3.
 
И также, если я укажу так: mycopy.cmd d:\myfolder\*.*
То копируются все файлы из папки...
 
 
Спасибо.

Всего записей: 74 | Зарегистр. 16-02-2007 | Отправлено: 11:25 15-05-2008 | Исправлено: zx12r, 12:03 15-05-2008
01MDM



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
zx12r
В самом бат-файле параметры:
%0 - сам батник,  
%1-%9 остальные параметры (или %*, если параметров много и надо избежать shift)
 
В твоем примере это будет выглядеть скорее так
 
mycopy file1.txt

Код:
 
@echo off
copy %1 d:\folder1
copy %1 d:\folder2
copy %1 d:\folder3
....
copy %1 d:\folderN
 
Или так если надо скопировать во все папки на D:\:
for /d %%i in (D:\*) do copy %1 "%%i"
 
 


Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 12:54 15-05-2008
zx12r



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
201MDM
Большое спасибо. Как раз то, что нужно.

Всего записей: 74 | Зарегистр. 16-02-2007 | Отправлено: 12:58 15-05-2008
VerlyOKa

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ребята, помогите, плз.
Есть задачка перебрать в папке файлы по определенной маске :*h.txt и скопировать определенные данные в текстовый файл
если делаю для одного файла так:
 
for /f "tokens=15,21,18 delims=    " %%a in (%tempdir%/125333h.txt) do echo %%a,%%b,%%c>>1.txt,
то работает, хочу сделать, чтоб перебирало все файлы, что-то типа
for /f "tokens=15,21,18 delims=    " %%a in (%tempdir%/*h.txt) do echo %%a,%%b,%%c>>1.txt - работать не хочет, где я допустил ошибку?

Всего записей: 14 | Зарегистр. 27-09-2007 | Отправлено: 15:31 15-05-2008
Elroir



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
VerlyOKa
Используй внешний цикл, который бежит по файлам. "for /f" не умеет работать с символами подстановки.

----------
"В интернете есть все, но не всегда"

Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 18:52 15-05-2008
aka_Fduch



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
здравствуйте,
 
мне необходимо скопировать содержания диска G (флэшка) в папку d:\tmp
причем скопировать не только файлы из корня G, но также и вложенные папки и файлы  
причем хотелось бы сделать это скрыто, без видимой активности
 
написал батнег:
@echo off
copy g:\*.* d:\tmp1
 
но копирует только файлы из корня, да еще и выскакивает окошко dosa
помогите если можете  
спасибо  

Всего записей: 43 | Зарегистр. 03-12-2004 | Отправлено: 19:52 15-05-2008
   

Страницы: 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 102 103 104 105 106 107 108

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


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

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

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru