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

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

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

vu1tur (11-09-2007 15:22): продолжаем в теме Задачи на bat-файлах 4  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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

   

vu1tur



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

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

  • Всего записей: 3690 | Зарегистр. 01-02-2003 | Отправлено: 11:54 27-04-2007 | Исправлено: Elroir, 03:59 10-09-2007
    wolf0425



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    igor_andreev
    Цитата:
    Я такую задержку обычно вижу невооруженным глазом.
    вот я и поразился, что у этой программы задержка в десятые - была видна и повторяема, а у sbs2, запускаемой попеременно - не видна.
    А через час - и у этой задержка пропала до совершенно невидимой, я никаких пифов за это время не делал и вообще ничего на компе не менял, лазил по сайтам.  
    антивирус так чудит, что-ли...

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 09:10 23-06-2007
    mcTNT2

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ViSiToR
    Elroir
    Maza Faka
     
    Какая оживленная дискуссия получилась
    Сначала пошли "в лоб", но Maza Faka свел всё к захвату вывода dir, умно!
    Правильный вариант получается примерно таким:

    Код:
     
    set FILE=c:\myfile.zip
    for %%a in (%FILE%) do for /f "tokens=3" %%b in ('dir %FILE% ^| find /i "%%~nxa"') do set SIZE=%%b
    echo Bytes: %SIZE%
     

    Где можно почитать про переменные вида %VAR:~-x,-y% ? Я с ними ещё не знаком.

    Всего записей: 47 | Зарегистр. 23-11-2005 | Отправлено: 10:37 23-06-2007
    wolf0425



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

    Цитата:
    де можно почитать про переменные вида %VAR:~-x,-y%  
    set /?

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 11:06 23-06-2007
    mcTNT2

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

    Всего записей: 47 | Зарегистр. 23-11-2005 | Отправлено: 11:09 23-06-2007
    GORA2



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    igor_andreev
    Начну с благодарности за файлик "test.txt". Все работает.  
    ViSiToR
    Правда немного поменял: байты 2F заменил на 2E в первых двух строках, и
    Код:
    For /F "usebackq delims=" %%i In (`NOW.COM`) Do Set NowTime=%%i  
    на
    Код:
    For /F "delims=" %%i In ('NOW.COM') Do Set NowTime=%%i  
    получается вроде привычнее формат и короче
    Elroir
    Мне ваш вариант табулирования числа больше нравиться т.к. может использоваться не только для размера файла (при небольшой доводке), а вот его бы еще дополнить выравниванием чисел по "правому краю". Удобочитаемость выводимых таким образом в столбик чисел значительно возрастает. Считаю, что достаточно и девятизначных чисел, больше крайне редко встречаются (у меня, по крайней мере)

    Всего записей: 1271 | Зарегистр. 26-01-2006 | Отправлено: 11:15 23-06-2007
    igor_andreev

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

    Цитата:
    Правда немного поменял: байты 2F заменил на 2E в первых двух строках, и  

    А ежли заменить в первых двух строчках 3A и 2F на 20, то наверно получится то, что ты хотел от d_t.com ?

    Всего записей: 1704 | Зарегистр. 08-12-2004 | Отправлено: 11:42 23-06-2007
    GORA2



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    igor_andreev
    Цитата:
    А ежли заменить в первых двух строчках 3A и 2F на 20, то наверно получится то, что ты хотел от d_t.com ?
    Не совсем, мне еще столетие приходиться досчитывать, но за подсказку спасибо. От слешей ушел, а вот все заменить на пробелы не догадался .

    Всего записей: 1271 | Зарегистр. 26-01-2006 | Отправлено: 13:15 23-06-2007
    Elroir



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

    Цитата:
    а вот его бы еще дополнить выравниванием чисел по "правому краю". Удобочитаемость выводимых таким образом в столбик чисел значительно возрастает.

    Добавляются две строчки:

    Код:
     
    @echo off
    for %%a in (1 12 123 1234 12345 123456 1234567 12345678 123456789 1234567890 12345678901 123456789012 1234567890123 12345678901234 123456789012345) do (
    set SIZE=%%~a
    call :show
    )
    goto :EOF
    :show
    if not "%SIZE:~-13,-12%"=="" (set SIZE=%SIZE:~-15,-12% %SIZE:~-12,-9% %SIZE:~-9,-6% %SIZE:~-6,-3% %SIZE:~-3%) else (
    if not "%SIZE:~-10,-9%"=="" (set SIZE=%SIZE:~-12,-9% %SIZE:~-9,-6% %SIZE:~-6,-3% %SIZE:~-3%) else (
    if not "%SIZE:~-7,-6%"=="" (set SIZE=%SIZE:~-9,-6% %SIZE:~-6,-3% %SIZE:~-3%) else (
    if not "%SIZE:~-4,-3%"=="" (set SIZE=%SIZE:~-6,-3% %SIZE:~-3%)
    )))
    set "SIZE=                   %SIZE%"
    set "SIZE=%SIZE:~-19%"

    echo Bytes: %SIZE%
     

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


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

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 13:20 23-06-2007
    igor_andreev

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

    Цитата:
    Не совсем, мне еще столетие приходиться досчитывать

    Да, со столетием засада полная... Немного спасает ситуацию то, что в ближайшие 93 года еще XXI век будет на дворе, пока можно смело добавлять к году 20. А потом конечно в конце декабря 2099 года придется все батники переписать
     

    Всего записей: 1704 | Зарегистр. 08-12-2004 | Отправлено: 13:37 23-06-2007
    GORA2



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

    Elroir
    Вроде даже проще можно

    Код:
    :show
    set "SIZE=                   %SIZE:~-15,-12% %SIZE:~-12,-9% %SIZE:~-9,-6% %SIZE:~-6,-3% %SIZE:~-3%"
    set "SIZE=%SIZE:~-19%"
    echo Bytes: %SIZE%
    goto :EOF
    Я ошибаюсь?

    Всего записей: 1271 | Зарегистр. 26-01-2006 | Отправлено: 14:24 23-06-2007
    Elroir



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

    Цитата:
    Я ошибаюсь?

    Нет - все верно. С выравниванием по правому краю условия не нужны - пробелы все равно обрезаются.
     
    igor_andreev

    Цитата:
    Да, со столетием засада полная...

    Я так и представляю себе:
    1 января 2100 года, админы после (или еще в процессе) празднования нового года и тут у всех перестают работать батники. Истеричные посты на форуме - что делать??? как быть???
    P.S. А все потому, что в далеком 2007 году об этом не подумали.  
           


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

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 14:40 23-06-2007
    Sarancha75



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    В bat файле нужно выполнить определенные действия, но только при наличии нужного файла в определенном каталоге. Если этого файла нет, то соответсвенно делать ничего не надо. Нужный файл определяеся по маске, т.е. в его названии есть необходимая строка. После этого нужный файл переименовывается (надо для дальнейшего шага). Также может быть что файлов с нужной строкой несколько, в этом случае надо использовать только файл, с самой последней датой создания (все остальные файлы желательно удалить).
    Возможно ли это сделать внутри bat файла?

    Всего записей: 1400 | Зарегистр. 27-09-2002 | Отправлено: 15:08 23-06-2007
    Maza Faka



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

    Код:
     
    if exist c:\test\test*.* (
     for /f "delims=" %%a in ('dir /b /s /o:-d /t:c c:\test\test*.*') do (
      if not defined file set file=%%a && set ext=%%~xa)
    ) else (echo File not exist & goto :eof)
     
    for %%a in (c:\test\test*.*) do if /i not %%a equ %file% del /f /q %%a
     ren "%file%" "new_name%ext%"
     

    Пути заменишь на нужные тебе.

    Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 16:08 23-06-2007 | Исправлено: Maza Faka, 17:53 23-06-2007
    Nagual



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

    Цитата:
    set FILE=c:\myfile.zip  
    for %%a in (%FILE%) do for /f "tokens=3" %%b in ('dir %FILE% ^| find /i "%%~nxa"') do set SIZE=%%b  
    echo Bytes: %SIZE%

    а можно ли здесь сделать так, чтобы входил не один файл, а группа файлов, разделенных пробелом, примерно так
    файл1 файлХ
    был вывод имен в левой колонке имя, а в правой размер с выравниванием по правому краю? и как быть если в имени файла есть пробел?

    Всего записей: 528 | Зарегистр. 06-01-2006 | Отправлено: 04:55 24-06-2007
    Maza Faka



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Nagual
    Надо просто, немного изменить код:

    Код:
     
    @Echo off
    color 0b
    set files="c:\test\file 1.txt" "c:\test\file 2.txt" "c:\test\file 3.txt"
    for %%a in (%files%) do for /f "tokens=3" %%b in (
    'dir %%a ^| find /i "%%~nxa"') do echo File: %%~a        Size: %%b
     

    Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 08:07 24-06-2007
    Nagual



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

    Всего записей: 528 | Зарегистр. 06-01-2006 | Отправлено: 14:53 24-06-2007
    euheny



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    А как бы это unicode заиметь ?  
     
    Уже так задолбали эти кодировки и шрифты

    Всего записей: 4052 | Зарегистр. 22-11-2006 | Отправлено: 03:41 25-06-2007
    ViSiToR



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

    Цитата:
    как бы это unicode заиметь ?  

    А подробнее можно описать, что и где нужно заменять?

    ----------
    ViSiToR a.k.a CreatoR
    CreatoR это не ник, CreatoR это стиль жизни!

    Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 04:50 25-06-2007
    vmix



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

    Цитата:
    Тебе нужно удалять по определенной дате, или, скажем, удалить все кроме 10 самых новых?

    Да, мне нужно 14 дней хранить файлы и удалять или на ленту..

    Всего записей: 162 | Зарегистр. 22-10-2002 | Отправлено: 10:03 25-06-2007
    Maza Faka



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    vmix
    Скачай утилиту forfiles.exe, скопируй в папку WINDOWS и запускай этот батник:

    Код:
     
    @echo off
    forfiles /p c:\temp /m *.* /d -14 /s /c "cmd /c del /q /f @file"
     

    Батник, удаляет созданные 14 и более дней назад файлы, в каталоге "c:\temp" и во всех вложенных каталогах.

    Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 10:20 25-06-2007 | Исправлено: Maza Faka, 10:20 25-06-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

    Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Задачи на bat-файлах 3
    vu1tur (11-09-2007 15:22): продолжаем в теме Задачи на bat-файлах 4


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

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

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru