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

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



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Elroir
Помогите решить, а точнее дополнить уже найденный код батникаПодробнее... в котором переименовывается существующий файл, если таковой существует.
Дополнить: переименовывать до уазанного числа, а именно - на примере резервного копирование nnBackup - замещая текущий архив новым и т.д.

Всего записей: 886 | Зарегистр. 04-09-2008 | Отправлено: 22:57 04-02-2009
Elroir



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Kilyan
Я никогда не работал с nnBackup. Видимо поэтому я даже не понимаю, что надо сделать.

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

Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 00:48 05-02-2009
Dekabryi



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Zakkazak
 
вот тебе пример
Подставь сюда свои значения
start /wait notepad
start /wait calc

Всего записей: 44 | Зарегистр. 29-05-2006 | Отправлено: 06:12 05-02-2009
Kilyan



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Elroir
Хорошо.теперь подробнее:
укажем кол-во допустимых инкрементов=2
Указываем файл=файл1, проверяем его на галичие если находим переименовываем (с файл1 в файл1_1), при следующем запуске опять проверка, но если находим файл1 и файл1_1 то файл один1_1 должен стать файл1_2, файл1 должен стать файл1_1 ну а файл файлом1.
Тким образом - переименование файлов будет идти до указанной точки и старые файлы могут затираться новыми.  
И всегда файлов будет в этом случае 3 (текущий фай1,файл1_1, файл1_2)
в этом же  примере идет просто инкрементное добавление следующего значения.
ну гдето так!

Всего записей: 886 | Зарегистр. 04-09-2008 | Отправлено: 08:23 05-02-2009 | Исправлено: Kilyan, 08:37 05-02-2009
Maza_Faka



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

Цитата:
батник который будет проверять включена ли сетевая карта (есль не то включить)

Можно используя утилиту devcon.exe

Код:
 
@Echo Off
 
Set "DevName=Realtek RTL8139 Family PCI Fast Ethernet NIC"
Set TmpFile=~tmp.txt
Set Count=0
 
Setlocal enabledelayedexpansion
 
devcon hwids =net>%TmpFile%
Type %TmpFile% | Find "%DevName%">nul || Exit
 
For /F "Tokens=*" %%A In (%TmpFile%) Do (
    Set /A Count+=1
    Echo "%%A" | Find "Name: %DevName%">nul && GoTo :IDSet
    )
GoTo :EOF
 
:IDSet
Set /A Count+=1
For /F "Skip=%Count% Tokens=*" %%A In (%TmpFile%) Do Set ID="%%A" && GoTo :DevDisable
GoTo :EOF
 
:DevDisable
devcon status %ID% | Find /I "disabled">nul && devcon enable %ID%
del /f /q %TmpFile%>nul
 

Переменной DevName присваиваешь имя сетевого адаптера (можно посмотреть в "Диспетчере устройств")
 
To all
Есть ли методы выхода из цикла For без использования GoTo?

Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 11:17 05-02-2009 | Исправлено: Maza_Faka, 11:19 05-02-2009
Elroir



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

Цитата:
Есть ли методы выхода из цикла For без использования GoTo?

Нет.
Только если вынести for в отдельный блок (call :forLoop), можно прервать командой "exit /b"

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

Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 15:08 05-02-2009
hanssliver

Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
уважаемые гуру, имеется такой батник в автозагрузке:

Код:
 
dir "C:\Program Files (x86)\Autodesk\Backburner\"
@cmdow @ /hid
timeout 80
start /low /MIN server.exe
 

но server.exe блокируется брандмауэром, естественно оно в списке исключений
где косяк?

Всего записей: 57 | Зарегистр. 04-05-2008 | Отправлено: 21:15 05-02-2009 | Исправлено: hanssliver, 21:19 05-02-2009
xlopik

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

Цитата:
xlopik
 
Цитата:
батник который будет проверять включена ли сетевая карта (есль не то включить)
 
Можно используя утилиту devcon.exe
 
Код:
 
@Echo Off
 
Set "DevName=Realtek RTL8139 Family PCI Fast Ethernet NIC"
Set TmpFile=~tmp.txt
Set Count=0
 
Setlocal enabledelayedexpansion
 
devcon hwids =net>%TmpFile%
Type %TmpFile% | Find "%DevName%">nul || Exit
 
For /F "Tokens=*" %%A In (%TmpFile%) Do (
    Set /A Count+=1
    Echo "%%A" | Find "Name: %DevName%">nul && GoTo :IDSet
    )
GoTo :EOF
 
:IDSet
Set /A Count+=1
For /F "Skip=%Count% Tokens=*" %%A In (%TmpFile%) Do Set ID="%%A" && GoTo evDisable
GoTo :EOF
 
evDisable
devcon status %ID% | Find /I "disabled">nul && devcon enable %ID%
del /f /q %TmpFile%>nul
 
 
Переменной DevName присваиваешь имя сетевого адаптера (можно посмотреть в "Диспетчере устройств")  

а как сделать для универсальной сетевой карты?

Всего записей: 3 | Зарегистр. 04-02-2009 | Отправлено: 21:24 05-02-2009
An0xiety

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Доброе время суток.  
Нужно через батник, в текстовом файле, пред строками которые начинаются на Logfile.. вставлять символ # (т.е. комментировать их) и сохранять в тот же файл. Причем, при 1-м проходе надо, чтоб все строки с логами комментировались, а при 2-м, - разкомментировались. Надо реализовать без помощи посторонних утилит. 3-й день бьюсь, не могу решить.

Всего записей: 25 | Зарегистр. 16-02-2008 | Отправлено: 04:38 06-02-2009
Maza_Faka



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

Цитата:
а как сделать для универсальной сетевой карты?

Можно передавать имя сетевой карты батнику в качестве параметра:
net_enable.bat "Realtek RTL8139 Family PCI Fast Ethernet NIC"
 

Код:
 
@Echo Off
 
If "%~1"=="" Exit
 
Set "DevName=%~1"
Set TmpFile=~tmp.txt
Set Count=0
 
Setlocal enabledelayedexpansion
 
devcon hwids =net>%TmpFile%
Type %TmpFile% | Find "%DevName%">nul || Goto :EOF
 
For /F "Tokens=*" %%A In (%TmpFile%) Do (
    Set /A Count+=1
    Echo "%%A" | Find "Name: %DevName%">nul && GoTo :IDSet
    )
GoTo :EOF
 
:IDSet
Set /A Count+=1
For /F "Skip=%Count% Tokens=*" %%A In (%TmpFile%) Do Set ID="%%A" && GoTo :DevDisable
GoTo :EOF
 
:DevDisable
devcon status %ID% | Find /I "disabled">nul && devcon enable %ID%
del /f /q %TmpFile%>nul
 

 
Добавлено:
An0xiety

Цитата:
Нужно через батник, в текстовом файле, пред строками которые начинаются на Logfile.. вставлять символ # (т.е. комментировать их) и сохранять в тот же файл

Проще и быстрее решить эту задачку с помощью SED.EXE

Код:
 
Type test.txt | sed "s/^Logfile/#Logfile/g">out.txt
 

Если же использовать сторонние утилиты карма не позволяет, то можно так:

Код:
 
@Echo Off
 
For /F "Delims=" %%A In (Test.txt) Do (
  Echo %%A | Findstr /i "^Logfile">Nul 2>&1 && Echo #%%A>>Out.txt || Echo %%A>>Out.txt
)
 

:)
 
Добавлено:
hanssliver

Цитата:
но server.exe блокируется брандмауэром, естественно оно в списке исключений  
где косяк?

Если запустить код из ком. строки, что происходит?

Код:
 
start /low /MIN server.exe
 

Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 08:05 06-02-2009 | Исправлено: Maza_Faka, 09:35 06-02-2009
hanssliver

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

Цитата:
Если запустить код из ком. строки, что происходит?

тоже самое и просто при запуске..
раньше был ярлык в автозагрузке, с ним работает нормально

Всего записей: 57 | Зарегистр. 04-05-2008 | Отправлено: 10:20 06-02-2009
anatoly2002

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Полезная утилита - hs_message.exe из пакета утилит для организации интерфейса в bat-файлах. Знает ли кто-нибудь нечто подобное, допускающее изменение надписей на кнопках?

Всего записей: 226 | Зарегистр. 04-06-2002 | Отправлено: 10:37 06-02-2009
Maza_Faka



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

Цитата:
тоже самое и просто при запуске

Попробуй временно отключить брандмауэр и запустить вышеуказанный код, если проблема исчезнет, значит дело в настройках брандмауэра.

Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 11:58 06-02-2009
An0xiety

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Maza_Faka
 
Спасибо, дружище, за то, что подсказал SED.EXE, это просто отличная утилита.  
Тут неплохой мануал к ней на английском
 
С помощью SED.EXE решил комментирование/раскомментирование строк начинающихся на LogFile таким образом:

Код:
sed -n "/LogFile/p" <input.txt | Findstr /i "^Logfile" >Nul 2>&1 && sed s/^LogFile/#LogFile/g <input.txt >output.txt || sed s/^#LogFile/LogFile/g <input.txt >output.txt  

Теперь батник определяете раскоменнтирован ли LogFile, если да, то комментирует его  (меняя LogFile на #LogFile), если LogFile закомментирован - то на оборот, удалит # перед LogFile.
 
А с виндовыми средствами так и не сложилось, после комментирования, файл на выходе был без пустых строк, что сильно усложняло чтение лога. И еще , если в логе были команды CMD, то во время разбора по строкам они выполнялись !!
 
кстати, с помощью SED.EXE можно делать grep :

Код:
sed -n "/LogFile/p"

равно

Код:
grep LogFile

 
Есть 2 вопроса:
 
1) не подскажите, как игнорировать регистр в SED.EXE ? В Findstr это ключ /i, например.  Я в мануале так и не нашел
2) можно ли читать из файла input.txt и после выполнения операций в этот же файл input.txt  и записать?  
например

Код:
 sed -n "/LogFile/p" <input.txt >input.txt  

у меня просто стирает содержимое файла input.txt

Всего записей: 25 | Зарегистр. 16-02-2008 | Отправлено: 20:12 07-02-2009 | Исправлено: An0xiety, 20:22 07-02-2009
Smitis



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

Цитата:
1) не подскажите, как игнорировать регистр в SED.EXE ? В Findstr это ключ /i, например.  Я в мануале так и не нашел  
2) можно ли читать из файла input.txt и после выполнения операций в этот же файл input.txt  и записать?  


Цитата:
Тут неплохой мануал к ней на английском  

Хреновый какой-то мануал
 
1)

Цитата:
/regexp/I  
\%regexp%I  
The I modifier to regular-expression matching is a GNU extension which causes the regexp to be matched in a case-insensitive manner.

2) В ком строке -i

Цитата:
-i[SUFFIX]  
--in-place[=SUFFIX]  
This option specifies that files are to be edited in-place. GNU sed does this by creating a temporary file and sending output to this file rather than to the standard output.(1).

т.е

Код:
sed -n "/LogFile/p" -i input.txt



----------
Разум когда-нибудь победит

Всего записей: 3219 | Зарегистр. 09-02-2003 | Отправлено: 00:15 08-02-2009 | Исправлено: Smitis, 00:17 08-02-2009
An0xiety

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Smitis
 
1) большая просьба, можете привести пример, как под вин. нужно указать параметр игнора регистра?
 
2)
Не работает ни  

Код:
sed s/123/456/g -i New_file.txt

ни

Код:
sed -i s/123/456/g New_file.txt

постоянно пишет ошибку:
sed.exe: invalid option -- i

Всего записей: 25 | Зарегистр. 16-02-2008 | Отправлено: 23:45 08-02-2009
Kilyan



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

Цитата:
Elroir  
Хорошо.теперь подробнее:  
укажем кол-во допустимых инкрементов=2  
Указываем файл=файл1, проверяем его на галичие если находим переименовываем (с файл1 в файл1_1), при следующем запуске опять проверка, но если находим файл1 и файл1_1 то файл один1_1 должен стать файл1_2, файл1 должен стать файл1_1 ну а файл файлом1.  
Тким образом - переименование файлов будет идти до указанной точки и старые файлы могут затираться новыми.  
И всегда файлов будет в этом случае 3 (текущий фай1,файл1_1, файл1_2)  
в этом же  примере идет просто инкрементное добавление следующего значения.  
ну гдето так!

В программе nnBackup - резервное копирование - есть ключ -n(x) - кол-во ротаций.
Вот мне и нужно применить такую ротацию в переименовании файла до указанной.
Кто нибудь сможет помочь с решением?  

Всего записей: 886 | Зарегистр. 04-09-2008 | Отправлено: 11:37 09-02-2009 | Исправлено: Kilyan, 11:43 09-02-2009
svradmin



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Поможите с батником нужно из файла прочитать строки и присвоить переменную внутри строки определённым символам ну например есть файл 1.txt с содержанием примерно:  
bin(u7avi1425rj.bin)grp(avi:1425)len(6499380)tm(0901300846)pri(2)
bin(u7avi1425u1323rk.bin)grp(avi:1425)len(451923)dep(avi:1323)tm(0901300846)pri(2)
bin(u7avi1425u1409rk.bin)grp(avi:1425)len(82422)dep(avi:1409)tm(0901300846)pri(2)
bin(u7iavi19290.bin)grp(iavi:1929)len(32879742)tm(0902011910)pri(2)
bin(x8xplsb2_45uc.bin)grp(xplsb2:45)len(2047)tm(0901271742)pri(2)
bin(x8xplsb_41cf.bin)grp(xplsb:41)len(482066)tm(0901241412)pri(2)
bin(x8xplsb_41d37cf.bin)grp(xplsb:41)len(50657)dif(xplsb:37)tm(0901241412)pri(2)
bin(x8xplsb_41d38cf.bin)grp(xplsb:41)len(30447)dif(xplsb:38)tm(0901241412)pri(2)
 
 
переменную присваивать нужно u7avi1425rj.bin и тд *.bin чтоб потом её использовать дальше в коде батника

Всего записей: 20 | Зарегистр. 10-03-2007 | Отправлено: 11:47 09-02-2009 | Исправлено: svradmin, 12:42 09-02-2009
Elroir



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

Код:
 
for /f "tokens=2 delims=()" %%a in (1.txt) do call :process "%%a"
goto :eof
:process
echo Argument = %1
set "var=%~1"
echo "var" = %var%
 

 
Kilyan
Все никак времени нет тебе код написать :-(

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

Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 16:57 09-02-2009
Kilyan



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Elroir
Может быть все же найдется? ато логи хочется в 2-3 файлах иметь, и по одинаково структуре со смещением.
Вот этот код Подробнее... не совсем подходит - удаляется старее по дате создания по указанному кол-ву возможных SKIP=2.

Всего записей: 886 | Зарегистр. 04-09-2008 | Отправлено: 17:19 09-02-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 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