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

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

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

vu1tur (04-09-2010 17:46): http://forum.ru-board.com/topic.cgi?forum=62&topic=21297  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199

   

vu1tur



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

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

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

  • Всего записей: 3690 | Зарегистр. 01-02-2003 | Отправлено: 12:40 25-01-2010 | Исправлено: bomzzz, 13:37 20-08-2010
    king_stiven

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    rdenk1
    В шапке есть ещё варианты решения.

    Всего записей: 2229 | Зарегистр. 17-07-2006 | Отправлено: 09:12 27-03-2010
    TAVulator



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

    Цитата:
    это на for вложенности меньше чем заявка запускать чего-то абтрактное (dir я же там вписывал для примера) в каждом из подкаталогов каталога списка.  
    Да и сравнение на текущую дату у тебя перегружено.  
     
     

    Код:
    @echo off  
    for /f "delims=" %%a in ('type list.txt') do (  
        echo "%%~fa"  
        for /f "delims=" %%i in ('dir /b/s/a-d "%%~fa"') do (  
            echo %%~ti | 1>nul findstr /b /c:"%date%" && 1>>new_list.txt echo.%%~fi  
            )  
        )  
    )  

     
    всех делов  практически в одну строку  

     
    да, это намного меньше моего, и работает быстрее
    но этот скрипт кроме нужных файлов еще некоторые прибавляет. По какому принципу так и не понял - есть несколько файлов за январь, например, он какой-то из них добавляет к списку, хотя по дате март. Где-то из 10000 файлов один вот так добавит. Не понимаю почему.
     
    И не мог бы ты "разжевать" эту строку:
    echo %%~ti | 1>nul findstr /b /c:"%date%" && 1>>new_list.txt echo.%%~fi
    совсем не понял как она работает.
     
    И если ситуация будет такая, что нужно будет составить список файлов не с сегодняшней датой, а с вчерашней (т.е. на день назад) как это будет выглядеть?

    Всего записей: 12 | Зарегистр. 03-08-2008 | Отправлено: 09:26 27-03-2010
    kumarp

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

    Код:
     
    curl -q --output %dstdir%shots.list -u %FTP_LOGIN_PASSWORD% --list-only %FTP_DOMAIN%%FTP_DIR_UPLOAD%
    :: перед выполнением следующей команды мне уже нужно знать количество файлов
    for /f "tokens=*" %%i in (%dstdir%shots.list) do call :GET_FILE %%i
     

     

    Всего записей: 15 | Зарегистр. 29-06-2008 | Отправлено: 11:23 27-03-2010 | Исправлено: kumarp, 11:46 27-03-2010
    01MDM



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    kumarp
    А какой формат в shots.list? Если одна строчка один файл, то просто добавь подсчет:

    Код:
     
    :: в данной строке мне уже нужно знать количество файлов
    for /f "tokens=*" %%i in (%dstdir%shots.list) do (
         set /a count+=1
         call :GET_FILE %%i
    )
    echo %count%  
     

    Или вынеси count в метку :GET_FILE

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

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    01MDM
    спасибо, но нужно знать раньше, до выполнения следующей команды.
    я не точно дал коммент в коде (подправил)
     
    Да, а формат простой - 1 строка = 1 имя файла

    Всего записей: 15 | Зарегистр. 29-06-2008 | Отправлено: 11:46 27-03-2010 | Исправлено: kumarp, 11:47 27-03-2010
    lorents



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Объясните, пожалуйста, где ошибка

    Код:
    @echo off
    tasklist | find /i "process.exe">nul
    if %errorlevel%==1 process.exe  

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

    Цитата:
    "tasklist" не является внутренней или внешней
    командой, исполняемой программой или пакетным файлом.

    Всего записей: 3297 | Зарегистр. 30-12-2007 | Отправлено: 11:47 27-03-2010
    01MDM



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

    Цитата:
    но нужно знать раньше, до выполнения следующей команды.  

    Тогда просто сосчитай их:

    Код:
     
    for /f %%i in (%dstdir%shots.list) do set /a count+=1
    echo %count%  
    for /f "tokens=*" %%i in (%dstdir%shots.list) do call :GET_FILE %%i  
     

     
     
     
    Добавлено:
    lorents
    Какая версия виндоус? Если XP Home, то в ней нет tasklist и много еще чего.

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

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

    Цитата:
    Тогда просто сосчитай их

    Спасибо, пока так и сделаю. Смущает лишь сильная зависимость времени исполнения от количества выбранных файлов.

    Всего записей: 15 | Зарегистр. 29-06-2008 | Отправлено: 11:57 27-03-2010
    wolf0425



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    TAVulator
    Цитата:
    И не мог бы ты "разжевать" эту строку:
    echo %%~ti | 1>nul findstr /b /c:"%date%" && 1>>new_list.txt echo.%%~fi
    совсем не понял как она работает.  

    имеем текущую строку в %%i, трактуем её как имя файла
    echo %%~ti |
    печатаем дату/время текущего файла с перенаправлением на ввод следующей команды
    1>nul findstr /b /c:"%date%"  
    ищем, во входящем  потоке (не указано имя файла), cтроки, имеющие в начале строки (/b) текст (/c 27.03.2010 (так сегодня раскрывается %date%), всё найденное никуда не печатаем (1>nul)
    && 1>>new_list.txt echo.%%~fi
    в случае успешного завершения поиска в предыдущей команде (&&) в хвост файла (1>>new_list.txt) печатаем полное текущее имя (echo.%%~fi)
     

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

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 11:57 27-03-2010 | Исправлено: wolf0425, 12:34 27-03-2010
    lorents



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

    Цитата:
    Какая версия виндоус? Если XP Home, то в ней нет tasklist и много еще чего.  

    как раз XP Home, да не повезло мне

    Всего записей: 3297 | Зарегистр. 30-12-2007 | Отправлено: 12:20 27-03-2010
    wolf0425



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

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

    Код:
    for /f %%a in ('find /c /v "" ^< "%dstdir%shots.list"') do echo %%a && set count=%%a

     

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 12:20 27-03-2010 | Исправлено: wolf0425, 12:25 27-03-2010
    01MDM



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

    Цитата:
    как раз XP Home, да не повезло мне

    Я, когда пользовался XP Home, многие утилиты просто перенс с XP Pro. Все работало. Так же можно воспользоваться сторонними программами. Например PSTools
     

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 12:28 27-03-2010
    kumarp

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

    Всего записей: 15 | Зарегистр. 29-06-2008 | Отправлено: 12:30 27-03-2010 | Исправлено: kumarp, 14:30 27-03-2010
    rdenk1

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Вот такая строка почему-то не работает:
    For /R %%i not (In (0.7z, 1.7z, %variable%.7z)) Do (ren %%i 2.7z)
    Как это правильнее записать?

    Всего записей: 117 | Зарегистр. 27-04-2009 | Отправлено: 12:38 27-03-2010
    01MDM



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

    Цитата:
    Вот такая строка почему-то не работает

    А что ты хотел изначально? Что должна делать данная строка?  

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 12:43 27-03-2010
    rdenk1

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Файл, имя которого не совпадает ни с одной строкой - его надо переименовать

    Всего записей: 117 | Зарегистр. 27-04-2009 | Отправлено: 13:13 27-03-2010
    01MDM



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

    Код:
     
    for /f "tokens=*" %%i in ('dir /b /s /a-d') do (
       echo %%~nxi | 1>nul findstr /v /i "0.7z 1.7z %variable%.7z" && ren "%%i" 2.7z
    )  
     

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

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

    Всего записей: 117 | Зарегистр. 27-04-2009 | Отправлено: 13:30 27-03-2010 | Исправлено: rdenk1, 13:38 27-03-2010
    AlexanderBV

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

    Цитата:
    условия, которые быстро и понятно сформулировать не получается.  

    Как смог, учимся на своих ошибках.
     

    Всего записей: 80 | Зарегистр. 28-10-2003 | Отправлено: 13:45 27-03-2010
    rdenk1

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    01MDM
    А какие ключи надо прописать, чтоб он трогал только *.7z файлы и не заходил в подпапки?

    Всего записей: 117 | Зарегистр. 27-04-2009 | Отправлено: 16:00 27-03-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 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199

    Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Задачи на bat-файлах 8
    vu1tur (04-09-2010 17:46): http://forum.ru-board.com/topic.cgi?forum=62&topic=21297


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

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

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru