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

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

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

    Цитата:
    Но линк на книгу все-таки надоть переправить на такой. Чтоб скачать можно было без ограничений...  

    ну ты уже поправил

    Всего записей: 1072 | Зарегистр. 07-09-2009 | Отправлено: 11:34 20-06-2010
    ComradG



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    mugil_cephalus
    Да не пропадал я никуда: малость здоровье пошатнулось, но ничего серьезного. Ну и занят был написанием ls для одного из форумчан. Правда, пока работа над ней так и не закончена. Относительно ярлыков через INF - это интересно, но я так и не понял (прости за тугодумство) за какой хвост нужно тянуть файло, чтобы оно сказало "му"?

    Всего записей: 2041 | Зарегистр. 05-07-2008 | Отправлено: 13:34 20-06-2010
    yurkesha



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ComradG
    Ну вначале создать inf-файл - например my_inf.inf
    А потом нечто вроде:
    Код:
    rundll32.exe setupapi.dll, InstallHinfSection DefaultInstall 132 my_inf.inf

     
    Добавлено:
    Опять же - подробно инфу можно почерпнуть из книжки на которую есть ссылка в конце материала...

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

    Всего записей: 2757 | Зарегистр. 15-12-2003 | Отправлено: 13:46 20-06-2010
    ComradG



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    yurkesha
    Друг, у меня ссылка виснет, поэтому и переспросил что да как. А так бы я книжку бы качнул. Все равно спасибо большое, очень порадовали. А то я от идеи создания ярлыков и вовсе отказался.
     
    Добавлено:
    Кстати, чуть не забыл, тут http://www.oszone.net/6946/ кажется тоже что-то было про ярлыки.
     
    Добавлено:
    И здесь http://www.oszone.net/3827

    Всего записей: 2041 | Зарегистр. 05-07-2008 | Отправлено: 14:03 20-06-2010
    boy999



    BANNED
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    А мне помочь, с Multi Password Recovery, никто не хочет!?
     
     
     

    Всего записей: 2030 | Зарегистр. 19-05-2008 | Отправлено: 17:07 20-06-2010
    res2001



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    boy999
    напиши autorun.inf, положи его в корень флэшки, в нем пропиши запуск твоей софтины.
    Тока тут все зависит от настроек винды - можно отключить автозапуск, тогда только руками запускать.
     
    Добавлено:
    lorents

    Цитата:
    а как сделать переход на обработку, мне ведь для этого нужен параметр для обработки?
    я просто не догоняю.  

    актуально еще?

    Всего записей: 2580 | Зарегистр. 11-04-2003 | Отправлено: 17:42 20-06-2010
    lorents



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

    ----------
    Image Catalyst - оптимизация изображений без потери качества

    Всего записей: 3299 | Зарегистр. 30-12-2007 | Отправлено: 18:16 20-06-2010 | Исправлено: lorents, 18:17 20-06-2010
    res2001



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    lorents
    Как-то так получается.
     
    Код не отлаживал, т.к. всех утилит используемых нет, просто добавил метки и поправил переходы.

    Всего записей: 2580 | Зарегистр. 11-04-2003 | Отправлено: 20:44 20-06-2010 | Исправлено: res2001, 20:48 20-06-2010
    lorents



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

    ----------
    Image Catalyst - оптимизация изображений без потери качества

    Всего записей: 3299 | Зарегистр. 30-12-2007 | Отправлено: 21:14 20-06-2010
    ComradG



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    У меня тут собралась коллекция консольных архиваторов и я подумал вот о чем: их же вполне можно вызывать (они прописаны в путях по умолчанию) в пакетном режиме. Например так:
    arc.cmd
    Код:
    @echo off
    setlocal
    if "%1"=="" (
      goto:message
    ) else if "%1"=="/c" (
      goto:cabfile
    ) else if "%1"=="/z" (
      goto:zipfile
    ) else if "%1"=="/?" (
      goto:message
    )
     
    :cabfile
    if "%2"=="" echo Incorrect command line.
    if "%4"=="@*" (
      1>nul cabarc -r -m %2 N %3 %4
    ) else (
      1>nul cabarc -r -m %2 N %3 %4 %5
    )
    goto:testing
     
    :zipfile
    if "%2"=="" echo Incorrect command line.
    1>nul 7za a -r -mx%2 %3 %4 %5
    goto:testing
     
    :testing
    if %errorlevel%==1 (
      echo Some parameters are incorrect.
    ) else (
      echo Completed succesfully.
    )
    goto:eof
     
    :message
    echo Usage: arc ^<type^> level ^<dest_file^> ^<files^> [@list]
    echo Type:
    echo   /c - create a cabinet archive
    echo   /z - create 7z or zip archive
    echo.
    echo Level:
    echo   For CAB files are [LZX:{15..21}^|MSZIP^|NONE]
    echo   For 7z and ZIP are {5..9}
    echo.
    echo Examples:
    echo   arc /c LZX:21 d:\backup\files.cab @list.lst
    echo   arc /z 5 c:\restore.zip d:\source
    echo Note that during compression there is using recurse
    echo method by default.
    goto:eof
     
    endlocal
    exit /b

    Это правда всего лишь набросок, мне хотелось бы что б вы подкинули идей, если, конечно, для вас это не обременительно.

    Всего записей: 2041 | Зарегистр. 05-07-2008 | Отправлено: 10:44 21-06-2010
    wolf0425



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

    Цитата:
    мне хотелось бы что б вы подкинули идей,  
    внимательно отнесись к идее поменять свою манеру писать блоки if, у тебя с ними вечные потери последнего esle у блока else if
     

    Код:
    @echo off
    setlocal
    if "%2"=="" goto :message
    if /i "%1"=="/c" goto:cabfile
    if /i "%1"=="/z" goto:zipfile
     
    :message
    echo Usage: arc ^<type^> level ^<dest_file^> ^<files^> [@list]
    echo Type:
    echo   /c - create a cabinet archive
    echo   /z - create 7z or zip archive
    echo.
    echo Level:
    echo   For CAB files are [LZX:{15..21}^|MSZIP^|NONE]
    echo   For 7z and ZIP are {5..9}
    echo.
    echo Examples:
    echo   arc /c LZX:21 d:\backup\files.cab @list.lst
    echo   arc /z 5 c:\restore.zip d:\source
    echo Note that during compression there is using recurse
    echo method by default.
    goto:eof
     
    :cabfile
    if "%4"=="@*" (
      1>nul cabarc -r -m %2 N %3 %4
    ) else (
      1>nul cabarc -r -m %2 N %3 %4 %5
    )
    goto:testing
     
    :zipfile
    1>nul 7za a -r -mx%2 %3 %4 %5
    goto:testing
     
    :testing
    if %errorlevel%==1 (
      echo Some parameters are incorrect.
    ) else (
      echo Completed succesfully.
    )
    endlocal
    goto:eof
     


    Всего записей: 2929 | Зарегистр. 25-04-2007 | Отправлено: 11:50 21-06-2010 | Исправлено: wolf0425, 11:53 21-06-2010
    ComradG



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

    Всего записей: 2041 | Зарегистр. 05-07-2008 | Отправлено: 12:00 21-06-2010
    wolf0425



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

    Цитата:
    это я так привык писать баты.
    я заметил
    просто ты напрочь не видишь ошибку в том что пишешь
    никакой логики в том, что твой вариант на arc.cmd /x 123 456 начнет паковать каб - не видать.

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

    Всего записей: 2929 | Зарегистр. 25-04-2007 | Отправлено: 12:22 21-06-2010 | Исправлено: wolf0425, 12:37 21-06-2010
    lorents



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

    Код:
    call :compare "%%~dpni_png1.png" "%%~dpni_png2.png" "%%~fi" "%%~nxi"
    :compare
    if %~z1 LSS %~z2 (
        DEL /F /Q %2
        DEL /F /Q %3
        REN %1 %4
    ) else (
        DEL /F /Q %1
        DEL /F /Q %3
        REN %2 %4
    )
    goto:eof

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

    ----------
    Image Catalyst - оптимизация изображений без потери качества

    Всего записей: 3299 | Зарегистр. 30-12-2007 | Отправлено: 12:29 21-06-2010
    wolf0425



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

    Цитата:
    Почему это не происходит?
    а где код в котором определяется %%i ?
    когда тебе код с этим куском выдавали - в нем всё работало.
     
    кстати, между строками call :compare  
    и :compare  - вставь что-нибудь, типа goto :eof

    Всего записей: 2929 | Зарегистр. 25-04-2007 | Отправлено: 12:32 21-06-2010 | Исправлено: wolf0425, 12:48 21-06-2010
    lorents



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

    Цитата:
    а где код в котором определяется %%i ?  


    Код:
    for /f "delims=" %%i in ('dir /b /s /a-d Images\*.png') do (
    )


    Цитата:
    когда тебе код с этим куском выдавали - в нем всё работало.  

    сейчас тестировал не работает
     
    вот сам batch

    ----------
    Image Catalyst - оптимизация изображений без потери качества

    Всего записей: 3299 | Зарегистр. 30-12-2007 | Отправлено: 13:19 21-06-2010 | Исправлено: lorents, 13:20 21-06-2010
    king_stiven

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

    Цитата:
    Цитата:когда тебе код с этим куском выдавали - в нем всё работало.  
     
    сейчас тестировал не работает  



    Всего записей: 2232 | Зарегистр. 17-07-2006 | Отправлено: 13:32 21-06-2010
    res2001



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    lorents
    добавь после :compare echo %%1 %%2
    и посмотри что выводит.
    Сдается мне, что у тебя параметры не правильно передаются.
     
    Добавлено:
    нет, похоже правильно, поторопился.

    Всего записей: 2580 | Зарегистр. 11-04-2003 | Отправлено: 14:56 21-06-2010 | Исправлено: res2001, 15:01 21-06-2010
    lorents



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    И еще подскажите, пожалуйста, в двух моментах
     
    как можно перебрать значения параметра /f (от 0 до 5, все значения целые), и при этом чтобы в названии получившегося файла писалось значение параметра

    Код:
    for /f "delims=" %%i in ('dir /b /s /a-d Images\*.png') do (
    "%~dp0Docs\pngout.exe" /f0 "%%~fi" "%%~dpni_0.png."
    )

    можно просто написать пять строчек с разными параметрами, но хотелось бы сделать более правильно.
     
    У меня есть папка, и в ней лежат три папки с одинаковыми названиями, но с разным размером, Как можно получить текстовой файл (таблицу с четырьмя колонками), где в первой колонке написано имя файла с расширением, а в трех остальных колонках размер файлов

    ----------
    Image Catalyst - оптимизация изображений без потери качества

    Всего записей: 3299 | Зарегистр. 30-12-2007 | Отправлено: 15:24 21-06-2010 | Исправлено: lorents, 15:25 21-06-2010
    wolf0425



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

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

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

    если ты файлы в папках хотел посравнивать то как-то так:
    Код:
    for %%a in ( dir1\* )do call :print %%a
    pause&exit
     
    :print
    0>nul set /p="%%~nx1"  
    call :size "dir1\%%~nx1"
    call :size "dir2\%%~nx1"
    call :size "dir3\%%~nx1"
    echo.
    exit /b
    :size
    if .%~z1 neq . (0>nul set /p="    %%~z1") else (0>nul set /p="    -")
    exit /b
    в предпоследней строке - после /p=" в обоих случаях не пробел(ы) а табуляция

    Всего записей: 2929 | Зарегистр. 25-04-2007 | Отправлено: 15:32 21-06-2010 | Исправлено: wolf0425, 15:47 21-06-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