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

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



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

    Цитата:
     
    который бы выводил на экран количество дней до 20.01.2008, если день наступил сообщить об этом...  
     

    Не уверен, что 20 января 2008 года наступит еще раз...
    День Сурка?

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 00:03 17-02-2008
    getname

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

    Цитата:
     Не уверен, что 20 января 2008 года наступит еще раз...  
    о_О а сейчас какой год? :лол:
    Цитата:
    День Сурка?
    совсем не важно.... главное что б работоло... либо так либо с модификацией о начале выводе сообщений с заданной датой(скажем за 10 дней)
     
    помогите...

    Всего записей: 9 | Зарегистр. 16-02-2008 | Отправлено: 20:16 17-02-2008
    01MDM



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    getname
    Посмотри, попробуй переделать. Будут вопросы - спрашивай.

    Код:
     
    @echo off
    setlocal
     
    :again
    set d=%date:~0,2%
    set m=%date:~3,2%
    set y=%date:~6,4%
     
    if %d:~0,1%==0 set d=%d:~1%
    if %m:~0,1%==0 set m=%m:~1%
     
    set /a feb=y%%4
    if %feb%==0 (set feb=29) else (set feb=28)
     
    set /a m-=1
    if %m%==0 (set yd=0 && goto:skip)
     
    :tok
    set /a tok+=1
    for /f "tokens=%tok%" %%i in ("31 %feb% 31 30 31 30 31 31 30 31 30 31") do (
        set /a yd+=%%i
        if not %tok%==%m% goto:tok
    )
     
    :skip
    set /a res=y*365+y/4+29-feb+yd+d
    set tok=
    set yd=
     
    if not defined res1 (
        set res1=%res%
        set /p date="Enter date: "
        goto:again
    )
     
    set /a res-=res1
    if not %res%==0 (
        if %res:~0,1%==- (
            echo %res:~1% days from %date%
        ) else (
            echo %res% days to %date%
        )
    ) else (
        echo today is %date%
    )
     


    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 22:19 17-02-2008
    getname

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Спасибо...
     
    Первое что сразу хотелось бы уточнить это локаль...
    что делает _setlocal_ и можна ли после этого утверждать что  
    set d=%date:~0,2%  
    set m=%date:~3,2%  
    set y=%date:~6,4%
    отработает корректно вне зависимосссти от формата системной даты?

    Всего записей: 9 | Зарегистр. 16-02-2008 | Отправлено: 23:17 17-02-2008
    01MDM



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    getname
    Setlocal для возможности использования скрипта несколько раз в одной сессии. Эта команда ограничивает область действия переменных.  
    Cкрипт будет работать неправильно если формат даты будет отличаться от шаблона

    Код:
     
    дд*мм*гггг
     

    где "*" односимвольный разделитель.  

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 23:34 17-02-2008
    cluster

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Есть ли способ установить шрифт из командной строки?
    Нашёл такой вот, но он требует перезагрузки

    Код:
    copy akbar.ttf %systemroot%\fonts
     
    [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts]
    "Akbar Plain (TrueType)"="akbar.ttf"

    Всего записей: 1720 | Зарегистр. 21-11-2003 | Отправлено: 15:08 18-02-2008
    igor_andreev

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    cluster
    http://www.scriptorium.se/freeyourdesktop/viewtopic.php?pid=195
    http://forum.oszone.net/thread-92136.html
    http://www.msfn.org/board/index.php?s=&showtopic=36508&view=findpost&p=265420

    Всего записей: 1704 | Зарегистр. 08-12-2004 | Отправлено: 16:27 18-02-2008
    AS2007

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Здесь на форуме нашел код батничка, который сканирует папки и делает плэйлист к мп3 файлам. Я немного переделал для создания списка фильмов в папке, из которой запускается батник, и всех подпапках... Но очень хотелось бы некоторые папки не учитывать. В данном примере не учитывается папка HIDDEN_FOLDER - идентифицируется по названию.
    Собственно вопрос - как бы переделать код, чтоб не учитывались скрытые папки (атрибут папки - скрытый) т.е. чтоб фильмы из скрытой папки не попадали в общий список, а например сохранялись бы в другой файл (например HIDDEN_%flname%)

    Код:
    @echo off
    mode con codepage select=1251 > nul
    REM set flname=""
    REM if "%flname%"=="" set /p flname=Enter file name:
    REM if "%flname%"=="" set flname=_List_"%DATE%".txt
    @set flname=_List_"%DATE%".txt
    @echo Please wait...
    @if exist %flname% del %flname%
    @set ind=0
    :next
    @set /a ind+=1
    @set tmp=
    @for /f "delims=\ tokens=%ind%" %%a in ("%~dp0") do set tmp=%%a
    @if not "%tmp%"=="" goto next
    @set /a ind-=1
    for /f "delims=\ tokens=%ind%*" %%a in ('dir /s') do (
     if "%%b"=="" (  
     echo ##### Корневая папка: %%a >> %flname%
     dir "*.avi" "*.wmv" /b >> %flname%
     echo. >> %flname%
     ) else if not "%%b"=="HIDDEN_FOLDER" (  
     echo ##### Содержимое папки: %%b >> %flname%
     dir "%%b\*.avi" "%%b\*.wmv"/b >> %flname%
     echo. >> %flname%
     )
    )
    @mode con codepage select=866 > nul
    @if exist %flname% start %flname%

    Зарание спасибо.

    Всего записей: 3 | Зарегистр. 16-11-2007 | Отправлено: 17:26 18-02-2008 | Исправлено: AS2007, 17:32 18-02-2008
    king_stiven

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

    Код:
    @echo off
    mode con codepage select=1251 > nul
    REM set flname=""
    REM if "%flname%"=="" set /p flname=Enter file name:
    REM if "%flname%"=="" set flname=_List_"%DATE%".txt
    @set flname=_List_"%DATE%".txt
    @echo Please wait...
    @if exist %flname% del %flname%
    @set ind=0
    :next
    @set /a ind+=1
    @set tmp=
    @for /f "delims=\ tokens=%ind%" %%a in ("%~dp0") do set tmp=%%a
    @if not "%tmp%"=="" goto next
    @set /a ind-=1
    for /f "delims=\ tokens=%ind%*" %%a in ('dir /s') do if not "%%b"=="" echo %%b>> 1.txt

     
    Что выдаёт в 1.txt, список папок?

    Всего записей: 2229 | Зарегистр. 17-07-2006 | Отправлено: 19:23 18-02-2008
    AS2007

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

    Цитата:
    Что выдаёт в 1.txt, список папок?

     
    Да, вот примерно так:
     
    HIDDEN_FOLDER - Эта папка имеет скрытый атрибут
    FOLDER1
    FOLDER2
    FOLDER2\SUBFOLDER1
    FOLDER2\SUBFOLDER2
    FOLDER3
     
    Вопрос был не в том как вывести список папок, а как "разделить" файлы из скрытых и не скрытых каталогов и вывести их в разные файлы....

    Всего записей: 3 | Зарегистр. 16-11-2007 | Отправлено: 03:34 19-02-2008
    king_stiven

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AS2007
    Понимаешь у меня сейчас нет времени разобраться в твоём и написать сразу на 100% работающий батник, поэтому двигаемся поэтапно. Я так понял, что мой вариант выдаёт полный список папок, которые остаётся только отсортировать по скрытности. Это так?

    Всего записей: 2229 | Зарегистр. 17-07-2006 | Отправлено: 07:01 19-02-2008
    qrock



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

    Всего записей: 128 | Зарегистр. 19-01-2005 | Отправлено: 07:09 19-02-2008
    cluster

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    qrock
    Оо, я бился над этой проблемой в январе. Читай пару страниц.
    http://forum.ru-board.com/topic.cgi?forum=62&topic=11825&start=1320#19
     
    Добавлено:
    igor_andreev
    Благодарю

    Всего записей: 1720 | Зарегистр. 21-11-2003 | Отправлено: 09:17 19-02-2008
    01MDM



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    qrock
    Поищи в Версии для печати по ключевым словам. Обсуждалось много раз.

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 09:19 19-02-2008
    king_stiven

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

    Код:
    @echo off
    mode con codepage select=1251 > nul
    REM set flname=""
    REM if "%flname%"=="" set /p flname=Enter file name:
    REM if "%flname%"=="" set flname=_List_"%DATE%".txt
    @set flname=_List_"%DATE%".txt
    @echo Please wait...
    @if exist %flname% del %flname%
    @set ind=0
    :next
    @set /a ind+=1
    @set tmp=
    @for /f "delims=\ tokens=%ind%" %%a in ("%~dp0") do set tmp=%%a
    @if not "%tmp%"=="" goto next
    @set /a ind-=1
    for /f "delims=\ tokens=%ind%*" %%a in ('dir /s') do (
        if "%%b"=="" (
            echo ##### Корневая папка: %%a >> %flname%
            dir "*.avi" "*.wmv" /b >> %flname%
            echo. >> %flname%
        ) else (
            for /f "tokens=1,2" %%c in ('attrib "%%b"') do (
                if "%%c"=="H" set HIDDEN=yes
                if "%%d"=="H" set HIDDEN=yes
                if "%%c"=="HR" set HIDDEN=yes
                if "%%d"=="HR" set HIDDEN=yes
            )
            if not defined HIDDEN (
                echo ##### Содержимое папки: %%b >> %flname%
                dir "%%b\*.avi" "%%b\*.wmv"/b >> %flname%
                echo. >> %flname%
            ) else (
                 ну а сюда пиши , что хочешь сделать с скрытыми папками, выраженными через переменную %%b
                 set HIDDEN=
            )
        )
    )
    @mode con codepage select=866 > nul
    @if exist %flname% start %flname%

    Вариант, что скрытая папка является и системной не рассмотрен

    Всего записей: 2229 | Зарегистр. 17-07-2006 | Отправлено: 13:43 19-02-2008
    AS2007

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

    Цитата:
    Я так понял, что мой вариант выдаёт полный список папок, которые остаётся только отсортировать по скрытности. Это так?

    Да, абсолютно так.
    king_stiven
    Спасибо, сейчас попробую... разобраться.

    Цитата:
    Вариант, что скрытая папка является и системной не рассмотрен

    Ну по идеи он и не нужен.... достаточно H
     
    Добавлено:
    king_stiven
    Еще раз большое спасибо... Немного подправил и все супер, работает как нужно.

    Всего записей: 3 | Зарегистр. 16-11-2007 | Отправлено: 15:03 19-02-2008 | Исправлено: AS2007, 18:49 19-02-2008
    MaCeL

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

    Всего записей: 1 | Зарегистр. 19-02-2008 | Отправлено: 16:03 19-02-2008
    Joolz

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    При включении setlocal enabledelayedexpansion
    как-либо экранировать символ восклицательного знака не получается. Можно ли это как-то обойти?
     
    Добавлено:
    MaCeL
    Что-то типа того:

    Код:
    IF "%PATH:~-1%"=="\" SET PATH=%PATH:~0,-1%

    или если переменная составная и содержит список путей, разделенный точкой с запятой, то сначала

    Код:
    SET PATH=%PATH:\;=;%

    Всего записей: 100 | Зарегистр. 24-01-2008 | Отправлено: 16:17 19-02-2008 | Исправлено: Joolz, 16:30 19-02-2008
    01MDM



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Joolz
    Приведи пример. Проблема решается, но в констексте конкретного кода.
    Из общих рекомендаций, мое мнение - лучше избегать setlocal enabledelayedexpansion если код связан с выводом текста.

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 16:35 19-02-2008
    Joolz

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

    Код:
     
    @ECHO OFF
    REM Этот BAT'ничек лезет в ветку реестра и составляет список установленных программ и кладет его в файл на шару.
    Title Вывод списка установленных программ
    setlocal enabledelayedexpansion  
    ECHO Составляю список установленного ПО.  Ждите...
    ECHO ╤яшёюъ ╧╬ эр ъюья№■ЄхЁх %computername%:>\\COMP\Share\%computername%UN2.txt
    SET UNISTALL=HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall
    FOR /f "tokens=7 delims=\" %%a IN ('reg query "%UNISTALL%"') DO (
        SET prog=%%a
        FOR /f "tokens=1,2,*" %%b IN ('reg query "%UNISTALL%\%%a"') DO (
        if "%%b"=="DisplayName" SET prog1=%%d)
        FOR /f "tokens=1,2,*" %%x IN ('reg query "%UNISTALL%\%%a"') DO (
        if "%%x"=="UninstallString" SET ustr=%%z)
    IF NOT "!ustr!"=="" ECHO !prog1!    !prog!    !ustr!>>\\COMP\Share\%computername%UN2.txt
    set prog=
    set prog1=
    set ustr=
    )
    ECHO Спасибо
     

     
    Должен давать табличку со списком программ и командами для их удаления. В результате работы список получается, но программы содержащие "спецсимволы" не попадают в этот список.

    Всего записей: 100 | Зарегистр. 24-01-2008 | Отправлено: 17:22 19-02-2008
       

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