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

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

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

vu1tur (09-01-2011 11:53): лимит страниц, продолжение — http://forum.ru-board.com/topic.cgi?forum=62&topic=22143  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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

   

vu1tur



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

 
Важно: копируя батник через буфер обмена из форума не забывайте удалять пробелы в конце каждой строки, т.к. в некоторых случаях из-за этого программа будет работать неправильно!!!
 
Также для удаления концевых пробелов пользуйтесь скриптом от Nagual, или VBS-Скрипт-Модулем от ViSiToR.
 
Для перекодирования кирилицы 866<—>1251 пользуйтесь онлайн сервисом Перекодировщик кириллицы

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

  • Всего записей: 3690 | Зарегистр. 01-02-2003 | Отправлено: 17:45 04-09-2010 | Исправлено: Accessor, 18:04 28-09-2010
    pandora777

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Такой вопрос. Батником делается ежедневный архив. Как добавить удаление старых архивов, например, которые старше 2 месяцев? Заранее спасибо.

    Всего записей: 28 | Зарегистр. 29-03-2009 | Отправлено: 13:05 01-11-2010
    marakshin

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Вопрос: Имеется ли возможность изменить раскладку по умолчанию через интерфейс командной строки (через reg add не катит, потому что не применяется сразу).
    Объясню зачем: При подключении через UltraVNC, если у пользователя стоит раскладка по умолчанию: Русская, то возникают проблемы с переключением, если же Англицкая - то все нормально.  
    Спасибо.

    Всего записей: 39 | Зарегистр. 17-03-2009 | Отправлено: 13:42 01-11-2010
    wolf0425



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

    Цитата:
    Как добавить удаление старых архивов, например, которые старше 2 месяцев? Заранее спасибо.

    если точно уверен что тебе нужно именно по времени - то воспользуйся утилитой forfiles (в составе семерки уже есть, для предыдущих ОC - шапка и гугл в помощь).
     
    а если подойдет удалить просто все архивы кроме например последних 5 то типа так:

    Код:
    @echo off
    pushd "c:\archive" && for /f "skip=5 delims=" %%a in (' @dir /b /o-d *.zip ') do echo del "%%~a"

    echo после проверки уберешь сам

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 15:19 01-11-2010 | Исправлено: wolf0425, 15:25 01-11-2010
    ArtyBrest



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    День добрый всем.
     
    Имеется два каталога с файлами в них:

    Код:
    masks\
    mask0385.png
    mask0386.png
    mask0387.png
    diffuse\
    w0385.bmp
    w0386.bmp
    w0387.bmp

    Имена файлов неизвестны (могут отличаться от указанных, но всегда идут по порядку), количество файлов в обоих каталогах одинаковое (200-300).
    Необходимо получить для обработки два файла одновременно, из одного каталога и из другого.
    Подозреваю что нужна конструкция с вложенными циклами for. В одном цикле получаются имена файлов из первого каталога и инкрементируется счетчик, а во вложенном втором получаются имена из второго каталога + работает второй счетчик. Второй цикл прерывается когда счетчик1=счетчик2. Далее внутри первого цикла выполняются требуемые действия с заранее сохраненными именами файлов.
    Может кто знает более изящное решение или это самое простое и не заморачиваться?

    Всего записей: 54 | Зарегистр. 02-02-2007 | Отправлено: 16:10 01-11-2010
    wolf0425



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

    Цитата:
    Имена файлов неизвестны (могут отличаться от указанных, но всегда идут по порядку)
    ты лучше скажи - совпадение циферок у имен - это закономерность или получилось случайно, и есть пары в которых такого совпадения нет?
     
    если первый вариант - то проще парой подстановок преобразовать первое имя во второе,
    если второй вариант (что нужно именно совпадение по порядку, а не по сходству имени) - то как ты написал, во внешнем цикле тикает счетчик и вызывается саб со вторым циклом, в том - скипается нужное количество файлов второго каталога...
    действия, кстати, проще выполнять в том же вложенном цикле, никаких промежуточных переменных не плодя.

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 16:34 01-11-2010 | Исправлено: wolf0425, 16:35 01-11-2010
    ArtyBrest



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

    Цитата:
    ты лучше скажи - совпадение циферок у имен - это закономерность или получилось случайно, и есть пары в которых такого совпадения нет?  

    да, в конце имени всегда четыре цифры и файлы с одинаковыми числами образуют пары.

    Всего записей: 54 | Зарегистр. 02-02-2007 | Отправлено: 16:43 01-11-2010 | Исправлено: ArtyBrest, 16:43 01-11-2010
    wolf0425



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

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

    Код:
    for %%a in ( masks\*.png ) do call :_proc "%%~a"
    exit
     
    :_proc
    set "_number=%~n1"
    set "_number=%_number:mask=%"
    echo "%~1" "diffuse\w%_number%.bmp"
    exit /b

    а вот если не просто циферки в именах, а и маски имен файлов заранее не известны (кроме наличия совпадающих четырех циферок в них) - то поизвращаться придется...

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 17:17 01-11-2010 | Исправлено: wolf0425, 17:24 01-11-2010
    ArtyBrest



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

    Цитата:
    а вот если не просто циферки в именах, а и маски имен файлов заранее не известны (кроме наличия совпадающих четырех циферок в них) - то поизвращаться придется...

    Примерно что-то такое и сделал, только скопировать сюда не могу, т.к. будет выдрано из контекста здоровенного файла .

    Всего записей: 54 | Зарегистр. 02-02-2007 | Отправлено: 17:28 01-11-2010
    king_stiven

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

    Цитата:
    да, в конце имени всегда четыре цифры и файлы с одинаковыми числами образуют пары.

    for %%a in (masks\*) do (
        set a=%%a
        set b=%%~na
        call :fgh1
    )
    pause
    :fgh1
    for %%c in (diffuse\*%b:~-4%.*) do echo %a% %%c
     
    Добавлено:
    то же самое
     
    for %%a in (masks\*) do call :fgh1 "%%a" "%%~na"
    pause
    :fgh1
    set "b=%~2"
    for %%c in (diffuse\*%b:~-4%.*) do echo %1 %%c
     
    Добавлено:
    Но почему и в этом варианте %%a срабатывает, мне непонятно.
    Код:
    for %%a in (masks\*) do call :fgh1 "%%~na"
    pause
    :fgh1
    set "b=%~1"
    for %%c in (diffuse\*%b:~-4%.*) do echo %%a %%c

    Всего записей: 2229 | Зарегистр. 17-07-2006 | Отправлено: 19:54 01-11-2010 | Исправлено: king_stiven, 20:17 01-11-2010
    toshanNEW



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Здравствуйте.
    Подскажите, как сделать такую задачу.
    В сети есть несколько машин (н-р: comp1, comp2, comp3...)
    Необходимо скопировать папку (файл) на все компы (на диск c: - т.е. в c$).
    Например список компов будет содержаться в отдельном текстовом файле, по одному на строчку, например, как позволяет сделать тотал коммандер

    Код:
     
    comp1\
    comp2\
    comp3\
    ...
     

    Вобщем нужно скормить этот список скрипту и чтобы он раскидал эту папку всюду, если её нет.
    Ещё, наверное, нужно будет применить необходимые права на скопированную папку, но в этом, думаю уже разберусь через xcacls.
     
    Спасибо.

    Всего записей: 65 | Зарегистр. 20-09-2005 | Отправлено: 01:40 02-11-2010 | Исправлено: toshanNEW, 01:41 02-11-2010
    BVV63



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

    Код:
    For /F "UseBackQ" %%0 In (`Type "текстовый_файл"`) Do Copy /Y /Z "файл_или_папка" \\%%0\C$

    В текстовом файле построчно прописаны компьютеры. Вместо "Copy" можно использовать "XCopy" (в зависимости от задачи).

    Всего записей: 3542 | Зарегистр. 17-08-2009 | Отправлено: 06:29 02-11-2010 | Исправлено: BVV63, 06:34 02-11-2010
    Accessor



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    BVV63
    Вы усложнили на пустом месте. Можно проще :
    for /f %i in (list.txt) do copy ...

    Всего записей: 2863 | Зарегистр. 31-10-2003 | Отправлено: 10:17 02-11-2010
    vitaliy91

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

    Всего записей: 37 | Зарегистр. 16-11-2008 | Отправлено: 22:38 02-11-2010
    bomzzz



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

    Цитата:

    @ECHO OFF
    COLOR 9F
    CLS
    echo %0
    echo %~d0
    echo %~dp0
    pause

    Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 05:37 03-11-2010 | Исправлено: bomzzz, 05:38 03-11-2010
    wolf0425



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    bomzzz, ты на что отвечаешь?
    %~d0 не является буквой текущего диска и не работает в чистом досе.

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 08:48 03-11-2010 | Исправлено: wolf0425, 08:49 03-11-2010
    bomzzz



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

    Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 08:58 03-11-2010
    wolf0425



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

    Цитата:
    не сообразил что значит чистый дос
    это значит просто дос - без виндов и без например 4dos.
    С дискетки такой грузится...

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 14:58 03-11-2010
    Accessor



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    wolf0425
    Цитата:
    С дискетки такой грузится...

    А у меня с флешки

    Всего записей: 2863 | Зарегистр. 31-10-2003 | Отправлено: 15:08 03-11-2010
    bomzzz



    Запрет на пост
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    у доса мало возможностей в батниках или пиши утилиты дополнительные или возьми 4dos

    Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 15:10 03-11-2010
    01MDM



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

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 20:25 03-11-2010
       

    Страницы: 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-файлах 9
    vu1tur (09-01-2011 11:53): лимит страниц, продолжение — http://forum.ru-board.com/topic.cgi?forum=62&topic=22143


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

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

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru