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

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

Модерирует : gyra, Maz

Widok (03-03-2010 16:29): Лимит страниц. Продолжаем здесь.  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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

   

Widok



Moderator-Следопыт
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Командная строка, батники\сценарии (bat, cmd)
(часть 1) (часть 2)
Вопросы, задачи и их решения по работе с командной строкой, файлами, а также сопутствующие ссылки.

 
Важно: копируя батник через буфер обмена из форума не забывайте удалять пробелы в конце каждой строки, т.к. в некоторых случаях из-за этого программа будет работать неправильно!!!
 
Примечание: Большие куски кода заключайте в тэг [more]  
 
Смежные темы:
В помощь системному администратору » Автоматизация администрирования
Microsoft Windows » Задачи на bat-файлах 5
 
Полезные ссылки:
· Cmd. Описание от разработчиков
· Урок bat-аники (для начинающих)
· Курс лекций для начинающих. Полезно и просто описано
· Набор GNU утилит для win32
· Пакет утилит для организации интерфейса в bat-файлах
· Использование ansi.sys
· cmdow — изменение параметров и видимости дос-окна
· blat — отправка почты из консоли
· Справка по командам в виде Html
· Команды RunDll32
· Quick Batch File Compiler - Позволяет превратить ваш батник в независимое приложение
· Пример - получение и обработка списка пользователей
· Уильям Станек - Командная строка Microsoft Windows (вплоть до w2k3)
· Простой способ получать текущую дату всегда в одном формате (не зависит от языков и настроек)
· Переход из 32-битной версии cmd.exe в 64-битную

Всего записей: 24190 | Зарегистр. 07-04-2002 | Отправлено: 12:38 10-03-2009 | Исправлено: TechnicsKuzya, 13:54 27-12-2009
HaK1R



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

Код:
reg add /?

Всего записей: 136 | Зарегистр. 04-05-2009 | Отправлено: 12:44 16-05-2009
Vimana2



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

Всего записей: 109 | Зарегистр. 10-03-2003 | Отправлено: 12:55 16-05-2009
XXXXL



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Здравствуйте!
Тут постоянно не понятная проблема возникает... вообщем есть простой батник он всё время перезапускает сам себя:

Код:
:loo
wget -E --load-cookies=cookies.txt http://site.ru
sleep.exe 60
goto loo

 
Проблема в том, что он почему-то примерно через часа 4-5 отключается, не могу понять почему...  
 
Никто не знает в чём может быть проблема? может использовать другой способ перезапуска?

Всего записей: 286 | Зарегистр. 16-05-2007 | Отправлено: 22:39 16-05-2009 | Исправлено: XXXXL, 22:40 16-05-2009
basstard

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
хочу научиться создавать zip'ы стандартными средствами
 
все, чего пока удалось добиться, это выяснил, что для создания zip'ов
vista использует zipfldr.dll, также, если создать файл с именем
<любое_имя>.ZFSendToTarget то этим файлом можно пользоваться
так же как архиватором, перетаскивая на него объекты.
однако, из командной строки, например:  

Код:
<любое_имя>.ZFSendToTarget %1

не работает.  

Код:
echo %1 | <любое_имя>.ZFSendToTarget
 
также не работает.
запуск zipfldr.dll и shlwapi.dll из rundll32.exe с параметром ZFSendToTarget
в разных вариантах тоже не дает никакого результата
в реестре для расширения .ZFSendToTarget есть бинарное значение,
возможно ли это использовать в батнике — не знаю.
вот. возможно, у кого-нибудь появятся идеи

Всего записей: 58 | Зарегистр. 05-08-2008 | Отправлено: 07:20 17-05-2009 | Исправлено: basstard, 07:21 17-05-2009
Cosmogor



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Вот, создал, батник резервного копирования данных.
По всему форуму собирал идеи.
В батнике успользуются утилиты RAR.EXE и FORFILES.exe
 
Суть батника такова:
Проверяется наличие дисков в системе,
и на самом последнем диске создаётся папка Backup
Потом один раз в сутки создаются архивные копии
папок Рабочего стола и Мои документы, и помещаются
в папку Backup
Затем архивные файлы старше трёх дней удаляются
из папки  Backup.
 
Подробнее...
 
У меня вопрос, а попроще что я тут понаписал,  
нельзя сделать?
В принципе он неплохо работает, но я хочу
услышать мнения других.

Всего записей: 230 | Зарегистр. 22-04-2009 | Отправлено: 07:32 17-05-2009
HaK1R



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Cosmogor
Проще это как? Можно сделать чтобы объем меньше был, в частности не разбивать на функции :TMP_TMP :MD и еще :FC & _TMP состоят на 4/5 из одного и их тоже можно слить

Всего записей: 136 | Зарегистр. 04-05-2009 | Отправлено: 11:12 17-05-2009
Cosmogor



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
HaK1R
 
Вот-вот , обьём меньше чтоб был  

Всего записей: 230 | Зарегистр. 22-04-2009 | Отправлено: 11:31 17-05-2009
HaK1R



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Cosmogor
У меня вот так получилось, но я не проверял

Код:
@ECHO OFF
Chcp 1251>nul
 
REM Поиск доступных дисков
setlocal enabledelayedexpansion
for %%d in (b,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 %%d:>nul 2>&1 && set zz=%%d
 
REM Проверка на наличие папки Backup
IF EXIST "%zz%:\Backup" (
  REM Проверка на наличие файла TMP.TMP
  IF EXIST "%zz%:\Backup\TMP.TMP" (
    call :FC
  ) else (
    call _TMP
    call :RAR
  )
) else (
  REM Создание папки Backup
  MD "%zz%:\Backup"
  call _TMP
  call :RAR
)
chcp 866>nul
goto :EOF
 
   
_TMP
rem вычисление дня недели для Windows 2000 (в XP должна тоже работать)
rem начиная с 2001г. по 2099г. включительно (алгоритм тестировался в Еxcel)
rem в конце вычислений %dD% содержит день недели: 0 - понедельник .. 6 - воскресенье
rem by othy
setlocal
SET dt=%Date%
SET dY=%dt:~-2%
SET dD=%dt:~-10,2%
SET dM=%dt:~-7,2%
If "%dD:~0,1%" == "0" Set dD=%dD:~1,1%
If "%dM:~0,1%" == "0" Set dM=%dM:~1,1%
If "%dY:~0,1%" == "0" Set dY=%dY:~1,1%
SET /A fY="dY & 0x03"
If %dM%==1 (If %fY%==0 (Set /A dD+=4) else Set /A dD+=5)
If %dM%==2 (If %fY%==0 (Set /A dD+=7) else Set /A dD+=8)
If %dM%==3 (Set /A dD+=8)
If %dM%==4 (Set /A dD+=11)
If %dM%==5 (Set /A dD+=6)
If %dM%==6 (Set /A dD+=9)
If %dM%==7 (Set /A dD+=11)
If %dM%==8 (Set /A dD+=7)
If %dM%==9 (Set /A dD+=10)
If %dM%==10 (Set /A dD+=5)
If %dM%==11 (Set /A dD+=8)
If %dM%==12 (Set /A dD+=10)
SET /A dD=(dD+dY/4+dY) %% 0x07
echo %dD% >"%zz%:\Backup\TMP.TMP"
endlocal
goto :EOF
 
:FC
call _TMP
fc /l "%zz%:\Backup\D.TMP" "%zz%:\Backup\TMP.TMP"  
if errorlevel 1 (
  FORFILES /p "%zz%:\Backup" /m *.rar /d -3 /c "cmd /c del /f /q @file"
  DEL /Q "%zz%:\Backup\TMP.TMP"
  REN "%zz%:\Backup\D.TMP" "TMP.TMP"
  call :RAR
) else (
  call :EXIT
)
goto :EOF
 
:EXIT
msg * Сегодняшние архивы есть, выходим!.
DEL /Q "%zz%:\Backup\TMP.TMP"
REN "%zz%:\Backup\D.TMP" "TMP.TMP"
goto :EOF
   
:RAR
RAR.EXE a "%zz%:\Backup\Рабочий_стол" -r -m0 -ep1 o+ -ag_YYYY.MM.DD-HH.MM "%USERPROFILE%\Рабочий стол"
RAR.EXE a "%zz%:\Backup\Мои_документы" -r -m0 -ep1 o+ -ag_YYYY.MM.DD-HH.MM "%USERPROFILE%\Мои документы"
msg * Архивирование завершено
goto :EOF
 

 
Добавлено:
И по-моему будет лучше если ты переименуешь :EXIT во что-нибудь другое, поскольку exit это встроенная функция и она может вместо твоей свою вызывать

Всего записей: 136 | Зарегистр. 04-05-2009 | Отправлено: 11:56 17-05-2009 | Исправлено: HaK1R, 12:00 17-05-2009
Cosmogor



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
HaK1R
 
Спасибо.  
EXIT исправлю.

Всего записей: 230 | Зарегистр. 22-04-2009 | Отправлено: 13:06 17-05-2009
timka85

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

Всего записей: 236 | Зарегистр. 19-07-2008 | Отправлено: 14:05 17-05-2009 | Исправлено: timka85, 14:12 17-05-2009
ScreamWolf



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

Цитата:
 
Приветствую всех!  
Где-то чуть меньше полугода изучаю батники и и применения... и... тут столкнулся со сложной для меня задачуй... Я до конца не изучил (для меня почему-то эти операторы сложноваты) FOR и SET (особенно первый) и поэтому никак не могу спрвиться с задачкой...  
 
ВОТ УСЛОВИЕ  
некая перменная CHEKFILE=nnnXmYYYY  
где:  
"n" - это латинские буквы (значение постоянное)  
"X" - это цыфра от 1 до 9  
"m" - это латинские буквы от "a" до "z"  
"Y" - это число от 0000 до 9999  
 
И САМА ЗАДАЧКА  
необходимо создать счеткик для поска файла (переменная %CHEKFILE%)  
что бы поиск начался с nnn1a0000  
и закончился на nnn9z9999  
 
при первом же совпадении (счетчик останавливаеться)  
необходимо группированное выполнение команд с другими файлами  
при этом создаюсться отдельные txt-файлы  
в строках тела которых содиржится %CHEKFILE%,  
значение которого развернуто в найденое имя файла  
+ создание лога и завершение работы данного батника  
 
лог необходим для того что бы запустив следующий раз он считывал данные с лог файла  
и продолжил поиск с того имени на котором остановился прошлый раз  
 
 
Помогите plz начинающему...

 
 
Ну плиз подсобите с батничком...

Всего записей: 197 | Зарегистр. 15-05-2009 | Отправлено: 10:19 18-05-2009
01MDM



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ScreamWolf
Что-то как-то "?" Перечитал 3 раза, но не уловил.

Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 10:41 18-05-2009
king_stiven

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

Код:
FOR /L %%a IN (0,1,9) DO (
    for %%b in (a b 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 (
        FOR /L %%c IN (0,1,9) DO (
            FOR /L %%d IN (0,1,9) DO (
                FOR /L %%e IN (0,1,9) DO (
                    FOR /L %%f IN (0,1,9) DO (
                        if exist nnn%%a%%b%%c%%d%%e%%f команда
                    )
                )
            )
        )
    )
)

Вместо команда вставляй что тебе надо. ибо из поста непонятно.Например для создания лога:
if exist nnn%%a%%b%%c%%d%%e%%f echo nnn%%a%%b%%c%%d%%e%%f> log.log

Всего записей: 2165 | Зарегистр. 17-07-2006 | Отправлено: 11:20 18-05-2009
01MDM



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

Цитата:
if exist nnn%%a%%b%%c%%d%%e%%f команда

 
Вот мне и не понятно. Если уже определена переменная %CHECKFILE%, то зачем все это нужно? Можно просто:

Код:
 
if exist %checkfile% команда
 

Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 11:24 18-05-2009
king_stiven

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

Цитата:
ВОТ УСЛОВИЕ  
некая перменная CHEKFILE=nnnXmYYYY  
где:  
"n" - это латинские буквы (значение постоянное)  
"X" - это цыфра от 1 до 9  
"m" - это латинские буквы от "a" до "z"  
"Y" - это число от 0000 до 9999  


Всего записей: 2165 | Зарегистр. 17-07-2006 | Отправлено: 11:45 18-05-2009
KPOBABAK

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

Всего записей: 70 | Зарегистр. 16-11-2005 | Отправлено: 12:04 18-05-2009
basstard

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ScreamWolf
 
все то же, что написал king_stiven, только с set'ом:

Код:
@echo off
setlocal enabledelayedexpansion
FOR /L %%a IN (0,1,9) DO (
    for %%b in (a b 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 (
        FOR /L %%c IN (0,1,9) DO (
            FOR /L %%d IN (0,1,9) DO (
                FOR /L %%e IN (0,1,9) DO (
                    FOR /L %%f IN (0,1,9) DO (
                        if exist "<путь>\nnn%%a%%b%%c%%d%%e%%f" (
                            set CHEKFILE=nnn%%a%%b%%c%%d%%e%%f
                        )
                    )
                )
            )
        )
    )
)
echo !CHEKFILE!
pause

если файлов, удовлетворяющих условию, будет несколько, CHEKFILE'ом
станет последний найденный, если нужны по какому-то критерию, скажи по какому.
 
01MDM,
если определять до проверки, то цикл вернет nnn9z9999
даже если такого файла не существует

Всего записей: 58 | Зарегистр. 05-08-2008 | Отправлено: 12:51 18-05-2009 | Исправлено: basstard, 13:09 18-05-2009
01MDM



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ScreamWolf
king_stiven, basstard
Я бы сделал по другому, если правильно понял, то нужно просто при следующем запуске батника пропустить уже обработанные файлы:

Код:
 
@echo off
setlocal
 
echo == nnn.list == 1>nnn.list
dir /b | findstr nnn[0-9][a-z][0-9][0-9]* 1>>nnn.list
 
if not exist nnn.log echo == nnn.log == 1>nnn.log
for /f %%i in (nnn.log) do set /a skip+=1
 
for /f "skip=%skip%" %%i in (nnn.list) do (
    echo %%i 1>>nnn.log
    set "file=%%i"
    goto:exec
)
 
:exec
if defined file (
    echo somecommand %file%
)
del nnn.list
 

Можно и не удалять nnn.list, а искать нужную строку, если известно что не будут добавляться новые файлы.
Т.е написать условие - если существует список, мы ищем номер строки.

Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 13:38 18-05-2009 | Исправлено: 01MDM, 13:40 18-05-2009
king_stiven

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
01MDM
да, findstr ом лучше.Просто человек просил счётчик, он его и получил.

Всего записей: 2165 | Зарегистр. 17-07-2006 | Отправлено: 14:07 18-05-2009
HaK1R



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

Цитата:
предыдущий вариант не подходит, потому что пользователь может отрубить процесс, и там в режиме ожидания видно черное досовское окно

по этому варианту могу предложить конвертонуть в ехе-шник с помощью http://de.newestsoft.com/Windows/Development/Compilers-Interpreters/Bat-To-Exe-Converter_2766_1.html там при конвертировании можно поставить скрытый режим, тогда проверка будет только в процессах висеть, а ее видать. а чтобы процесс не завершали можно удалить диспетчер задач, а лучше не удалять а переименовать его в какойнибудь текстовый файл, а при нужде обратно переименовывать.
 
И еще может будет лучше не так чтобы он проверял каждую минуту, а чтобы он один раз при запуске проверил, вычислил разницу сколько осталось до выключения, и поставил на паузу, а потом без проверок его выключил, а то если юзеры умные они могут время поменять, когда к концу будет близиться сессия, а так у них будет шанс сделать это только при запуске

Всего записей: 136 | Зарегистр. 04-05-2009 | Отправлено: 14:34 18-05-2009
   

Страницы: 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 » Компьютеры » Программы » Командная строка, батники, сценарии (bat, cmd)
Widok (03-03-2010 16:29): Лимит страниц. Продолжаем здесь.


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

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.Board
© Ru.Board 2000-2020

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru