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

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



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
KapralBel
В том то и дело что все пробелы удалил, я всю эту ветку прочитал и слышал про проблемы с пробелами.
Кстати существует какая то команда в cmd, которая расширяет возможности командного процессора, но я пока ещё не пробовал.Может ты знаешь?
 
Это утилитка для Total Commander вот описание из её хелпа:
 

Код:
Обычно при запуске консольного или DOS-приложения в Total Commander появляется консольное окошко, в котором выполняется запущенная программа, а после завершения работы это окошко закрывается. Это очень неудобно, если требуется просмотреть текст, выданный программой. Поэтому Total Commander позволяет запускать консольные приложения без закрытия окна консоли. Для этого надо запускать программу нажатием сочетания Shift+Enter, вместо обычного Enter.  

 
Kirillhome
Да, существует, я испробовал все варианты.
 
 
 

Всего записей: 101 | Зарегистр. 27-06-2006 | Отправлено: 13:17 05-09-2006
KapralBel



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

Код:
@Echo On
Echo %* >>C:\Log.txt
CD >>C:\Log.txt
PushD %*
CD >>C:\Log.txt
md Exec
Move *.exe Exec\
PopD

Выполни этот батничек
и скинь сюда содержимое файла C:\Log.txt и все чтоданный батник выводит на экран

Всего записей: 11354 | Зарегистр. 16-02-2005 | Отправлено: 13:41 05-09-2006
Mayskii



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Вот что пишет log.txt:
 
Режим вывода команд на экран (ECHO) включен.
C:\Primers
C:\Primers
 
Вот что пишет консоль:
 
C:\Primers>Echo   1>>C:\Log.txt
 
C:\Primers>CD  1>>C:\Log.txt
 
C:\Primers>PushD
 
C:\Primers>CD  1>>C:\Log.txt
 
C:\Primers>md Exec
 
C:\Primers>Move *.exe Exec\
C:\Primers\Biopack00_9b.EXE
C:\Primers\share_nt.exe
C:\Primers\totalcmd.exe
 
C:\Primers>PopD
---------
При этом batник создаёт в текущей директории (C:\primers\) паку Exec и кидает туда файлы.
А ещё я немного ступил тогда, дело в том что он кидал в папку D:\Trash\ Exec а сами *.exe туда не перемещал.  
и этот батник ведёт себя также, создаёт пустую папку.
А log.txt пишет почемуто без (Режим вывода команд на экран (ECHO) включен.)?:
D:\Trash\  
C:\Primers
C:\Primers
 

Всего записей: 101 | Зарегистр. 27-06-2006 | Отправлено: 13:58 05-09-2006 | Исправлено: Mayskii, 14:18 05-09-2006
KapralBel



Platinum Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Mayskii
Как ты вызываешь
У меня создалось впечатление, что вызов идет просто имя батничка
т.е.
Parse.cmd
а не Parse.cmd C:\Trash\
Вызови сначала CMD.Exe а в нем выполни команду Parse.cmd C:\Trash\

Всего записей: 11354 | Зарегистр. 16-02-2005 | Отправлено: 14:16 05-09-2006
Mayskii



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Microsoft Windows XP [Версия 5.1.2600]
(С) Корпорация Майкрософт, 1985-2001.
 
C:\Documents and Settings\Mayskii>C:\Primers\parse.cmd D:\Trash\
Файл с таким именем уже существует
или не найден.
 
C:\Documents and Settings\Mayskii>
 
Вообщем у меня такое впечатление нужно Винду переустанавливать.

Всего записей: 101 | Зарегистр. 27-06-2006 | Отправлено: 14:24 05-09-2006 | Исправлено: Mayskii, 14:27 05-09-2006
KapralBel



Platinum Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Mayskii
И что?
Опять не работает?
Приведи снова логи и вывод на экран после запуска из CMD.Exe
Часом у тебя вирь не водится - что-то похожее наблюдал (КАВ удушул на данном компе полее 3000 пакостей)

Всего записей: 11354 | Зарегистр. 16-02-2005 | Отправлено: 14:32 05-09-2006
ViSiToR



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Mayskii
Если тебе нужно при запуске батника, чтобы он спрашивал куда поместить всё это добро, то проще этого варианта я не знаю:
 

Код:
rem позволяем юзеру ввести путь, который будет помещён в файл ask.txt
copy /y con ask.txt > nul
 
rem берём (из файла) то что ввёл юзер на экране, и помещаем это в переменную ask
for /f "delims=" %%a in (ask.txt) do set ask=%%a

 
После ввода пути, нужно нажать сначала F6 а затем ENTER (не обращая внимания на появление странных символов ^Z).
 
Теперь, переменная %ask% будет иметь значение, ровнящиеся тем символам, которые были введены с клавиатуры - т.е пути который ввёл юзер на экран с клавиатуры.
 
И теперь, можно перемещать по этому пуити нужные файлы:
 

Код:
copy /y con ask.txt > nul
for /f "delims=" %%a in (ask.txt) do set ask=%%a
del /q /s ask.txt
md "%ask%\Exec"
md "%ask%\Archives"
md "%ask%\Music"
md "%ask%\Web_pages"
md "%ask%\Images"
md "%ask%\Doc's"
md "%ask%\Project's"
move *.exe "%ask%\Exec\"
move *.rar "%ask%\archives\"
move *.zip "%ask%\archives\"
move *.arj "%ask%\archives\"
move *.mp3 "%ask%\music\"
move *.wav "%ask%\music\"
move *.htm* "%ask%\web_pages\"
move *.mht "%ask%\web_pages\"
move *.bmp "%ask%\images\"
move *.gif "%ask%\images\"
move *.jpg* "%ask%\images\"
move *.jpeg "%ask%\images\"
move *.psd "%ask%\images\"
move *.txt "%ask%\doc's\"
move *.doc "%ask%\doc's\"
move *.nsi "%ask%\project's\"
move *.pdf "%ask%\Doc's\"

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

Код:
copy /y con ask.txt > nul
for /f "delims=" %%a in (ask.txt) do set ask=%%a
del /q /s ask.txt
 
for %%b in (Exec Archives Music Web_Pages Images Doc's Project's) do md "%ask"\%%b
 
for %%c in (*.rar *.zip *.arj) do move %%c "%ask%\Archives\"
for %%d in (*.mp3 *.wav) do move %%d "%ask%\Music\"
for %%e in (*.htm* *.mht) do move %%e "%ask%\Web_pages\"
for %%f in (*.bmp *.gif *.jpg *.jpeg *.psd) do move %%f "%ask%\Images\"
for %%g in (*.txt *.doc *.pdf) do move %%g "%ask%\Doc's\"
move *.nsi "%ask%\project's\"


----------
ViSiToR a.k.a CreatoR
CreatoR это не ник, CreatoR это стиль жизни!

Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 15:41 05-09-2006 | Исправлено: ViSiToR, 20:09 05-09-2006
Mayskii



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
KapralBel
Да ладно, чё то у меня наверное с виндой, переустанавливать надо.
Огромное спасибо за помощь.
ViSiToR
Классно, спасибо, немного разобрался.

Всего записей: 101 | Зарегистр. 27-06-2006 | Отправлено: 20:03 05-09-2006 | Исправлено: Mayskii, 20:07 05-09-2006
AleIxI

Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Есть 10 одинаковых компов в рабочей группе. На всех есть один и тот же юзер с одним и тем хже паролем и админскими правами.
У всех винт побит на 3 раздела.
Нужен сценарий, запускаемый с одной из машин, который присваивает букву 3ему разделу, и другой сценарий, который ее удаляет.(монтирование отмонтирование)

Всего записей: 41 | Зарегистр. 30-08-2006 | Отправлено: 20:18 05-09-2006
Smitis



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

Цитата:
Цитата:видимо cmd понимает пробел как конец предыдущей и начало следующей команды?  
 
Именно так.

Никогда такого не было. Разделитель команд - символ &
 
PerpleXOR
 

Цитата:
пытаюсь применить на нескольких компах reg - файл, используя psexec. Пишу  
 
psexec -d \\532-15 -s cmd " /c regedit c:\1.reg"  
 
и -нифига не применяется!  
Может не так пишу ?

А если так:

Код:
 
psexec -d \\532-15 -s regedit /s c:\1.reg
 

P.S. И не надо задовать один и тот же вопрос в разных темах!

Всего записей: 3214 | Зарегистр. 09-02-2003 | Отправлено: 20:34 05-09-2006 | Исправлено: Smitis, 20:45 05-09-2006
PerpleXOR



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

Цитата:
А если так:

обязательно попробую (завтра), спасибо

Цитата:
P.S. И не надо задовать один и тот же вопрос в разных темах!

горю, приходится ускорять решение вопроса!

Всего записей: 741 | Зарегистр. 17-07-2005 | Отправлено: 21:26 05-09-2006
ViSiToR



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

Цитата:
Никогда такого не было. Разделитель команд - символ &

Просто небыло времени вникнуть в утверждение   . А вообще, имелось ввиду, что пробел рарзделитель не между командами, а между командой и параметром...
 
Посмотрим на такой батник:
 

Код:
echo echo ok > test.txt
 
for /f "delims=" %%a in (test.txt) do %%a
pause
 

 
Мы получим вывод на экран - echo ok - И если бы в данном случае, в момент помещения текста в файл, мы заключили бы его в кавычки:
 

Код:
echo "echo ok" > test.txt
 
for /f "delims=" %%a in (test.txt) do %%a
pause
 

 
То получили бы ошибку о неверной команде...
Вывод: В данном случае, пробел играет роль разделителя между командой, и между её параметром... в других случаях, пробел не играет никакую роль. Так что нужно брать каждый случай отдельно и расматривать. А в том случае, именно так и было, что пробел играл роль разделителя (между командой и параметром).

----------
ViSiToR a.k.a CreatoR
CreatoR это не ник, CreatoR это стиль жизни!

Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 23:20 05-09-2006
Mayskii



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Вот, написал батник который ищет файлы с указаными  
расширениями и кидает их в заданые папки, причём если для этих папок  
не нашлось файлов или они пустые батник удаляет эти папки.
 
Конечно, всё это очень просто и это можно написать гораздо красивее,  
но тем кто плохо знаком с командами пакетных файлов рекомендую поизучать.
 
Использовать осторожнее!  
 
 
Код:
@ECHO OFF
echo ::::MOVE_CAT LITE VERSION::::
echo Вы уверены что хотите переместить файлы?
pause
md Exec
md Archives
md Music
md Web_pages
md Images
md Doc's
md Project's
move *.exe Exec\
move *.rar archives\
move *.zip archives\
move *.arj archives\
move *.mp3 music\
move *.wav music\
move *.htm* web_pages\
move *.mht web_pages\
move *.bmp images\
move *.gif images\
move *.jp* images\
move *.psd images\
move *.txt doc's\
move *.doc doc's\
move *.rtf doc's\
move *.nsi project's\
move *.pdf Doc's\
IF EXIST c:EXEC\nul GOTO 1
IF NOT EXIST c:EXEC\nul GOTO DEL1
:DEL1
RD EXEC
:1
IF EXIST c:ARCHIVES\nul GOTO 2
IF NOT EXIST c:ARCHIVES\nul GOTO DEL2
:DEL2
RD ARCHIVES
:2
IF EXIST c:Music\nul GOTO 3
IF NOT EXIST C:Music\nul GOTO DEL3
:DEL3
RD Music
:3
IF EXIST c:WEB_PAGES\nul GOTO 4
IF NOT EXIST c:WEB_PAGES\nul GOTO DEL4
:DEL4
RD WEB_PAGES
:4
IF EXIST c:IMAGES\nul GOTO 5
IF NOT EXIST c:IMAGES\nul GOTO DEL5
:DEL5
RD IMAGES
:5
IF EXIST c:DOC's\nul GOTO 6
IF NOT EXIST c:DOC's\nul GOTO DEL6
:DEL6
RD DOC's
:6
IF EXIST c:Project's\nul GOTO END
IF NOT EXIST c:Project's\nul GOTO DEL7
:DEL7
RD Project's
del Подставьте_название_вашего_батника.bat
:END

Всего записей: 101 | Зарегистр. 27-06-2006 | Отправлено: 20:45 06-09-2006 | Исправлено: Mayskii, 20:50 06-09-2006
Shish_kebab



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Всем доброго времени суток.
Я наверное задам преметивный вопро, но всё же
Нужно из кучи файлов скопировать файл созданный сегодня.
Файл находиться в дериктории c:\Program Fails\......
Ещё как вариант файл созданный сегодня вчера и позавчера ?
 
Заранее спасибо.

Всего записей: 372 | Зарегистр. 14-07-2005 | Отправлено: 01:36 07-09-2006
Kirillhome



Full Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Shish_kebab
Вот здесь посмотри на пример УДАЛЕНИЯ старых файлов.
На основе этого очень просто делается то, что тебе нужно заменой этой части

Код:
 
set /A fl_udal=0
if !F_YEAR! LSS !T_YEAR! (set /A fl_udal=1) else (
IF !F_YEAR!==!T_YEAR! (
   IF !F_MONTH! LSS !T_MONTH! (set /A fl_udal=1) else (
      IF !F_MONTH!==!T_MONTH! (IF !F_DAY! LEQ !T_DAY! (set /A fl_udal=1)))))
 
 
if !fl_udal!==1 (del /q %1)
 

на эту

Код:
 
set /A fl_udal=0
IF !F_YEAR!==!T_YEAR! (
    IF !F_MONTH!==!T_MONTH! (
        IF !F_DAY!==!T_DAY! (set /A fl_udal=1)))
 
 
if !fl_udal!==1 (
rem Здесь - то, что мы хотим
rem сделать)
 


Всего записей: 426 | Зарегистр. 23-11-2004 | Отправлено: 02:38 07-09-2006
GRiMka



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

Всего записей: 27 | Зарегистр. 16-06-2005 | Отправлено: 11:28 07-09-2006
KapralBel



Platinum Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
GRiMka
net time /?

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



Full Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
xitsa
 
А что этот ssed русские буквы не понимает?
Я все пытался заменить в строках выражение О.А. на КАЦО, не хотит ни в какую.
цифры и латинские буквы без проблем.
 
 
Вообще задача такая, есть 10 текстовых файлов, где в каждой строке есть О.А.(DOS кодировка), мне нужно заменить это сочетание на другое. В каждом файле конечное сочетание разное. Вот как и чем в 10 текстах во всех строках заменить одно выражение на другое в зависимтости от имени файлов. ssed я как понимаю сделал бы это, но вот с русскими буквами облом.
 
Методом тыка выяснилось, что ssed не понимает DOS кодировку, вернее не ищет её, а вставляет и в DOS кодировке. В WIN кодировке русские буквы меняет, но вот О.А. не берет, - точки мешают.  
 
Может можно задать позицию? Т.е. в строке с 11-14 символ заменить на .... Кто знает подскажите.

Всего записей: 589 | Зарегистр. 21-08-2001 | Отправлено: 12:53 07-09-2006 | Исправлено: surgutfred, 15:42 08-09-2006
GRiMka



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
KapralBel
 
Точно! Спасибо!

Всего записей: 27 | Зарегистр. 16-06-2005 | Отправлено: 15:27 07-09-2006
Shish_kebab



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

Всего записей: 372 | Зарегистр. 14-07-2005 | Отправлено: 19:40 07-09-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