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

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

Модерирует : KLASS, IFkO

vu1tur (14-11-2006 16:59): http://forum.ru-board.com/topic.cgi?forum=62&topic=9040  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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

   

hacsoft

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Задачи на bat-файлах
Вопросы, задачи и их решения по работе с командными файлами, а также сопутствующие ссылки.
 
Смежные темы:
В помощь системному администратору » Автоматизация администрирования
Программы » Командная строка, батники\сценарии
 
Полезные ссылки:
· Cmd. Описание от разработчиков
· Набор GNU утилит для win32
· Встроенный справочник по командам: hh ntcmds.chm
· Пакет утилит для организации интерфейса в bat-файлах
· Использование ansi.sys
· cmdow — изменение параметров и видимости дос-окна
· blat — отправка почты из консоли
 
Готовые решения и частые вопросы:
· Создание листинга директорий на примере создания плейлиста
· Разименовывание переменных
· Переименовывание файлов по дате создания
· Запуск сетевого подключения
· Запуск bat файлов как сервис
· Пример выполнения команд по результату команды ping
· Использование даты на день раньше чем сегодня
 
Невозможности — что нельзя сделать с помощью командных файлов:
· изменть конфигурацию IP на удаленной машине (без помощи rcmd.exe) [добавил ALEF]
 
 
Дополняем шапку: добавляем готовые решения, полезные ссылки.
 
Примечание: Большие куски кода заключайте в тэг [more]  
 
Важно: копируя батник через буфер обмена из форума не забывайте удалять пробелы в конце каждой строки, т.к. в некоторых случаях из-за этого программа будет работать неправильно!!!
 
Старая версия первого сообщения

Всего записей: 116 | Зарегистр. 18-11-2005 | Отправлено: 22:58 18-11-2005 | Исправлено: Elroir, 05:50 11-11-2006
3pak

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Извените, сильно не ругайтесь, недавно только узнал что такое .bat файлы и для чего они нужны, я только учусь.
Как нибудь на досуге перечитаю весь топик, а пока интерисует только один вопрос.
Прочитал в журнале Upgrade Special #4 2006 стр.124 синтаксис удаления вложеных папок и файлов (для примера выбрал Temp):
 
Erase /S /Q
C:\Documents and Settings\Имя пользователя (свое подставлял)\Local Settings\Temp
 
Неполучается удалить не вложенные папки ни файлы, ось WinXP, в чем ошибка??

Всего записей: 368 | Зарегистр. 23-07-2005 | Отправлено: 12:03 06-04-2006
KapralBel



Platinum Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
3pak
Для удаления всех файлов

Код:
 
erase %Temp%\*.* /s /q
 

 
Для удаления всех файлов и папок

Код:
 
rd %Temp%\ /s /q
 

Всего записей: 11354 | Зарегистр. 16-02-2005 | Отправлено: 12:26 06-04-2006
olegupb



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

Цитата:
move E:\~i??????.??? E:\11\~i??????.4??

Или она совсем неправильная?

----------
~

Всего записей: 734 | Зарегистр. 09-02-2005 | Отправлено: 17:00 06-04-2006
Saftor



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
KapralBel
Спасибо всё получилось, а ещё вопрос а возможно сделать маску на некоторые папки и файлы внутри этой папки которые не будут удаляться?

Всего записей: 329 | Зарегистр. 07-12-2005 | Отправлено: 17:25 06-04-2006
KapralBel



Platinum Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Saftor
Команда Erase/Del без ключа /f удаляет все файлы, за исключением тех, на которые установлен аттрибут ReadOnly
т.е. сначала ставишь аттрибут attrib /? - затем удаляешь, затем снимаешь аттрибут

Всего записей: 11354 | Зарегистр. 16-02-2005 | Отправлено: 17:35 06-04-2006
Serge2005

Full Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Меня игнорируют?
http://forum.ru-board.com/topic.cgi?forum=62&topic=6156&start=620#18
Пожалуйста, помогите...хоть скажите, гда почитать об этом....

Всего записей: 554 | Зарегистр. 11-02-2006 | Отправлено: 22:51 06-04-2006
3pak

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
KapralBel, справку по командной строке я уже читал и код такого вида подстовлял: rd [полный путь до папки] /s /q и впереди еще пробовал - rmdir, итог один - ни чего не происходит. Из написаного Вами непойму что за путь такой - %Temp%. Это чтоли удалить все имеющиеся на HDD папки Temp?
Это папка Temp, у меня была как пример. А если к примеру мне надо удалить кэш Windows прожигалки, которая находится по адресу C:\Documents and Settings\Имя пользователя\LocalSettings\Арplication Data\Microsoft\CD Burning, то тут как быть с написанием пути. Что-бы мне каждый раз не бегать у Вас не спрашивать путь до необходимой мне папки, обьясните мне чайнику этот момент с написанием пути.
И что-бы сама папка не удалялась, а только её вложения.

Всего записей: 368 | Зарегистр. 23-07-2005 | Отправлено: 23:23 06-04-2006
abz



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

Цитата:
Из написаного Вами непойму что за путь такой - %Temp%

А посмотреть самому не судьба?  
Пуск - Выполнить - cmd
echo %temp%
 
Добавлено:

Цитата:
А если к примеру мне надо удалить кэш Windows прожигалки, которая находится по адресу C:\Documents and Settings\Имя пользователя\LocalSettings\Арplication Data\Microsoft\CD Burning, то тут как быть с написанием пути.

Так: %APPDATA%\Microsoft\CD Burning

Цитата:
Что-бы мне каждый раз не бегать у Вас не спрашивать путь до необходимой мне папки, обьясните мне чайнику этот момент с написанием пути.

Код:
Пуск - Выполнить - cmd  
set

Это покажет тебе значения всех переменных.
 
 

Всего записей: 14974 | Зарегистр. 04-11-2002 | Отправлено: 02:38 07-04-2006
jak_forest

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

Всего записей: 55 | Зарегистр. 07-12-2005 | Отправлено: 09:07 07-04-2006
Serge2005

Full Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
jak_forest
Это сложно... Как бы есть ini (по структуре) файл, в котором используются параметры: menuN, cmdN, где N - порядковый номер. Нужно найти эту строку по ее значению и потом как-то получить N.

Код:
 
file.ini:
[section]
menu1=menuabcdefg
cmd1=program_first
menu2=menuabcde
cmd2=program_second
....
 

Мне нужно найти "program_second" из этого получить, что это cmd2, а оттуда, что N=2. Потом заменить значение menu2 на новое, например menu_new.
Вот.....уж не знаю, как по-другому...

Всего записей: 554 | Зарегистр. 11-02-2006 | Отправлено: 09:20 07-04-2006
jak_forest

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
найти строку по чем-либо findstr /i "что-либо" <filename>.
выделить из строки N
Код:
set k=%computername%
set k=%k:~3%;устанавливаем переменную =  с 4-го и до конца все символы

пробуй примерно так

Код:
 
del /q /s file1.txt > nul 2>&1
for /f %%i in (file.txt) do call :L1 %%i
goto :eof
 
:L1
set L=%1
echo %L%>> file1.txt
for /f "delims== tokens=1,*" %%j in (%L%) do (
  if "%%k"="program_second" call :L2 %%j
)
goto :eof
 
:L2  
set M=%1
set M=%M:3%
echo cmd_new%M%=command>> file1.txt
goto :eof
 

переберет тебе построчно file.txt выкинет его в file1.txt и после каждого встреченного program_second вставит новую строку. Не тестировал

Всего записей: 55 | Зарегистр. 07-12-2005 | Отправлено: 10:44 07-04-2006 | Исправлено: jak_forest, 10:46 07-04-2006
Serge2005

Full Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
jak_forest
А где почитать на просто, доступном для новичка языке, объяснения к вышепредложенному, например, что значит  for /f %%i
:L1
%1? %%j? %%k
%M:3%

Всего записей: 554 | Зарегистр. 11-02-2006 | Отправлено: 10:51 07-04-2006
KapralBel



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

Цитата:
Из написаного Вами непойму что за путь такой - %Temp%

Переменная среды (ссылка), которая укахывает путь к папке Темп, т.е. в как на разных компах эта папка может находиться в разных местах. Так, что лучше использовать именно переменные среды а не полный путь. Как получить список тебе объяснил abz
 
Кстати если в пути встречаются не буквенноцифровые символы (например пробел), то желательно путь охватываь кавычками
 

Цитата:
И что-бы сама папка не удалялась, а только её вложения.


Код:
 
PushD %Temp%
RD . /q/s
PopD
 

т.е войти в папку и удалять её содержимое

Всего записей: 11354 | Зарегистр. 16-02-2005 | Отправлено: 11:00 07-04-2006
Serge2005

Full Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
1) Порядковые номара могут не совпадать со строками. То есть там могут быть еще и другие строки, которые мне не нужны.
2) Можно, пожалуйста, с комментариями, а то я совсем не могу разобраться.
Это нужно для смены кучи параметров одним нажатием, то есть в скрипт планируется прописать кучу таких вот кусочков, которые будут заменять (по описанному алгоритму) каждый свою часть, а если искомой строки нет, то будут пропускаться

Всего записей: 554 | Зарегистр. 11-02-2006 | Отправлено: 11:02 07-04-2006
jak_forest

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Serge2005
по поводу for - for /?
по поводу %M:3% - set /?
коментарии к батнику смотри сюда:
Подробнее...
надеюсь тебе это поможет
при копировании скрипта не забывай удалять в конце строк лишние пробелы если они есть.

Всего записей: 55 | Зарегистр. 07-12-2005 | Отправлено: 11:58 07-04-2006
abz



Хулиган
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
KapralBel
 
А чем отличается:

Код:
PushD %Temp%
 
от  

Код:
cd %temp%
 
 
Подсказку к командам PushD и PopD прочитал, но так и не понял для чего они, если эту задачу из покон веков выполняет cd?

Всего записей: 14974 | Зарегистр. 04-11-2002 | Отправлено: 14:18 07-04-2006
KapralBel



Platinum Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
abz
Попытайся проделать эти 2 команды с другого диска
 
PushD %Temp% -  меняет папку и диск
CD %Temp% -  меняет только папку на указанном диске, надо будет сделать еще c:, а если темп не на С?
 
Кроме того есть команда PopD  парная к PushD %Temp%, которая возвращает в ту папку из которой  была сделана команда PushD

Всего записей: 11354 | Зарегистр. 16-02-2005 | Отправлено: 14:27 07-04-2006
Serge2005

Full Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
jak_forest
Спасибо очень очень огромное!!!!! Сейчас постараюсь понять и сделать уже код под себя!! Спасибо!!!!
 

Код:
 
for /f %%i in (file.txt) do call :L1 %%i
goto :eof
 
:L1
set L="%~1"
echo %L%>> file1.txt
for /f "delims== tokens=1,*" %%j in (%L%) do (
  if "%%k"="cd \\\Registry" call :L2 %%j
)
goto :eof
   
:L2
set M=%1
set M=%M:3%
echo cmd_new%M%=command>> file1.txt
goto :eof
 

Он в file1.txt выдает закавыченную 1ую строку и все....Похоже он не переберает все строки файла? Я что-то не правильно понял?

Код:
 
:L0
for %%i in (file.txt) do call :L1 %%i
goto :eof
 
:L1
echo %1>> file1.txt
set L="%~1"
echo %L%>> file1.txt
for /F "delims== tokens=1,*" %%j in ("%L%") do (
  if "%%k"=="cd \\\Registry" (  
    call :L2 %%j
  ) else (
    goto :eof
  )
)
goto :eof
   
:L2
set M=%1
set M=%M:3%
echo cmd_new%M%=command>> file1.txt
goto :eof
 

А теперь я не могу получить строку из вайла целиком....Только начало
 
Добавлено:
Получилось на 70%

Код:
 
:L0
for /F "delims== tokens=1,*" %%i in (file.txt) do call :L1 %%i  
 
"%%j"
goto :eof
 
:L1
set L=%1
set M=%~2
if "%M%"=="cd \\\Registry" call :L2 %L%
goto :eof
 
:L2
set N=%1
echo %N%>> file1.txt
set N=%N%:3%
echo cmd_new%N%=command>> file1.txt
goto :eof
 

1) Как сделать поддержку русского языка?
2) Можно еще раз про все символы строки (переменной), начиная с 4ого, пожалуйста, а то не получается.

Всего записей: 554 | Зарегистр. 11-02-2006 | Отправлено: 17:11 07-04-2006 | Исправлено: Serge2005, 18:29 07-04-2006
Romero_Ekb



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

Цитата:
Да туда вообще лазить не нужно. Все действия проводятся с веткой HKCU

 
Вот и подскажи тогда, пожалуйста, как дать права на раздел в HKCU пользователю при помощи командного файла.
Давать юзеру временно права админа - не канает, так как придется завершать сеанс для вступления в силу изменений.

Всего записей: 98 | Зарегистр. 02-02-2004 | Отправлено: 07:50 08-04-2006
vu1tur



Moderator-Saaber
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Romero_Ekb
How to: Use a Script to Change Registry Permissions from the Command Line

----------
I am free of all prejudice. I hate everyone equally.

Всего записей: 3690 | Зарегистр. 01-02-2003 | Отправлено: 09:42 08-04-2006
   

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

Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Задачи на bat-файлах
vu1tur (14-11-2006 16:59): http://forum.ru-board.com/topic.cgi?forum=62&topic=9040


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

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

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru