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

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



дикий гусь
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
01MDM
о как!  
Кхм. Совсем туплю я чтоли?
Итак. Берём твой пример и вместо переменной в тупую подставляем значение
(в идиале там переменная указываеся.)
В конце делаем вывод полученного в файл. (для проверки результата, чтоб в идеале результат передать для долнейшей обработки)
А получаем ....:-(
 
Пример ->
 
Результат ->
 
 
А должно быть ->
:?

Всего записей: 13033 | Зарегистр. 15-03-2006 | Отправлено: 13:22 28-03-2008 | Исправлено: gryu, 16:11 30-03-2008
01MDM



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
gryu
 
Проверил твой пример - все OK. . Концевые пробелы в батнике могут быть причиной.
 
Только ты последнюю строчку убери, если надо перенаправить в файл то сделай это здесь:

Код:
 
@echo off
setlocal
 
for %%i in (bla-bla-bla) do call:job "%%i"
set xxx=%xxx:~0,-1%
echo %xxx% >1.txt      
goto:eof
....
....
 
 

Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 13:41 28-03-2008 | Исправлено: 01MDM, 13:51 28-03-2008
igor_andreev

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

Цитата:
Концевые пробелы в батнике могут быть причиной.

Про "костыль" для копирования я упоминал тут

Всего записей: 1705 | Зарегистр. 08-12-2004 | Отправлено: 14:02 28-03-2008
gryu



дикий гусь
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
01MDMПро концевые пробелы я вспомнил. .... (правда после того как уже написал.. )
По поводу перенаправления.  
Мне не в файл нужно, обозвать результат переменной и передать дальше для обработки.  
В файл это я для проверки.

Всего записей: 13033 | Зарегистр. 15-03-2006 | Отправлено: 14:05 28-03-2008
01MDM



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
igor_andreev
Надо на видное место, рядом с важно
 

 
 
Добавлено:
gryu
 

Цитата:
Мне не в файл нужно, обозвать результат переменной и передать дальше для обработки.  
В файл это я для проверки.

 
Тогда:

Код:
 
@echo off
setlocal
 
for %%i in (bla-bla-bla) do call:job "%%i"
set xxx=%xxx:~0,-1%
 
:: Перемнная %xxx% в этом месте определена, с запятыми      
goto:labelForFurthertJob
....
....
 

 
 
 
 

Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 14:09 28-03-2008 | Исправлено: 01MDM, 14:17 28-03-2008
Elroir



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
gryu
Я же давал именно пример. Вот еще один вариант, ограничение - максимальная длина строки в CMD.
Вместо моей строчки с for-он подставь свою (откуда-то у же тебя строчки в переменную %%I попадают):

Код:
 
@echo off
setlocal
for %%I in (A40000000300000037363438372D3634302D323539363435342D3233323638002E0000004132322D3030303031000000000000007A2C534CFCDEF58696B25186CB4A0200000000004DF886471F910100000000000000000000000000000000000000000000000000333437303400000000000000FC15000030BC833CFF01000000250000000000000000000000000000000000000000000000000000000000009BC85D0DA40000000300000037363438372D3634302D323539363435342D3233323638002E0000004132322D3030303031000000000000007A2C534CFCDEF58696B25186CB4A0200000000004DF886471F910100000000000000000000000000000000000000000000000000333437303400000000000000FC15000030BC833CFF01000000250000000000000000000000000000000000000000000000000000000000009BC85D0D) do (
set "divided="
set "parts=%%I"
call :divide
)
echo %divided%
goto :EOF
:divide
if "%parts%"=="" (
set "divided=%divided:~0,-1%"
goto :EOF
)
set "divided=%divided%%parts:~0,8%,"
set "parts=%parts:~8%"
goto divide
 


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

Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 14:16 28-03-2008
XXXXL



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ребята, есть текстовой документ с примерно следующим содержимом в одну строку:
rt54%67/%$90)(%&ghjkdhg
одним словом латинские буквы, все возможные символы и цифры. Реально ли через командную строку удалить все символы, оставив только буквы и цифры  
Пример:
было rt54%67/%$90)(%&ghjkdhg
стало rt546790ghjkdhg
 
Зарание благодарен вам за потерянное время.

Всего записей: 286 | Зарегистр. 16-05-2007 | Отправлено: 19:04 29-03-2008
igor_andreev

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
XXXXL
sed.exe можно заюзать, или vbscript. Чистый батник не всегда адекватно будет реагировать на спецсимволы

Код:

sed -e "s/[^a-z0-9.]//g" old.txt>new.txt

Всего записей: 1705 | Зарегистр. 08-12-2004 | Отправлено: 19:30 29-03-2008
Elroir



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
XXXXL
Предположим, что строчка находится в файле test.txt, тогда:

Код:
 
@echo off
setlocal
for /f "tokens=*" %%a in (test.txt) do (set "line=%%a")
call :alfanum
:: В переменной %newline% сейчас находится строка с оставшимися символами
echo %newline%
goto :EOF
:alfanum
set "include="
set "letter=%line:~0,1%"
for %%a in (a b c d e f g h i j k l m n o p q r s t u v w x y z 1 2 3 4 5 6 7 8 9 0) do (  
if /i "%letter%"=="%%a" (set "include=yes")
)
if defined include set "newline=%newline%%letter%"
set "line=%line:~1%"
if not "%line%"=="" goto alfanum
 

 
Добавлено:
igor_andreev
Ну не доходят у меня руки до sed-a :-)

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

Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 19:34 29-03-2008 | Исправлено: Elroir, 21:10 29-03-2008
igor_andreev

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
XXXXL
Предыдущая строчка с sed была именно для твоего примера - "rt54%67/%$90)(%&ghjkdhg" Если есть и прописные и строчные буквы, то нужно [^A-Za-z0-9.]
 
 
Добавлено:
Elroir
Да я и сам в регулярных выражениях не силен, более-менее простые вещи еще могу, со сложными начинаю спотыкаться.

Всего записей: 1705 | Зарегистр. 08-12-2004 | Отправлено: 19:46 29-03-2008
XXXXL



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
igor_andreev,Elroir, спасибо вам ребята за отзывчивость!
 

Всего записей: 286 | Зарегистр. 16-05-2007 | Отправлено: 20:19 29-03-2008
gryu



дикий гусь
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Elroir, 01MDM спасибо. Только сегодня смог взятся за скрипт.
Спасибо ещё раз. Воспользовался  предложенным Elroirом.
 
 

Всего записей: 13033 | Зарегистр. 15-03-2006 | Отправлено: 19:18 30-03-2008
igor_andreev

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

Цитата:
Вот еще один вариант, ограничение - максимальная длина строки в CMD.

Кстати с sed в этом плане попроще, у нее ограничения наверное есть, но где то за пределами разумного. Создал сейчас файл test.txt - чуть больше миллиона знаков в одну строчку. За полсекунды разделила каждые восемь знаков запятой

Код:

sed -e "s/\(.\{8\}\)/\1\,/g" test.txt >new.txt

sed у меня сейчас эта http://sed.sourceforge.net/grabbag/ssed/sed-3.59.zip (super-sed)
 
 

Всего записей: 1705 | Зарегистр. 08-12-2004 | Отправлено: 20:48 30-03-2008 | Исправлено: igor_andreev, 20:50 30-03-2008
gryu



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

Цитата:
sed у меня сейчас эта http://sed.sourceforge.net/grabbag/ssed/sed-3.59.zip (super-sed)  

т.е. идея в том, что на машине существуют сторонние программы пр помощи которых и производятся операции?
Тогда это однозначно не пойдёт.  
Идея в том, что бы делать всё чисто штатными средствами.  
Отослал батник - получил результат.  
 
Добавлено:
Кстати, если я не ошибаюсь, то в бат-файле нет возможности создать меню с выбором исполняемого блока. Или всё же есть?
Интересует результат типа  
1. Бэкап
2. Ресторе
3. Выход
С выбором.  
(организация требуемого сторонней программой возможна. А вот может прямо так можно??? )

Всего записей: 13033 | Зарегистр. 15-03-2006 | Отправлено: 22:09 30-03-2008 | Исправлено: gryu, 22:16 30-03-2008
01MDM



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

Цитата:
Кстати, если я не ошибаюсь, то в бат-файле нет возможности создать меню с выбором исполняемого блока. Или всё же есть?
Интересует результат типа  
1. Бэкап
2. Ресторе
3. Выход
С выбором.  
(организация требуемого сторонней программой возможна. А вот может прямо так можно??? )

 
В смысле выбор задачи для выполнения интерактивно? Можно.
 

Код:
 
@echo off
echo [1] Task1
echo [2] Task2
echo [3] Task3
 
set /p tsk="Choose a task by number: "
 
if not defined tsk goto:eof
if %tsk%==1 goto:1
if %tsk%==2 goto:2
if %tsk%==3 goto:3
goto:eof
 
:1
echo 1
goto:eof
:2
echo 2
goto:eof
:3
echo 3
goto:eof
 
 


Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 22:38 30-03-2008 | Исправлено: 01MDM, 22:42 30-03-2008
gryu



дикий гусь
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
01MDM
Опа.
А я перечитал кучу инфы, и нигде не указано.  
пробовал как в конфиге через [MENU], но не работает.  

Всего записей: 13033 | Зарегистр. 15-03-2006 | Отправлено: 22:48 30-03-2008
drondo



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Имется ноут, который ношу на работу. есть две локалки, на работе и дома соответственно. настройки сетевого соединения отличаются лишь IP адресом, DNS и шлюзом. скажите можно ли сделать чтото типа скрипта или батника для автоматизации изменения сетевых параметров? Ручками надоело каждый день. Программы типа NETswitcher не предлагать, нужен именно скрипт, батник или подобное.

Всего записей: 461 | Зарегистр. 28-10-2005 | Отправлено: 18:07 02-04-2008
igor_andreev

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
drondo
Бета-тестером будешь У меня есть где-то такой батник, написал в ситуации, схожей с твоей. Я им сам так толком и не попользовался, роутер другой купил, везде IP и DNS стал одинаковый, и дома и на работе. До дома доберусь - выложу.
 
Добавлено:
там кстати несложно, можешь и сам батник написать, сохранить настройки:
netsh interface dump > data.txt  
восстановить:  
netsh -f data.txt

Всего записей: 1705 | Зарегистр. 08-12-2004 | Отправлено: 19:02 02-04-2008
01MDM



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
drondo
igor_andreev
 
Можно слегка "облагородить"

Код:
 
@echo off
setlocal
echo [1] Work
echo [2] Home
set /p location="Choose location by number: "
if not defined location goto:eof
if %location%==1 netsh exec Work.cfg
if %location%==2 netsh exec Home.cfg
 

 
Где Work.cfg и Home.cfg результаты:  

Код:
 
netsh interface ip dump >Work.cfg или Home.cfg
 

 
Эти файлы должны быть рядом с батником
 
ЗЫ. Не проверял.

Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 19:57 02-04-2008
igor_andreev

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
drondo
Посмотрел сейчас аж три варианта этого батника в разных ипостасях, какой из них стопудово рабочий - не помню. Кажется этот  setwf.zip (~2 Kb). Лучше использовать вместе с choice.zip (~20 Kb), но эт не обязательно. Еще мне почему-то казалось, что я выбор принтера делал, но сейчас такого батника чего-то не вижу.
 
01MDM

Цитата:
Можно слегка "облагородить"

У мну этот setwf (set wi-fi) - оо-о-очень облагорожен Меню может работать с choice.exe из Win 2000 ResKit и из XP Support Tools и из Win2003 и просто с set /p. Я даже не помню, зачем так делал, тренировался наверно. В любом случае, батник можно рассматривать начинающим, как пособие по созданию динамического меню в cmd.

Цитата:
ЗЫ. Не проверял.

Я тоже
 
 

Всего записей: 1705 | Зарегистр. 08-12-2004 | Отправлено: 21:52 02-04-2008 | Исправлено: igor_andreev, 21:58 02-04-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