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

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

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

Цитата:
 http://forum.ru-board.com/topic.cgi?forum=5&topic=25393&start=1440
 
Доброго времени суток!
Решил облегчить себе жизнь, но как то получилось не очень...  
В сети есть несколько проксиков и нужно перевести пользователей qip с одного проксика  
на другой. Хранит qip конфиг в текстовом файле и нужно всего лишь заменить там несколько строк.
... нужно изменить строку Port=5190 на Port=443  

 
Небольшой парсер с прогресс каунтером тебе в помощь :) надеюсь что не поздно.
 

Код:
 
 
@echo off
setlocal enabledelayedexpansion
 
:: Задать путь к inputfile для парсинга. Результат в outputfile.
 
set inputfile="input.txt"
set outputfile="output.txt"
set tempfile="temp.txt"
 
:: В ctrlenter символ ctrl-enter счётчика обработанных линий. Набирается в Edit.
 
set ctrlenter=
set /a linecount=0
if exist %outputfile% del %outputfile% >NUL
>%tempfile% find /N /V "bla_bla_bla" %inputfile%
for /f "skip=2 tokens=1,2 delims==" %%a in ('type %tempfile% 2^>NUL') do (call :parser "%%a" "%%b")
if exist %tempfile% del %tempfile% >NUL
goto :eof
 
:parser
set /a linecount+=1
<NUL set /p progress=%ctrlenter%
for /l %%a in (0,1,18) do <NUL set /p progress=%progress%%ctrlenter%
<NUL set /p progress=%progress%Parsing line %linecount%
if "%~2"=="" (set parsevalue=%~2) else (set parsevalue==%~2)
 
:: Заменяемые значения
::
:: if "%~2"=="xxx1" set parsevalue==yyy1
:: if "%~2"=="xxx2" set parsevalue==yyy2
::                            ...
::
:: Внимание ! в файле inputfile значение вида AAA= т.е. пустое равенство должно
:: заканчиваться хотя бы одним пробелом после знака равенства. Также не перевариваются  
:: и вызывают крах скрипта или неверный результат в outputfile спецсимволы < > & | ^ % " '
 
if "%~2"=="5190" set parsevalue==443
 
set string=%~1
:parsenextchar
if "%string:~0,1%"=="]" goto parseline
set string=%string:~1%
goto parsenextchar
:parseline
set string=%string:~1%
if "%string%"=="" echo.>>%outputfile%&goto :eof
>>%outputfile% echo %string%%parsevalue%
goto :eof
 
 

 
ЗЫ:
 
Да если просто скопировать скрипт в файл то работать не будет. Причина в том, что при копировании со страницы  в конец каждой строки добавляется пробел :( (как и указано вверху страницы). Чтобы работало после копирования скрипта в файл необходимо удалить добавленные пробелы в конце каждой строки. Нераспознаваемый символ в кодировке ASCII (DOS) удалять не нужно.
 
ЗЗЫ:
 
Другой вариант парсера, не требующий чтобы равенство вида AAA= заканчивалось пробелом (т.е. не требующий какого-либо предварительного редактирования модифицируемого файла) дабы не заспамлять форум находится здесь
 
http://d e p o s i t f i l e s . c o m/files/j1nxf9y8q
 
Подопытный файл из квипа:  
 
http://d e p o s i t f i l e s . c o m/files/cfcays3mx

Всего записей: 3 | Зарегистр. 20-11-2008 | Отправлено: 18:06 20-11-2008 | Исправлено: DrZoltsberg, 23:54 25-11-2008
statistik1981

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Привет всем!
 
Как с помощью батника сетевой принтер сделать по умолчанию?
 
У меня просто скрипт отрабатывается при загрузке и выставляет не тот принтер.
Сам скрипт я трогать не хочу, иначе на меня потом все шишки полетят.
 
Команда:  
RUNDLL32 PRINTUI.DLL,PrintUIEntry /y /n "prtmng02", где prtmng02 - имя принтера
 
неработает, говорит что имя принтера неможет найти.
Как я понял, это прокатывает только на локальных принтерах

Всего записей: 7 | Зарегистр. 24-05-2008 | Отправлено: 19:28 20-11-2008 | Исправлено: statistik1981, 20:06 20-11-2008
DrZoltsberg

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

Код:
 
rundll32 printui.dll,PrintUIEntry /y /c\\machine1 /n\\machine2\prtmng02
 
или
 
rundll32 printui.dll,PrintUIEntry /y /ga /c\\machine1 /n\\machine2\prtmng02 /j"LanMan Print Services"
 
вобщем без экспериментов не обойтись набираем rundll32 printui.dll,PrintUIEntry /? и зачитываемся
 

Всего записей: 3 | Зарегистр. 20-11-2008 | Отправлено: 21:51 20-11-2008 | Исправлено: DrZoltsberg, 22:23 20-11-2008
statistik1981

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
DrZoltsberg
 
Я не смог заставить это работать.
На сервере все прекрасно изменяется, а на локальном компе нехотит.

Всего записей: 7 | Зарегистр. 24-05-2008 | Отправлено: 15:38 21-11-2008
pasha



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Elroir
Сенкс! Попробую в виртуалке, отпишусь.

Всего записей: 1207 | Зарегистр. 27-10-2002 | Отправлено: 18:38 21-11-2008
s1nfrompvl



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
хм.... страниц очень много.. попытался поискать поиском но не получилось...  
в общем проблема такого вида... мне надо чтобы через echo записать строчку но не надо туда добавлять переност строчки.. =).. или можно другой вариант реализации...
есть утилита svnversion(она показывает номер ревизии svn в виде циферки)...
но мне надо записать ответ в файл.. но при этом добавить перед ней строчку(для компиляции проекта и добавления в него информацию о номере svn ревизии)...
что то типо
################
echo svnrev=>version.h
svnversion >>version.h
################
в файле надо сохранить в виде
################
svnrev=55
################
а не  
################
svnrev=
55
################

Всего записей: 59 | Зарегистр. 07-04-2008 | Отправлено: 13:38 22-11-2008
Elroir



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

Код:
 
set /p=svnrev=<nul>version.h
svnversion>>version.h
 


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

Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 14:34 22-11-2008
s1nfrompvl



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

Всего записей: 59 | Зарегистр. 07-04-2008 | Отправлено: 16:14 22-11-2008
XXXXL



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Здравствуйте!
У меня тут такая не задача..... попытаюсь объястнить доступно.
 
В директории "A"  есть файлы .txt и в директории "B" есть файлы .txt,  в "B" положил батник 1.bat c таким содержимым : del *.txt запускаю этот бат из батника, который работает в директории "А" start B\1.bat, он должен удалить все файлы в "B" а он удаляет в "А"  (((( немогу понять как его правельно запустить.
Помогите пожалуйста.
 

Всего записей: 286 | Зарегистр. 16-05-2007 | Отправлено: 20:16 22-11-2008
Elroir



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
XXXXL
Либо пиши в 1.bat:

Код:
del [Полный путь до директории B]\*.txt

либо в другом батнике:

Код:
 
cd "[Полный путь до директории B]"
call 1.bat
 



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

Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 20:39 22-11-2008
XXXXL



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

Код:
cd "[Полный путь до директории B]"  
call 1.bat

Вот этот код просто супер, даже не знал, что есть такая полезная функция.
СПАСИБО!!!

Всего записей: 286 | Зарегистр. 16-05-2007 | Отправлено: 10:30 23-11-2008
APSTENU



Newbie
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Всем привет.
Может кто подскажет как с помощью батника создать подключение к интернету,
не подключиться а создать подключение

Всего записей: 14 | Зарегистр. 22-11-2008 | Отправлено: 17:25 23-11-2008
Elroir



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
APSTENU
Соединения определяются в текстовом файле "rasphone.pbk"
Его можно либо заменить на тот, в котором уже определено соединение, либо добавить туда нужные строчки командой echo.

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

Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 17:54 23-11-2008
APSTENU



Newbie
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Да, об этом файле я слышал, думал может есть другой способ

Всего записей: 14 | Зарегистр. 22-11-2008 | Отправлено: 18:27 23-11-2008
Ninja33



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Всем доброго времени суток!Как можно реализовать такой сценарий:например в папке лежит 400 патчей(Patch_shell32.exe,Patch_soundvol.exe.....)и 400 файлов для пропатчивания(shell32.dll,soundvol.exe...)можна сделать пакетный файл чтобы запускал все патчи???Вот то что я написал,но он не совсем правильно работает:
For /F "UseBackQ Delims=" %%I In (`Dir C:\Tmp /B /ON 2^>nul`) Do C:\Tmp\%%~I -force -guiless -auto -dir C:\Tmp
pause
exit
во первых,он пытается запутить кроме патчей и сами файлы и в итоге на какомто этапе зависает...,во вторых,(если положить,допустим 5 файлов и 5 патчей)после пропатчивания и дет все по кругу,приходится его грубо вырубать....
Зарание благодарен за любую помощь.

Всего записей: 32 | Зарегистр. 28-09-2008 | Отправлено: 09:53 24-11-2008
Elroir



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ninja33
Если патчи консольные, тогда так:

Код:
 
@echo off
For %%I In (Patch_*.exe) Do "C:\Tmp\%%I" -force -guiless -auto -dir C:\Tmp
 

Если нет, тогда так:

Код:
 
@echo off
For %%I In (Patch_*.exe) Do start /wait "" "C:\Tmp\%%I" -force -guiless -auto -dir C:\Tmp
 



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

Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 14:06 24-11-2008
dex_2005



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Доброе время суток, Господа!
Требуется ваша помощь. Нужен батник чтоб контролировал соединение в интернетом, идея такова!
значит пингуем IP какого нить интернет сервиса например того же ya.ru если пинг присутствует записываем дату и время + строку Интернет есть =)(надо чтоб это действие писалось в лог файл всего лишь один раз, а если инет вдруг пропадет тоже действие запись в лог + строка Инет отсутствует (надо чтоб и это сообщение записалось один раз)и все сначала! =)

Всего записей: 49 | Зарегистр. 07-03-2008 | Отправлено: 15:24 24-11-2008
Ninja33



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

Всего записей: 32 | Зарегистр. 28-09-2008 | Отправлено: 15:37 24-11-2008
Elroir



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
dex_2005
Если я правильно понял, то, наверно, так:

Код:
 
@echo off
setlocal
:loop
ping ya.ru | find "TTL=">nul
if errorlevel 1 (
if not defined noConnection (
set "noConnection=true"
echo %date% %time% Disconnected>>log.txt
)
) else (
if defined noConnection (
set "noConnection="
echo %date% %time% Connected>>log.txt
)
)
goto loop
 

Батник не тестировался.

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

Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 16:23 24-11-2008
grokote

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подскажите пожалуйста точную команду. Требуется: в определенной папке проверить все имена всех папок (включая вложенные) и, если в имени присутствует определенная комбинация, заменить ее на другую (пример - было "b_(file)_name" стало "b (notfile) name"). Попробовал несколько комбинаций, но так что-то ничего не получилось.

Всего записей: 51 | Зарегистр. 08-01-2008 | Отправлено: 23:02 24-11-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.Board
© Ru.Board 2000-2020

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru