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

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

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

vu1tur (26-05-2009 11:39): часть 7 — http://forum.ru-board.com/topic.cgi?forum=62&topic=17154#1  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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

   

vu1tur



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

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

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





    http://forum.ru-board.com/topic.cgi?forum=62&topic=17154

  • Всего записей: 3690 | Зарегистр. 01-02-2003 | Отправлено: 23:07 04-11-2008 | Исправлено: vu1tur, 11:38 26-05-2009
    batniki



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Помогите нужно сменить .txt2 расширение всех файлов  на .txt
     
    for /f "tokens=*" %%c in ('dir *.txt2 /b /s /a:-d') do ren "%%c" ....

    Всего записей: 50 | Зарегистр. 11-02-2008 | Отправлено: 19:15 21-03-2009
    01MDM



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

    Код:
     
    @echo off
    for /f "tokens=*" %%i in ('dir /b /s *.txt2') do ren "%%~fi" "%%~ni.txt"
     


    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 19:23 21-03-2009
    MIHMIH007



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    скажите пожалуйста можно ли сделать батник следующего вида:
    К примеру есть файл app.exe он запускается с параметром 1
    Нпаример:
    start app.exe 1
     
    Я хочу поменять расширение на dat получится app.dat но тогда естественно он не запустится как exe... Можно ли сделать батник который бы понимал что app.dat это app.exe ?

    Всего записей: 743 | Зарегистр. 05-12-2006 | Отправлено: 12:02 22-03-2009
    batniki



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    01MDM, спасибо!
     
    Еще вопрос:
    Как пройтись по всем папкам найти .txt файлы, посчитать количество строк всех этих файлов, кроме строк начинающихся на # и //

    Всего записей: 50 | Зарегистр. 11-02-2008 | Отправлено: 00:39 23-03-2009
    Serhiy123



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Помогите, плз, вот с каким вопросом.
    Почему вот такая конструкция работает (выдает количество свободного места на текущем диске):

    Код:
     
    for /f "tokens=3" %%J in ('dir %~d0') do set free_space=%%J
    echo %free_space%
     

     
    а будучи заключенной в оператор IF перестает работать:  

    Код:
     
    set /p question="%~d0\>"
    if %question%==3 (  
    for /f "tokens=3" %%J in ('dir %~d0') do set free_space=%%J
    echo %free_space%
    )
     

    Всего записей: 126 | Зарегистр. 05-09-2002 | Отправлено: 03:35 23-03-2009 | Исправлено: Serhiy123, 03:38 23-03-2009
    GGS



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

    Всего записей: 1039 | Зарегистр. 25-03-2002 | Отправлено: 09:25 23-03-2009 | Исправлено: GGS, 09:42 23-03-2009
    Elroir



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

    Цитата:
    Почему вот такая конструкция работает ..., а будучи заключенной в оператор IF перестает работать:  

     

    Цитата:
    В обычном случае, чтобы узнать значение переменной окружения, надо воспользоваться конструкцией %переменная%. Однако, если значение переменной меняется внутри цикла и читается там же, то для корректной работы батника, нужно использовать команду setlocal enabledelayedexpansion и вместо символа "%", использовать символ "!". Иначе, значение переменной в цикле будет всегда одним и тем же - таким, каким было до входа в цикл.  
     
     
    Это справедливо и для for-a, и для скобок if-a.

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

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 10:09 23-03-2009 | Исправлено: Elroir, 10:15 23-03-2009
    Destrifer

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

    Всего записей: 14 | Зарегистр. 18-09-2006 | Отправлено: 10:38 23-03-2009
    king_stiven

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

    Всего записей: 2229 | Зарегистр. 17-07-2006 | Отправлено: 11:08 23-03-2009
    Destrifer

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    king_stiven
    Ок.
    Имеем стандартный синтаксис программы:
    jpegtran -copy none -optimize 1.jpg 2.jpg
    Нужно чтобы программа работала для всех помещенных в папку jpg.
    jpegtran -copy none -optimize *.jpg *.jpg не работает.
    p.s. упомянутый выше вариант решения, увы, остался дома

    Всего записей: 14 | Зарегистр. 18-09-2006 | Отправлено: 11:50 23-03-2009 | Исправлено: Destrifer, 11:53 23-03-2009
    Serhiy123



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

    Цитата:
    нужно использовать команду setlocal enabledelayedexpansion и вместо символа "%", использовать символ "!".

     
    Спасибо вам огромное - заработало!!!
    А я вчера день продолбался - не мог понять в чем дело. Ошибок нету, синтаксис в порядке, а фрагмент не работал. Вот уж век живи - век учись

    Всего записей: 126 | Зарегистр. 05-09-2002 | Отправлено: 12:07 23-03-2009 | Исправлено: Serhiy123, 12:09 23-03-2009
    king_stiven

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

    Код:
    cd /d сюда полный путь к папке
    for %%c in (*.jpg) do jpegtran -copy none -optimize %%c %%~nc_optimiz_.jpg

    либо

    Код:
    cd /d сюда полный путь к папке
    for %%c in (*.jpg) do jpegtran -copy none -optimize "%%c" "%%~nc_optimiz_.jpg"
     

     
    если не получится скопируй что в комстроке пишется

    Всего записей: 2229 | Зарегистр. 17-07-2006 | Отправлено: 12:56 23-03-2009
    Destrifer

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    king_stiven
    Спасибо.
    Вот что пишет cmd:
     
    Microsoft Windows XP [Версия 5.1.2600]
    (С) Корпорация Майкрософт, 1985-2001.
     
    C:\Documents and Settings\pavel>cd /d C:\Documents and Settings\pavel\Рабочий ст
    ол\test
     
    C:\Documents and Settings\pavel\Рабочий стол\test>for %%c in (*.jpg) do jpegtran
     -copy none -optimize %%c %%~nc_optimiz_.jpg
    Непредвиденное появление: %%c.
     
    C:\Documents and Settings\pavel\Рабочий стол\test>for %%c in (*.jpg) do jpegtran
     -copy none -optimize "%%c" "%%~nc_optimiz_.jpg"
    Непредвиденное появление: %%c.

    Всего записей: 14 | Зарегистр. 18-09-2006 | Отправлено: 13:44 23-03-2009
    king_stiven

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

    Код:
    cd /d сюда полный путь к папке
    for %%c in (*.jpg) do call :wer "%%~nxc" "%%~nc_optimiz_.jpg"
    goto :eof
    :wer
    jpegtran -copy none -optimize "%~1" "%~2"

     
    Добавлено:
    если ты запускаешь из комстроки а не из батника нужно все %% поменять на % это касается и первого варианта

    Всего записей: 2229 | Зарегистр. 17-07-2006 | Отправлено: 14:08 23-03-2009 | Исправлено: king_stiven, 14:14 23-03-2009
    Destrifer

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    king_stiven
    Спасибо большое!
     
    А как сделать чтоб он просто подменял старый файл новым?
    Пишу:
    cd /d сюда полный путь к папке  
    for %%c in (*.jpg) do call :wer "%%~nxc" "%%~nc.jpg"  
    goto :eof  
    :wer  
    jpegtran -copy none -optimize "%~1" "%~2"
     
    Не работает .

    Всего записей: 14 | Зарегистр. 18-09-2006 | Отправлено: 14:28 23-03-2009
    MAD_est



    Junior Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    доброго времени суток. накатал что то подобное, этот текст считает количество файлов в папке и проверяет, если больше необходимого количества, удаляет самый ранний и упаковывает заново папку. Эта беда работала, потом началась выдавать ошибка "Непредвиденное появление >.", после шага "set /a count+=1" в чем косяк?!?! заранее спасибо...
     

    Код:
    @echo off
    for /f "tokens=*" %%i in ('dir /b /s /a-d "D:\1\*.zip"') do (
    set /a count+=1
    )
    if %count% >= 2 (for /f "tokens=*" %%c in ('dir /b /s /a-d "D:\1\*.zip"') do (del D:\1\%%~nc.zip
        goto :pack)
    ) else (
    goto :pack)
    goto :eof
    :pack
    "C:\Program Files\WinRAR\Rar.exe" a -agYYYYMMDD "D:\1\Trade_" "D:\1c_Bases\Torg"

    Всего записей: 33 | Зарегистр. 17-04-2007 | Отправлено: 15:15 23-03-2009 | Исправлено: MAD_est, 15:20 23-03-2009
    king_stiven

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    if %count% >= 2
    поменяй на
    if %count% GEQ 2
     
      EQL - равно
        NEQ - не равно
        LSS - меньше
        LEQ - меньше или равно
        GTR - больше
        GEQ - больше или равно

    Всего записей: 2229 | Зарегистр. 17-07-2006 | Отправлено: 15:33 23-03-2009
    strat

    Full Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    писал батник по просьбе, может кому еще пригодится, сам знаю что неоптимальный но все же, а может кто подскажет и лучшее решение.
     
    задача была проверить систему - xp/vista/7, если виста/7 то проверить uac в виде двух ключей ConsentPromptBehaviorAdmin и EnableLUA, если равны 0 то значит uac выключен и можно продолжить работу,  если не 0 то вывести сообщение о нужном выключении uac
     

    Код:
    echo off  
    reg query HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System /v ConsentPromptBehaviorAdmin  
    if errorlevel 1 goto xp  
     
    reg query HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System /v EnableLUA  
    if errorlevel 1 goto xp  
    rem Тут если ключа не существует то значит это не Vista/7 и можно переходить к продолжению запуска  
     
     
    for /f "tokens=3" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System" /v "ConsentPromptBehaviorAdmin"') do set cons=%%a  
     
    if %cons% == 0x0 goto enlua else goto dis  
     
    :enlua  
    for /f "tokens=3" %%b in ('reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System" /v "EnableLUA"') do set lua=%%b  
     
    if %lua%==0x0 goto xp else goto dis  
     
     
    is  
     
    rem Тут выдаем сообщение о том что надо выключить UAC  
     
    echo disable UAC  
    pause  
     
     
    :xp  
    rem Тут продолжаем установку т.к. либо xp либо uac выключен  
    echo xp  
    pause

    Всего записей: 459 | Зарегистр. 27-12-2005 | Отправлено: 15:59 23-03-2009
    klimusu



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Подскажите что поменялось в win 2008..
     
    в  2003 скрипт работает
     
    for /f "tokens=1,2" %%u in ('date /t') do set d=%%v
    for /f "tokens=1" %%u in ('time /t') do set t=%%u
    if "%t:~1,1%"==":" set t=0%t%
    rem set timestr=%d:~6,4%%d:~3,2%%d:~0,2%%t:~0,2%%t:~3,2%
    set datestr=%d:~6,4%-%d:~0,2%-%d:~3,2%
     
    echo %datestr%
     
    выводит дату в формате год-месяц-день

    Всего записей: 931 | Зарегистр. 23-01-2006 | Отправлено: 17:22 23-03-2009
    ameelien



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    помогите написать грамотно батник, а то упарился.. тупить 2 дня.
     
    Задача:
    В папке c:\FOLDER\
    есть подпапки \test1@fold\     \test2@fold\   \test3@fold\   \test4@fold\
    Есть в системе юзеры test1, test2, test3, test4
    Суть = Назначение ПРАВ на папки тому, чей логин виднеется в имени папки.
     
    Я что смог сделать:
     
    Это выводит все папки в директории
    for /f "usebackq" %%s in (`dir /B /A:D`) do ( echo %%s )
     
    Это вариант если папки = имя пользователя
    for /f "usebackq" %%i in (`dir /B /A:D`) do (echo Y|CACLS C:\FOLDER\%%i /T /G %%i:F /C)  
     
     
    Это решение по извлечению из имени папки - имени пользователя,
    тоесть на вводе test1@fold => на выводе получим то что до собачки test1
     
    for /f "usebackq tokens=1 delims=@" %%d in (`dir /B /A:D`) do (echo %%d )
     
     
     
    Вот куку нехватает это всё в кучу собрать...((((

    Всего записей: 135 | Зарегистр. 13-03-2008 | Отправлено: 21:19 23-03-2009
       

    Страницы: 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

    Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Задачи на bat-файлах 6
    vu1tur (26-05-2009 11:39): часть 7 — http://forum.ru-board.com/topic.cgi?forum=62&topic=17154#1


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

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

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru