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

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



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

Цитата:
Такая странная проблема:

Сохрани батник в DOS кодировке и не парься с переключением кодировок.

Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 07:11 27-03-2008 | Исправлено: Maza Faka, 07:20 27-03-2008
01MDM



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

Цитата:
И еще хотелось чтобы в системной папке удалялись файлы от установленных заплаток типа $NtUninstallKB835732$, где после КВ может быть любой номер. Как это циклом организовать?

 

Код:
 
@echo off
pushd %windir%
for /f %%i in ('dir /b /ad $Nt* ^| findstr KB[0-9]') do (
    echo %%i
    rem rd /s /q %%i
)
popd
 

 

Цитата:
Так почему то владелец не заменяется.

Наверное потому что ты пытаешься заменить на всю группу, а не на отдельного пользователя. Проще наверное на каждую папку в Docs & Sets выставить разрешения для себя

Код:
 
cacls Folder /e /g UserName:F
 

 
Во всяком случае это у меня срабатывало, когда нужно было в без.режиме подгрузить ntuser.dat "Администратора".
 
 
 
 

Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 09:48 27-03-2008
misha1950



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Сдраствуйте. Мне нужен bat. файл который при маленькой скорости (Настройка скорости) закачки визовал reconnect.bat Спасибо!!!

Всего записей: 52 | Зарегистр. 11-03-2007 | Отправлено: 11:43 27-03-2008
gryu



дикий гусь
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Коллеги, в шапке, если покопатся, можно найти следующий сценарий для Чтение из файлов содержащих ключи и значения (подобно структуре .ini файлов)
 
Set FileToRead=data.cfg
Set Key=full
For /F "usebackq delims=" %%i In (`Find /I "%Key%=" %FileToRead%`) Do Set Value=%%i
Echo %Value:~+5%
 
Вроде как рабочий, но у меня почему то не получается.  
Он не находит нужный ключ. ...  
Привожу свой пример сделанный на основе этого.  
 
Set FileToRead=out.reg
Set Key="Pad"
For /F "usebackq delims=" %%i In (`Find /I "%Key%=" %FileToRead%`) Do Set Value=%%i
Echo %value%>pad.reg
pause
 
вот лог  
 
 
C:\Temp\experiments\editing\test>Set FileToRead=out.reg
 
C:\Temp\experiments\editing\test>Set Key="Pad"
 
C:\Temp\experiments\editing\test>For /F "usebackq delims=" %i In (`Find /I ""Pad
"=" out.reg`) Do Set Value=%i
Не найден файл: PAD
 
C:\Temp\experiments\editing\test>Set Value=---------- OUT.REG
 
C:\Temp\experiments\editing\test>Set Value="Pad"="76455ffff7890gg"
 
C:\Temp\experiments\editing\test>Set Value="DigitalID"=hex:a4,00,00,00,03,00,00,
00,37,36,34,35,35,2d,4f,45,4d,2d,\
 
C:\Temp\experiments\editing\test>Echo "DigitalID"=hex:a4,00,00,00,03,00,00,00,37
,36,34,35,35,2d,4f,45,4d,2d,\ 1>pad.reg
 
Что не правильно?

Всего записей: 13019 | Зарегистр. 15-03-2006 | Отправлено: 15:07 27-03-2008
Elroir



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
gryu
Попробуй поменять Set Key="Pad" на Set "Key=Pad"

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

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



дикий гусь
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Elroir
Вообще не работает.  
При Set Key="Pad" он выдаёт в конечый файл последние (самой нижние) ключ и значение
При  Set "Key=Pad" он он выдаёт в конечный файл только имя файла источника ---------- out.reg
При  Set "Key="Pad"" тоже самое что и Set Key="Pad"

Всего записей: 13019 | Зарегистр. 15-03-2006 | Отправлено: 17:17 27-03-2008 | Исправлено: gryu, 17:18 27-03-2008
Elroir



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

Код:
 
Set Key="Pad"
For /F "usebackq skip=1 delims=" %%i In (`Find /I ""%Key%"=" %FileToRead%`) Do Set Value=%%i
 


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

Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 18:13 27-03-2008
gryu



дикий гусь
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Elroir
спасибо. получилось.  
если не возражаешь её один вопрос.  
есть переменная %%I  
Данная переменная состоит из единой группы букв и цифр
Нужно эту единую группу разбить по подгруппам разделённым запятой.
т.е есть  
***********************
а сделать нужно  
********,********,********  

Всего записей: 13019 | Зарегистр. 15-03-2006 | Отправлено: 18:26 27-03-2008
Elroir



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
gryu
Нужно отделять определенное количество символов? Всегда одно и то же?

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

Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 18:30 27-03-2008
gryu



дикий гусь
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Elroir
да. символы могут быть разные.  
т.е. через каждые 8 символов нужно ставить запятую

Всего записей: 13019 | Зарегистр. 15-03-2006 | Отправлено: 18:56 27-03-2008
Elroir



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

Код:
 
for %%I in (12345678qwertyui12345678 asdfghjk12345678zxcvbnml) do (
set "parts="
call :divide "%%I"
)
goto :EOF
:divide
set "parts=%~1"
set "parts=%parts:~0,8%,%parts:~8,8%,%parts:~16%"
echo %parts%
 


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

Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 19:47 27-03-2008
gryu



дикий гусь
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Elroir
способ работает, но к сожалению не годится.  
Там в нескольких местах длинна ключа 256 и 512 знаков.  
Банально в строку не влазит. (не говоря уже том, что оболдеешь писать)
Перевод строки "^" не работает почему то.  
Да и ... не эстетично
Как то надо через ещё одну переменную наверно.  
А как что то не соображу.
Думал через set /a но что то не соображу как.  

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



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
gryu
 
Попробуй, должен работать до 800 знаков (если длина переменной позволит) и если в строке нет спецсимволов (! < = > " %)

Код:
 
@echo off
setlocal
 
for %%i in (12345678123456781234567812345678123456781234567812345678) do call:job "%%i"
set xxx=%xxx:~0,-1%
echo %xxx%      
goto:eof
 
:job
set xxx=%~1
set /p=%xxx%<nul>len.tmp
for /f %%i in ('dir /b len.tmp') do set len=%%~zi
del len.tmp
 
set /a part=len/8
 
for /l %%i in (0,1,%part%) do call:divd %%i
set xxx=
for /f "tokens=2 delims==" %%i in ('set ss') do call:conc "%%i"
goto:eof
 
:divd
set ind=0%1
if not "%xxx%"=="" set ss%ind:~-2,2%=%xxx:~0,8%
set xxx=%xxx:~8%
goto:eof
 
:conc
set xxx=%xxx%%~1,
 
 

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



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

Всего записей: 13019 | Зарегистр. 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

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

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

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



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

Всего записей: 13019 | Зарегистр. 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
   

Страницы: 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