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

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

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

evle (19-03-2008 19:44): Лимит страниц.
Задачи на bat-файлах 5
 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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

   

vu1tur



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

 
Важно: копируя батник через буфер обмена из форума не забывайте удалять пробелы в конце каждой строки, т.к. в некоторых случаях из-за этого программа будет работать неправильно!!!
 
Также для удаления концевых пробелов пользуйтесь скриптом от Nagual, или VBS-Скрипт-Модулем от ViSiToR
.
 
Дополняем шапку: добавляем готовые решения, полезные ссылки.
 
Примечание: Большие куски кода заключайте в тэг [more]  
 
Смежные темы:
В помощь системному администратору » Автоматизация администрирования
Программы » Командная строка, батники\сценарии
 
Полезные ссылки
 
Полезные утилиты
 
Готовые решения и частые вопросы:
  • Встроенный справочник по командам
  • Создание помощи по всем командам консоли 2000 и XP
  • Делаем паузу в командном файле стандартными средствами Windows
  • Альтернативные решения »
  • Работа с текстом, датой, и файлами »
  • Администрирование, автоматизация и сеть »
  • Работа с переменными и параметрами ком. строки »
     
    Описания работы команд и символов участниками темы:
    · setlocal enabledelayedexpansion и переменные окружения
    · символы & и && в командной строке
    · Переменная %0

  • Всего записей: 3690 | Зарегистр. 01-02-2003 | Отправлено: 15:21 11-09-2007 | Исправлено: Elroir, 01:52 26-02-2008
    NIKZZZZ



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Простой вопросик, как распознать картинку в FineReader 9 ?
    В восьмерке :
    "%ProgramFiles%\ABBYY FineReader 8.0 Professional Edition\fineocr.exe" "%image.jpg" /lang English /send clipboard
     

    Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 19:21 12-11-2007
    Cyril Konst



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

    Цитата:
    Будем считать, что путь к аккаунтам пользователей стандартный: "c:\documents and settings", если нет, то измени путь на нужный тебе. Архивы создаются в директории откуда был запущен батник. Используется консольная версия архиватора 7zip, скопируй её в папку Windows.  
     
    Код:  
    @echo off  
    for /f "delims=" %%a in (  
       'dir "c:\documents and settings" /b /s /a:d ^| find /v /i "\Default" ^| findstr "документы$"') do (  
           for /f "delims=\ tokens=3" %%b in ("%%a") do 7z.exe a -t7z "%%~nxb".7z "%%a"  
     )  
     

     
    Здесь создаются файлы с именем юзера каждый.
    А как переделать, чтобы создавался один файл (doc.7z), в котором бы были подкаталоги с именами юзеров?

    Всего записей: 634 | Зарегистр. 12-08-2003 | Отправлено: 22:26 12-11-2007 | Исправлено: Cyril Konst, 22:27 12-11-2007
    Tipulatoid



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

    Цитата:
    Есть две папки "OK" и "incomplete", в каждой из этих папок есть много подпапок в которых есть файлы разных форматов с именами типа таких basslovers_united_vid.rar~80.239.159.9_3179_3754.avi.rar и таких ~80.239.159.9_3179_3754.avi.rar. Нужно чтоб батник проверял все папки на наличие файлов и переименовывал файлы с именем оставляя в них только то, что находитса перед тыльдой, а файлы без имени которые начинаютса с тыльды перемещял в подпапку "noname" и удалял тыльду.


    Код:
    @echo off
    setlocal enabledelayedexpansion
     
    call :rename "c:\auto 3\delme222\OK"
    call :rename "c:\auto 3\delme222\incomplete"
    goto :eof
     
    :rename
    pushd %~1
     
    for /r %%a in (*) do (
       set full_path_to_file=%%a
       set path_to_file=%%~dpa
       set filename=%%~nxa
       for /f "tokens=1,2 delims=~" %%a in ('echo !filename!') do (
          set first_part_name=
          set second_part_name=
          set first_part_name=%%a
          set second_part_name=%%b
          if defined second_part_name (
             ren "!full_path_to_file!" !first_part_name!
          ) else (
             ren "!full_path_to_file!" !first_part_name!
             if not exist noname\ mkdir noname\
             move "!path_to_file!\!first_part_name!" noname\
          )
       )
    )
     
    popd
    goto :eof

    Всего записей: 349 | Зарегистр. 22-12-2006 | Отправлено: 00:10 13-11-2007 | Исправлено: Tipulatoid, 00:58 13-11-2007
    Lutvun



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Tipulatoid
    Круто, но папка noname создаётса в корне(тоесть в папке ок) а должна создаватса в каждой с подпапок и файлы с даной подпапки должны перемещяса в подпапку даной подпапки(noname). Пример: V:\Test\ok\avi.rar\~2.avi.rar должен переместитса в V:\Test\ok\avi.rar\noname с именем 2.avi.rar.
    П.С. Не даст ли даный способ збой если в имене попадётса пробел или будет много символов?

    Всего записей: 286 | Зарегистр. 22-11-2005 | Отправлено: 01:43 13-11-2007
    king_stiven

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Tipulatoid
    ещё вариант, набросал без проверки, обязательно нужно отладить ключи, но в принципе должно работать.

    Код:
    @ECHO OFF
    call :rename "c:\auto 3\delme222\OK"
    call :rename "c:\auto 3\delme222\incomplete"
    goto :eof
     
    :rename
    for /f "usebackq tokens=*" %%a in (`dir %1 /b /s /a:-d`) do (
        for /f "tokens=1,2 delims=~" %%b in ("%%~nxa") do (
            ren "%%a" "%%b"
            if "%%c"=="" (
                if not exist "%%~dpa\noname" mkdir "%%~dpanoname"
                move  "%%~dpa%%b" "%%~dpanoname"
            )
        )
    )


    Всего записей: 2229 | Зарегистр. 17-07-2006 | Отправлено: 01:51 13-11-2007 | Исправлено: king_stiven, 07:24 13-11-2007
    Tipulatoid



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Lutvun
    Вариант king_stiven получше будет, т.к. он без setlocal enabledelayedexpansion и значит, не будет проблем с воскл. знакми в именах файлов. Папку noname он делает как тебе надо.
    Проблем с пробелами не будет, т.к. все что надо, в кавычках. Короче говоря, юзай этот код.
    all
    Кто-нибудь что-нибудь мне может сказать по поводу этого поста. Просто, коммментарий, во 1-первых, возможно ли в принципе, и, если да, как правильно прописывать коды и где их вообще можно посмотреть.

    Всего записей: 349 | Зарегистр. 22-12-2006 | Отправлено: 04:56 13-11-2007 | Исправлено: Tipulatoid, 04:58 13-11-2007
    Lqwait

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Maza Faka, Tipulatoid, 01MDM! Большое спасибо за участие! Буду разбираться! Никогда и не догадывался, что простой батник - может быть таким сложным...

    Всего записей: 2 | Зарегистр. 12-11-2007 | Отправлено: 05:55 13-11-2007 | Исправлено: Lqwait, 07:11 13-11-2007
    01MDM



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Захотелось выяснить по дате день недели.
    Вот что получилось

    Код:
     
    ::
    :: weekday.cmd
    :: Без проверки на валидность введенной даты  
    ::
    @echo off
    setlocal
     
    set /p date="Date: "
    set d=%date:~0,2%
    set m=%date:~3,2%
    set y=%date:~6,4%
     
    :: Проверка 08-09 без отрицательных лет
    if %d:~0,1%==0 set /a d=0x%d%
    if %m:~0,1%==0 set /a m=0x%m%
    if %y:~0,1%==0 set y=%y:~1,3%
    if %y:~0,2%==00 set y=%y:~2,2%
    if %y:~0,3%==000 set /a y=0x%y%
     
    :: Срез календаря
    set cury=%y%
    if %y% gtr 2028 (for /l %%i in (%y%,-28,2001) do set cury=%%i)
    if %y% lss 2001 (for /l %%i in (%y%,28,2028) do set cury=%%i)
    set cury=%cury:~2,2%
    if %cury:~0,1%==0 set /a cury=0x%cury%
     
    :: Текущий день в срезе календаря
    set /a l=y%%4
    set "nd=31 59 90 120 151 181 212 243 273 304 334"
    if %l%==0 set "nd=31 60 91 121 152 182 213 244 274 305 335"
    set /a tok=m-1
    if not %tok%==0 for /f "tokens=%tok%" %%i in ("%nd%") do set /a dy=d+%%i
    if %m%==1 set dy=%d%
    set /a ind=(dy+(cury-1)*365+(cury-1)/4)%%7
     
    :: День недели
    if %ind%==0 set dow=Sun
    if %ind%==1 set dow=Mon
    if %ind%==2 set dow=Tue
    if %ind%==3 set dow=Wed
    if %ind%==4 set dow=Thu
    if %ind%==5 set dow=Fri
    if %ind%==6 set dow=Sat
    echo is %dow%
     


    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 09:35 13-11-2007 | Исправлено: 01MDM, 21:16 14-01-2008
    soulthiefer

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

    Всего записей: 40 | Зарегистр. 11-07-2006 | Отправлено: 09:42 13-11-2007
    Lutvun



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    king_stiven, Tipulatoid
    Спасибо огромное, всё работает, но если первый раз запускаеш батник, он всё делает правильно, и создаёт этот avi.rar\noname, а если запустить второй раз, то он опять перемещяет файлы с avi.rar\noname в avi.rar\noname\noname. Нужно какуюнибудь проверку вставить. Также хрошо бы если в имени файла нету "~" чтоб он ево не трогал.

    Всего записей: 286 | Зарегистр. 22-11-2005 | Отправлено: 09:49 13-11-2007
    Cyril Konst



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    soulthiefer
    Ты найди сначала утилитку, которая умеет в BIOS время включения изменять. Она ведь для разных BIOS вроде своя должна быть (если вообще существует). Тогда те и батник сделают.

    Всего записей: 634 | Зарегистр. 12-08-2003 | Отправлено: 10:28 13-11-2007 | Исправлено: Cyril Konst, 10:34 13-11-2007
    king_stiven

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

    Цитата:
    all  

     
    Предлагаю внести в шапку:
     
    Важно: предлагая свою задачу, необходимо подробно её описать, включая все варианты и привести пример
     
    Lutvun
     
    Можно включить проверку. чтобы из любой папки noname  файлы не трогал.
     

    Цитата:
     Также хрошо бы если в имени файла нету "~" чтоб он ево не трогал.

    Можно.  
     

    Всего записей: 2229 | Зарегистр. 17-07-2006 | Отправлено: 10:51 13-11-2007
    Lutvun



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

    Цитата:
    Можно включить проверку. чтобы из любой папки noname  файлы не трогал.

    Такое подходит, папок типа ok\noname там не будет.

    Всего записей: 286 | Зарегистр. 22-11-2005 | Отправлено: 10:59 13-11-2007
    soulthiefer

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Здравствуйте всем еще раз!
    нашел утилитку которая умеет менять в bios время включения  
    http://www.softforfree.com/files/soft/bilarm.zip
    помогите пожалуйста с батником который будет менять это время на 5 минут больше системного на данный момент и выключать комп ! а он должен по идее через 5 мин включиться !

    Всего записей: 40 | Зарегистр. 11-07-2006 | Отправлено: 11:42 13-11-2007
    Smitis



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

    Цитата:
    помогите пожалуйста с батником который будет менять это время на 5 минут больше системного на данный момент и выключать комп ! а он должен по идее через 5 мин включиться !

    Для начала с правилами форума разберись.

    ----------
    Разум когда-нибудь победит

    Всего записей: 3214 | Зарегистр. 09-02-2003 | Отправлено: 13:04 13-11-2007
    CriticalError

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

    Цитата:
    Tipulatoid  
     
    Цитата:Используется утилита tasklist.exe Насколько зняю, ее по умолчанию нет в Win XP Home Edition. Тогда надо ее скопировать с Prof. Edition и кинуть в папку %windir%\system32  
     
     
    Большое спасибо, это работает на обычном ХР проф. Но когда я попытался запустить tasklist на XP Embedded, оказалось, что его там нет. Я скопировал tasklist.exe и еще dbghelp.dll, которую он требовал, но, тем не менее, при попытке выполнения tasklist.exe система пишет "ERROR: Provider load failure"  
     
    Чего может не хватать системе для запуска tasklist?

     
    Нашел в одном форуме описание именно этой проблемы:
     

    Цитата:
    Hello XPe community. I am having a small issue using taskill.exe on my XPe
    build. Perhaps somebody could shed some light.
     
    I am simply trying to run a very simaple taskkill.exe command. I am getting
    the following message returned:
     
    ERROR: Provider load failure.
     
    I have checked the dependencies for Server Command Line Tools (as this
    component contains taskkill.exe) and this looks to be OK.
     
    Any ideas?
     

     
    После обсуждения чувак сам пришел к решению:
     

    Цитата:
    KM,
     
    Looked in the filemon regmon logs to no avail, but did some hunting and
    pecking:
     
    Turned out to be a component needed: WMI Win32 Provider (which makes sense
    considering what these tools are trying to accomplish).
     
    "Server Command Line Tools" does not call WMI Win32 Provider as a dependency
    (directly/specifically), nor does it specify such in the Component Help.
     
    On another note: (could be useful to others):
     
    The WMI Win32 Provider component is also needed to suppress that annoying
    netsh message specifying: "Cannot retreve host information for COMPUTERNAME,
    some commands will not be available".
     
    Anyhow....it is resolved...which is a good thing! Thanks for your prompt
    replies, and suggestions. If I can be of any help, please let me know.
     

     
    Кто-нибудь знает, что такое "Server Command Line Tools" и компонент "WMI Win32 Provider" и как его установить?

    Всего записей: 45 | Зарегистр. 22-11-2004 | Отправлено: 13:12 13-11-2007
    01MDM



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    CriticalError
    Поставь pstools
    Там есть pslist и pskill. Ничем не хуже tasklist и taskkill.

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 14:39 13-11-2007
    king_stiven

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Lutvun
    Пробуй
    for /f "usebackq tokens=*" %%a in (`dir "%~1\*~*" /b /s /a:-d`) do (

    Всего записей: 2229 | Зарегистр. 17-07-2006 | Отправлено: 15:38 13-11-2007
    Cyril Konst



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

    Цитата:
    Будем считать, что путь к аккаунтам пользователей стандартный: "c:\documents and settings", если нет, то измени путь на нужный тебе. Архивы создаются в директории откуда был запущен батник. Используется консольная версия архиватора 7zip, скопируй её в папку Windows.  
     
    Код:  
    @echo off  
    for /f "delims=" %%a in (  
       'dir "c:\documents and settings" /b /s /a:d ^| find /v /i "\Default" ^| findstr "документы$"') do (  
           for /f "delims=\ tokens=3" %%b in ("%%a") do 7z.exe a -t7z "%%~nxb".7z "%%a"  
     )  
     

     
    Здесь создаются файлы с именем юзера каждый.
    А как переделать, чтобы создавался один файл (doc.7z), в котором бы были подкаталоги с именами юзеров?

    Всего записей: 634 | Зарегистр. 12-08-2003 | Отправлено: 16:22 13-11-2007
    Lutvun



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    king_stiven
    Ничиво не изменилось, также как и создавались двойние нонеймы так и создаютса. И файлы без тыльды дальше обрабатываютса.

    Всего записей: 286 | Зарегистр. 22-11-2005 | Отправлено: 16:51 13-11-2007
       

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

    Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Задачи на bat-файлах 4
    evle (19-03-2008 19:44): Лимит страниц.
    Задачи на bat-файлах 5


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

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

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru