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

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



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    res2001
    Увы, в исходных файлах этого символа нет. Его вставляет система ровно на стыке двух файликов.
    Что касается ключика /b в команде copy, то я пробовал и с ним тоже. Причём, синтаксис команды позволяет указывать "бинарность" файла в именовании каждого сцепляемого файла, что я и сделал. Увы, тошнотворный символ появляется всё равно.
     
     
    wolf0425
    ну, нет его там. вот даю два файла, что я сливаю в uue
    cfg1.v8i
    cfg2.v8i
     
    команда для сливания вот такая:
    copy /a cfg1.v8i+cfg2.v8i ibases.v8i
     
    результирующий файл
     
    Добавлено:
    причём, в команде сливания что ключ /a, что ключ /b - всё одинаково, вставляется этот символ.

    Всего записей: 2863 | Зарегистр. 31-10-2003 | Отправлено: 11:53 29-09-2010 | Исправлено: Accessor, 12:08 29-09-2010
    NIKZZZZ



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

    Цитата:
    Увы, в исходных файлах этого символа нет.

    А если посмотреть в HEX виде?
    Cору /a нормально сливает UNI файлы, "яю" между ними не вставляет.
    Если в исходных файлах нет этих символов, может их просто добавить?
     
     
     
     
    Добавлено:
    Accessor
    Так кодировочка UTF8 !!!

    Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 12:06 29-09-2010
    res2001



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Accessor
    В бинарном режиме копирования, copy не делает ни каких предположений о содержимом файлов и сливает все как есть побайтно. Значит эти символы есть в исходных файлах.
    Посомотри в HEX виде, как посоветовал NIKZZZZ.

    Всего записей: 2580 | Зарегистр. 11-04-2003 | Отправлено: 12:14 29-09-2010 | Исправлено: res2001, 12:24 29-09-2010
    Beeboba



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

    Цитата:
    smirnvlad

     
    создаю тысячу файлов "%номер%.zip" и батник с кодом выше маску меняю на *.zip, загружаю дисковую систему запросами, запускаю батник и вижу файл "2010_09_28_23_43_2010_09_28_23_43_10.zip" т.е. переименованный файл переименовывался ещё раз  
    чтобы такое избежать  
     
    Код:   for /f "tokens=*" %%a in ('dir /b *.zip') do ren "%%a" "%date:~6,4%_%date:~3,2%_%date:~0,2%_%time:~0,2%_%time:~3,2%_%%a"
     
     
    Спасибо !!! но у меня сразу после переименование , файлы перемещаются в другую папку я так решил т.к с коммандной строкой не сильно дружу
     
     
    А вообще вся байда была придумана для резервного копирования в реалтайме  при работе в программе (Х)- прога глюченная но необходимая таким образои  мой .cmd  срабатывает каждые 20 минут в тихом режиме и проэкты бекапятся куда надо ,, если прога зависла и проэкт запорот можно всегда откатиться  - теперь нужно научиться пользоваться ctrl-s

    Всего записей: 75 | Зарегистр. 15-01-2002 | Отправлено: 12:18 29-09-2010
    res2001



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    И еще, BOM добавляется в начало документа, а не в конец и тем более не в середину.

    Всего записей: 2580 | Зарегистр. 11-04-2003 | Отправлено: 12:19 29-09-2010
    NIKZZZZ



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Accessor
     
    EF BB BF - эти три байта в начале файла, при слиянии их нужно просто проигнорировать в первой строке второго файла, UTF8 Windows понимает плохо.

    Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 12:25 29-09-2010
    Accessor



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    res2001
    NIKZZZZ
    Спасибо за помощь, всё получилось. Удалил hex-редактором эту нудную комбинацию EF BB BF. Проблема заключалась в том, что я работал FARом. Он, почему-то, не показывал мне эти лишние байты. Как только взял в руки Hiew - сразу увидел мусор в исходных файлах.

    Всего записей: 2863 | Зарегистр. 31-10-2003 | Отправлено: 12:58 29-09-2010
    res2001



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Accessor
    В фаре поменял бы кодировку с УТФ на любую другую и байты бы вылезли.
    Любой текстовый редактор, понимающий УТФ8, не показывает БОМ.

    Всего записей: 2580 | Зарегистр. 11-04-2003 | Отправлено: 13:03 29-09-2010
    wolf0425



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

    Цитата:
    В фаре поменял бы кодировку с УТФ на любую другую и байты бы вылезли.  
    не, просто от переключения - не вылезли бы.
    вылезли бы если из редактирования файла выйти с установленной анси/оем кодировкой и снова зайти.
    И не записались бы в в файл при сохранении в 1251/866
     
     
    Добавлено:

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

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 14:18 29-09-2010 | Исправлено: wolf0425, 14:31 29-09-2010
    Batnik

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

    Всего записей: 3 | Зарегистр. 29-09-2010 | Отправлено: 18:23 29-09-2010
    bomzzz



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

    Цитата:
     
    ECHO OFF
    COLOR 9F
    CLS
    setlocal enabledelayedexpansion
    echo %DATE%
    set MYDATE=%DATE%
    set /A CURDAY=1%MYDATE:~0,2%-100
    set /A CURMOUNTH=1%MYDATE:~3,2%-100
    set /A CURYEAR=1!%MYDATE:~6,4%-10000
    echo %CURYEAR% %CURMOUNTH% %CURDAY%
     
     
    SET DIRCMD=/B /A:-D
    PUSHD
    for /f "delims=" %%I in ('DIR') do (
    echo %%~tI
    SET FILEDATA=%%~tI
    echo !FILEDATA!
    set /A DAY=1!FILEDATA:~0,2!-100
    set /A MOUNTH=1!FILEDATA:~3,2!-100
    set /A YEAR=1!FILEDATA:~6,4!-10000
    echo !YEAR! !MOUNTH! !DAY!
     
    )
    ECHO.
    POPD
    pause
     

     
    Добавлено:
    осталось алгоритм сравнения придумать и реализовать.
     

    set /A CHANGE=%CURYEAR%-!YEAR!
    if !CHANGE! NEQ 0 set /A MOUNTH=!CHANGE!*12+!MOUNTH!

    Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 18:31 29-09-2010 | Исправлено: bomzzz, 18:52 29-09-2010
    Batnik

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

    Цитата:
    осталось алгоритм сравнения придумать и реализовать.

     
    А может просто сделать типо так If Текущая дата - Дата создания файла > 300 then удалить файл
     

    Всего записей: 3 | Зарегистр. 29-09-2010 | Отправлено: 18:47 29-09-2010
    bomzzz



    Запрет на пост
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Batnik
    нет так не получится, батники умеют десятичные файлы считать но не умеют время и дату складывать и отнимать
     
    Добавлено:
    а вот перевести все в число дней от определенной даты обычно 1 января 1980 года - идея здравая
     
    Добавлено:
    подожди кого нибудь я чета никогда не пользовался вычислительными выражениями в батниках даже как умножить и поделить точно будет не знаю
     
    Добавлено:
    ааааааааааааа еще надо высокосные годы учитывать
     
    Добавлено:
    ну ета не так то уж и сложно поделить на 4 количесвто лет и целую часть прибавить к дням
     
    Добавлено:
    в досе как то можно дату получить от 1 января 1980 года сразу

    Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 18:48 29-09-2010
    01MDM



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Batnik
    Используй forfiles.exе, в семерке, и может быть и в висте, из коробки.

    Код:
     
    forfiles /p "c:\path\to\folder" /d -90 /m *.* /c "cmd /c if @isdir==FALSE del /a /f @file"
     


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



    Запрет на пост
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    а если из семерки выкалупать этот форфайлс он на хп будет работать? а если сетвер использовать?
     
    Добавлено:
    ну я как обычно сделал - в большой сетке на 100 человек 1-2 расшаривают диск С. в п2п нашел этот FORFILES он под ХП категорично не запускается (если конечно это он был) - пишет не приложение win32

    Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 19:23 29-09-2010
    wolf0425



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

    Цитата:
    он под ХП категорично не запускается (если конечно это он был) - пишет не приложение win32

    так ты запросто мог 64-битную версию найти
    а вообще взятый с win2003 forfiles под XP - работал

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 19:56 29-09-2010 | Исправлено: wolf0425, 19:57 29-09-2010
    bomzzz



    Запрет на пост
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ну я не знаю что я скачал, три файла нашел 50 кб, 42 и 42.5

    Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 19:59 29-09-2010
    wolf0425



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    у меня в 32-битной семерке - 43008  
    а в утилитах, неизвестного происхождения v1.1 - 12к

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 22:06 29-09-2010 | Исправлено: wolf0425, 01:31 30-09-2010
    01MDM



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    В 7 x64  
    в system32 -  50712
    в syswow64 - 43008

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 22:38 29-09-2010
    Mark_Titov



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

    Код:
    @ECHO OFF
    Set N_Col=54
    Set cntA=100
    Set cnt=0
    for /l %%i in (0,2,98) do (
    dd bs=%$z%c >nul 2>&1
    ping -n 1 127.0.0.1 >nul
    Call :Bar
    )
    pause >nul& exit
     
    :Bar
    If %cnt%==0 (
    For /L %%a In (1,1,%N_Col%) Do Set Line0=!Line0!
    )
    Set /a Inc=((%cnt%+2)*%N_Col%)/%cntA%-(%cnt%*%N_Col%)/%cntA%
    If %Inc% GTR 0 For /L %%a In (1,1,%Inc%) Do <Nul Set /p X= Ы
    Set /a cnt+=2
    Set /a prsnt=cnt*100/cntA
    Title %1 %prsnt%%% Loaded

    Нужно что бы например в процессе продвижения полосы код проверял наличие 10 txt файлов,
    но не все пачкой, а по отдельности, получается что на каждые 10 делений полосы прогресс-бара одна проверка на наличие файла.
    И каждая проверка с условием, типа если файл в наличии, то идем дальше, если нет файла процесс
    прерывается и goto :error.
    Помогите пож-ста, вещь очень полезная, думаю что многим пригодится кроме меня...
    Благодарю...

    Всего записей: 387 | Зарегистр. 12-04-2010 | Отправлено: 23:36 29-09-2010 | Исправлено: Mark_Titov, 23:38 29-09-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