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

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

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

Цитата:
Заменить в текстовом файле все символы "!" на "^!" - похоже нереально решить


Код:

@ECHO OFF
SET MY_STRING=Yesss...!
SET MY_STRING=%MY_STRING:!=^^^^^!%
ECHO %MY_STRING%
PAUSE

Всего записей: 1705 | Зарегистр. 08-12-2004 | Отправлено: 13:02 17-04-2006
KapralBel



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

Код:
 
@Echo Off
Set count=0
 
Rem имя файла в котором меняются строки
Set name=DeleteFlag.cmd
 
Rem Строка, которая меняется
Set strSearch="!"
 
Rem Строка, на которую меняется
Set strReplace="^!"
 
Rem Путь, где ищутся файлы
Set pPath="C:\Program Files\DU\!\"
 
 
For /R %pPath%  %%a In (*.*) Do Call :_Find %%~nxa "%%a"
Echo  Общее кол-во отредактированых файлов: %count%
GoTo :EOF
 
:_Find
If /i %name% NEQ %1 GoTo :EOF
gsar -s%strSearch% -r%strReplace% %2 -o >Nul
Echo Successfuly Edited: %2  
Set /a count=%count%+1
GoTo :EOF  
 

1. Ты зря насчет 3rd party tools.
2. Эти 2 пункта трудносовместимы

Цитата:
мне желательно без 3rd party tools.
Надо чтобы был простой батник.  

 
Serge2005
Тебе уже ответил slech
 
Allex_Van_Fogen
См. вышеприведенный батничек
 
cluster
Какая ОС?
Если ХП , то что выдает у тебя  
Echo %Date% >Log - от этого зависит что надо записать
 
Добавлено:
slech

Цитата:
Есть много папок.  
Как каждую упаковать в архив при помощи winrar'a ?  
И что бы имя архива = имя папки


Код:
 
@Echo Off
For /D %%a In (*) Do RAR a %%a -r %%a\*.*
 

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

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

Цитата:
Если ХП , то что выдает у тебя  
Echo %Date% >Log - от этого зависит что надо записать

Выдаёт в файле Log 17.04.2006 В принципе, устраивает и такой формат, но если можно, то год 06.
А как убивать пустые каталоги?

Всего записей: 1720 | Зарегистр. 21-11-2003 | Отправлено: 15:10 17-04-2006
KapralBel



Platinum Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
cluster
Тебе исключительно средствами батника?

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

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
KapralBel
Думаю, если прибавится в каталоге мелкая тулза, особо комплексовать не стану

Всего записей: 1720 | Зарегистр. 21-11-2003 | Отправлено: 15:18 17-04-2006
KapralBel



Platinum Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
cluster
DirUse <Folder> /q:0 из SupportTool
Возвращает по ErrorLevel - 1 если размер папки больше 0 и 0 если равен 0

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

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

Всего записей: 1720 | Зарегистр. 21-11-2003 | Отправлено: 15:43 17-04-2006
slech



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

Всего записей: 4893 | Зарегистр. 10-11-2004 | Отправлено: 15:46 17-04-2006
110465

Newbie
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
shibog
 
 
>а кто объяснит, как заставить правильно работать в cmd.exe строку  
>if exist *.* echo Files exist  
>сообщение выводится независимо от наличия файлов в каталоге.  
>Проявляется в ОС win2000, XP, win2003server  
 
Сам озаботился этой проблемой и вот какой вариант ещё нашел:
 
dir/a-D/b h:\otchet\01_QWEEK\ |findstr ".">nul || goto nul
 
rem если есть файлы, выполняем эту строку
 
:nul
 
 

Всего записей: 1 | Зарегистр. 17-04-2006 | Отправлено: 17:00 17-04-2006 | Исправлено: 110465, 17:01 17-04-2006
Serge2005

Full Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
slech
Спасибо....
KapralBel
Ну да...но этого было малова-то
Вот что сделал:

Код:
 
set tagfile=\WIN51IP.SP1
FOR %%a IN (c d e f g h i j k l m n o p q r s t u v w x y z) DO (
  DIR %%a:\
  if not ErrorLevel 1 if exist "%%a:%tagfile%" set disk=%%a:
  )
cd /d %disk%\Distr
 

Может кому-то понадобится...Всем спасибо за помощь %)

Всего записей: 555 | Зарегистр. 11-02-2006 | Отправлено: 17:27 17-04-2006
Pushkir

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Вот тут много говорили о всяких батах, амне всего-то надо написать такой бат, чтобы программа, в нём прописанная, запускалась через какое-то время после запуска самого бата, т.е. с задержкой. Пример можете написать plz.

Всего записей: 38 | Зарегистр. 22-09-2005 | Отправлено: 18:26 17-04-2006
cluster

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

Цитата:
DirUse <Folder> /q:0 из SupportTool  
Возвращает по ErrorLevel - 1 если размер папки больше 0 и 0 если равен 0

А мне нужно убить ВСЕ пустые каталоги в папке. Как в таком случае команда будет выглядеть?

Код:
DirUse <Folder> /q:0
IF ERRORLEVEL 0 rd <Folder>

Всего записей: 1720 | Зарегистр. 21-11-2003 | Отправлено: 22:29 17-04-2006
3xp0



Moderator
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
KapralBel
Да я то сам не против. Просто запрещено.
Тот пример сверху, он будет работать? Я его чуточку переделаю и пошлю тебе в ПМ, если то, что сверху рабочее, ок?

Всего записей: 6398 | Зарегистр. 22-09-2002 | Отправлено: 01:42 18-04-2006
Allex_Van_Fogen



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
KapralBel
 
Так заменять я и в Word-е смогу ;) Сделать такое без 3rd party tools нереально - уточняю свое предыдущее заявление..
 
Добавлено:

Цитата:
@ECHO OFF  
SET MY_STRING=Yesss...!  
SET MY_STRING=%MY_STRING:!=^^^^^!%  
ECHO %MY_STRING%  
PAUSE  

 
Супер! А теперь попробуйте засунуть это вовнутрь цикла в котором, кроме всего прочего надо ещё чего нибудь присваивать.
 
Вот последний, очень извратный вариант скрипта для этого. Работает, НО! только с мелкими (5-10 строк) файлами.
 

Код:
 
@echo off
setlocal
rem Создаем файл для примера, и пытаемся заменить в нем все знаки "!" на "^!"
if exist problem.txt goto :SkipCreate
echo Hello, World!>problem.txt
echo Ahtung!!! Eine, Zwai. Drai...>>problem.txt
echo "It's very interesting!">>problem.txt
echo My password="Ready for battle!">>problem.txt
echo [HKEY_CURRENT_USER\Software\RIT\The Bat!]>>problem.txt
echo "LNK_ST"="E:\\USERS\\Ivanov\\SendTo\\The Bat!.LNK">>problem.txt
:SkipCreate
for /f "tokens=* delims=" %%a in (problem.txt) do (
set tempstr=%%a
setlocal ENABLEDELAYEDEXPANSION
call :SetEsc !tempstr!
setlocal DISABLEDELAYEDEXPANSION
)
endlocal
goto :EOF
 
:SetEsc
setlocal DISABLEDELAYEDEXPANSION
set mark=
set tmpstr=%*
set mark=%tmpstr:*!=%
if not defined mark set mark=0
set mark=%mark:~0,1%
set mark=%mark:"=*%
if %mark%.==*. (set mark=1) else set mark=
if defined mark (
set tmpstr=%*
set result=%tmpstr:!=^!%
) else (
set tmpstr="%*"
set result=%tmpstr:!=^^^^!%
)
echo %result%>>noproblem.txt
setlocal ENABLEDELAYEDEXPANSION
goto :EOF
 

 
PS.
set mark=%mark:"=*%
if %mark%.==*. (set mark=1) else set mark=
 
В этих строках вместо "*" лучше  использовать любой не текстовый символ. Я например юзал символ с кодом ASCII 0xDB. Звездочки потому что этот самый код здесь незапостить.

Всего записей: 92 | Зарегистр. 09-03-2003 | Отправлено: 09:58 18-04-2006 | Исправлено: Allex_Van_Fogen, 10:25 18-04-2006
igor_andreev

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Allex_Van_Fogen
Для начала без изврата попробуй
Ты разрешаешь ENABLEDELAYEDEXPANSION и вызываешь метку батника :SetEsc, передаешь ей строку в качестве параметра

Цитата:
setlocal ENABLEDELAYEDEXPANSION  
call :SetEsc !tempstr!  
 

а в метке :SetEsc первой же строкой делаешь DISABLEDELAYEDEXPANSION  

Цитата:
:SetEsc  
setlocal DISABLEDELAYEDEXPANSION

Смысл?

Всего записей: 1705 | Зарегистр. 08-12-2004 | Отправлено: 12:18 18-04-2006
Smitis



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

Код:
 
@echo off
set _tmp1_=_list_1.tmp
set _tmp2_=_list_2.tmp
dir /b/s /ad /on > %_tmp1_%
sort /r < %_tmp1_% > %_tmp2_%
for /f "delims=/" %%d in (%_tmp2_%) do rmdir "%%d" 2> nul
del /q %_tmp1_%
del /q %_tmp2_%
 

П.С.
В принципе, можно сократить, например обрабатывать вывод команды sort прямо в for.

Всего записей: 3445 | Зарегистр. 09-02-2003 | Отправлено: 15:39 18-04-2006 | Исправлено: Smitis, 15:48 18-04-2006
cluster

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Smitis
Ну, спасиба. Дома попробую.
 
Можно сделать такой скриптик:
Вводим имена пользователей (например, 3 человека), а затем для каждого из них выполняется одинаковый набор команд (например, создание папки с именем пользователя)?




личная переписка (п. 2.8.2. главы VIII Соглашения по использованию). Для спасибов — ПМ.

Всего записей: 1720 | Зарегистр. 21-11-2003 | Отправлено: 17:07 18-04-2006 | Исправлено: cluster, 15:44 19-04-2006
B rom

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Доброго дня, возникли проблемы с кодами возврата ping под 98SE, собственно говоря погоже, что ОС вообще их не возвращает.Организовать баш файл, который мапит сетевые диски, но при этом вначале с помощью пинга проверяет доступность хоста, под ХП все четко, переложил на 98, отлуп. Проверил  скриптом errolevel пинга, вообще нет ответа. Помогите с решением, действительно ли проблемы с errolevel, или под 98 нужно пофиксить код?  
ping /n 1 ля.ля.ля.ля >nul
   if not errorlevel 1 goto map хост
 echo Host Unreachable
   goto далее  
:map хост
 net use t: \\хост\d >nul
Или альтнрнативный вариант с проверкой доступности хоста?

Всего записей: 2 | Зарегистр. 21-04-2006 | Отправлено: 09:42 21-04-2006
andrbir

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Доброго времени суток, уважаемые!
 
Не посоветуете, как штатными средствами узнать, в онлайне ли компьютер или нет (находится в одной локальной сети) зная ip?
 
И если невозможно штатными средствами (ну, например результатом возврата ping-ом значений), как бы попроще узнать это?

Всего записей: 2 | Зарегистр. 10-04-2006 | Отправлено: 11:14 21-04-2006
KapralBel



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

Цитата:
от пример сверху, он будет работать? Я его чуточку переделаю и пошлю тебе в ПМ, если то, что сверху рабочее,

Скидывай
Все что я тут выкладываю я сначала проверяю
 
PS. сейчас нет времени на разработку батничков без доп.средств

Всего записей: 11354 | Зарегистр. 16-02-2005 | Отправлено: 11:17 21-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