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

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

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

    Всего записей: 617 | Зарегистр. 09-08-2001 | Отправлено: 14:34 14-12-2007
    cluster

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    никто не знает, как cmd-файл в кодировке win-1251 выполнять в dos-866?
    просто есть vbs-скрипт, кторый создаёт искомый cmd-файл. а как создавать его сразу в dos-кодировке, я не в курсе.
    посоветовали запускать "cscript //nologo scriptname.vbs > userslist.cmd", но это н очень удобно. да и CHCP 866 > null не помогает.

    Всего записей: 1720 | Зарегистр. 21-11-2003 | Отправлено: 16:58 14-12-2007
    01MDM



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

    Код:
     
    chcp 1251>nul & userlist.cmd
     

    Либо chcp 1251>nul прописать в самом батнике

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 18:07 14-12-2007
    slech



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    всем привет.
    хочу соорудить батник для синхронизации 2-ух папок.
    есть папка 1 тут и папка 1 там. ночью происходит копирование, но почти всегда не совсем удачно. поэтому нужно проверить всёё ли хорошо скопировалось. часто создаётся фал но с нулевым размером. приходится искать его и копировть вручную.
     
    1. нужна утилитка которая будет ждать ввода № папки, так как в каждый день она новая.
    2. нужна умная утилитка для копирования, copy точно не подойдёт. что бы ещё могла мне показать какие файлы различаются и что бы конечно копировала их. т.е. как бы отчёт что сделала.
    3. отправить уведомление можно blat или smpsend.
     
    можете посоветовать п1 и п2.
     
    спасибо.

    Всего записей: 4893 | Зарегистр. 10-11-2004 | Отправлено: 11:17 15-12-2007
    Elroir



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    slech
    1. Команда set /p "folder=Enter folder name : ", будет ожидать ввода названия директории и запишет введенное название в переменную "folder".
    2. Насколько я понял, надо пройтись по всем файлам в директории 1 и проверить есть ли такой файл в директории 2 и, если есть, сравнить их размеры? Если файла нет или размеры не совпадают, надо скопировать этот файл в директорию 2 и выдать отчет?

    ----------
    "В интернете есть все, но не всегда"

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 13:41 15-12-2007
    Lutvun



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

    Всего записей: 286 | Зарегистр. 22-11-2005 | Отправлено: 14:27 15-12-2007
    dimalogin

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Здраствуйте, как присвоить переменной определенной в batch файле (пакетном файле) содержимое файла?
    например, чтобы записать в файл значение переменной:
    echo %variable% > C:\test.txt
    А как мне теперь это значение получить обратно?

    Всего записей: 3 | Зарегистр. 14-12-2007 | Отправлено: 14:32 15-12-2007
    Elroir



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    dimalogin
    В теме , которую ты создал, тебе правильно ответили:

    Код:
     
    set /p variable=<c:\test.txt
     

    при этом в переменную запишется первая срочка файла c:\test.txt.
    Можно воспользоваться такой конструкцией:

    Код:
     
    for /f "tokens=*" %%a in (c:\test.txt) do set "variable=%%a"
     

    При этом в переменную будут последовательно записываться все строчки файла и в конце в переменной будет последняя строчка файла. Смотри справку команды for (for /?).

    ----------
    "В интернете есть все, но не всегда"

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 14:56 15-12-2007
    dimalogin

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





    неинформативное сообщение

    Всего записей: 3 | Зарегистр. 14-12-2007 | Отправлено: 19:27 15-12-2007 | Исправлено: vu1tur, 02:09 16-12-2007
    king_stiven

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

    Всего записей: 2229 | Зарегистр. 17-07-2006 | Отправлено: 20:49 15-12-2007
    boypenza

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Уважаемые форумчане!!! Помогите разобраться с задачкой:
     
    "Используя конвейер и утилиты FINDSTR и SORT, обработать вывод команды DIR (без параметров) таким образом, чтобы результат содержал только записи, относящиеся к файлам, и был отсортирован в порядке возрастания времени (но не даты!) их создания."
     
    попробовал реализовать это как  
    dir | findstr /s [*.*] | sort /+13
     
    но при этом выдаются и каталоги. как осуществить вывод только файлов???
     
    Заранее благодарен за ответ.

    Всего записей: 2 | Зарегистр. 16-03-2007 | Отправлено: 12:41 16-12-2007
    BasiL



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

    Цитата:
    попробовал реализовать это как

    можно и без findstr

    Код:
    dir /a:-d /o:-d /t:c | sort /+10

    если использование обязательно, то так:

    Код:
    dir /t:c | findstr -v DIR | sort /+10

     
    З.Ы. На сколько помню, вывод даты зависит от формата времени, использованном в системе. У меня дата в формате dd.mm.yy так что возможно, нужно будет подправить цифру сравнения в sort

    Всего записей: 3247 | Зарегистр. 13-03-2004 | Отправлено: 13:27 16-12-2007
    01MDM



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

    Код:
     
    dir | findstr ":" | findstr /v "DIR номер папки" | sort /+10
     


    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 13:57 16-12-2007 | Исправлено: 01MDM, 15:41 16-12-2007
    boypenza

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    BasiL
    01MDM
     
    Огромное спасибо вам, ребята!!! Собрал в кучу ваши варианты и сообразил. только вот вопрос к 01MDM:
     
    а если в имени файла будет слово номер или папка, то он не выведется? я правильно понимаю?

    Всего записей: 2 | Зарегистр. 16-03-2007 | Отправлено: 16:57 16-12-2007
    BasiL



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

    Цитата:
    dir | findstr ":" | findstr /v "DIR номер папки" | sort /+10

     
    Оригинально вырезал последние две строчки

    Всего записей: 3247 | Зарегистр. 13-03-2004 | Отправлено: 17:13 16-12-2007
    01MDM



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    boypenza
    Да, пожалуй этого файла ты не увидишь
    Вот так будет лучше:

    Код:
     
    dir | findstr ":" | findstr /v "%cd% <DIR> тома:" | sort /+10
     

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 17:22 16-12-2007 | Исправлено: 01MDM, 18:49 16-12-2007
    Smitis



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

    Цитата:
    1. нужна утилитка которая будет ждать ввода № папки, так как в каждый день она новая.  
    2. нужна умная утилитка для копирования, copy точно не подойдёт. что бы ещё могла мне показать какие файлы различаются и что бы конечно копировала их. т.е. как бы отчёт что сделала.  

    robocopy, nnbackup
    Имя папки вводить вручную в командной строке (передавать батнику в качестве параметра).

    Всего записей: 3217 | Зарегистр. 09-02-2003 | Отправлено: 00:18 17-12-2007
    Estevan

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Ребята всё же нужно решение задачи

    Цитата:
    За сувщевствующими архивами создать файл new.arj,в котором сохранить копию самого нового текстового файла.Вырезать этот файл с других архивов.  

    Поскольку люди говорят:

    Цитата:
    Я не вижу способа вытащить из .arj архивов нужные данные.

    может мои предполажения будут полезными.
    1.Распаковать все архивы по каталогам(названия каталогов соответствуют названиям архивов).
    2.Осувщевствить поиск в этих каталогах текстового файла,дата создания которого является самой новой.
    3.Вырезать этот текстовый файл в каталог(создаём заранее) New.
    4.Заархивировать все файлы обратно в архивы(тоесть пункт 1 в обратном порядке:создаём архивы,названия которых соответствуют названиям каталогов,в которых лежат).
     

    Всего записей: 4 | Зарегистр. 03-12-2007 | Отправлено: 14:06 17-12-2007 | Исправлено: Estevan, 14:07 17-12-2007
    yurkesha



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

    Цитата:
    Я не вижу способа вытащить из .arj архивов нужные данные.
    ну как же не получится?! А как же ключ 'l'? Тока еще придется со свичами поиграться - чтобы выставить удобное представление даты...


    ----------
    Всем непричастным рекомендую прогулки на свежем воздухе

    Всего записей: 2741 | Зарегистр. 15-12-2003 | Отправлено: 16:28 17-12-2007
    01MDM



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Estevan
    У меня нет ни одного *.arj, поэтому на примере *.zip. Я думаю, что большой разницы нет.
    Строчки для архиватора поправь на нужные. Запускай из директории с архивами.  

    Код:
     
    @echo off
    md New
    for /f "tokens=*" %%i in ('dir /b *.zip') do (
        md "%%~ni"
        "%PROGRAMFILES%\7-zip\7z" e %%i -o"%%~ni"
        call:old "%%~ni"
    )
    "%PROGRAMFILES%\7-zip\7z" a -tzip New.zip New\*.*
    rd /s /q New
    goto:eof
     
    :old
    for /f "tokens=*" %%i in ('dir /b /od %1') do (
        move %%i New && goto:_rd
    )
    :_rd
    rd /s /q %1  
     


    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 17:38 17-12-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