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

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



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

    Цитата:
    А зачем такая сложная конструкция для выделения одного имени файла без расширения из передаваемого полного пути?

    Без этой конструкции, переменная %cd% вернет тебе совершенно другую директорию

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

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 22:07 23-02-2009
    19w85



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

    Цитата:
    Без этой конструкции, переменная %cd% вернет тебе совершенно другую директорию

    Ага, я это заметил почти сразу, когда начал батник тестировать
    Все равно, так короче и понятнее, чем у king_stiven

    Код:
    cd /d "%~dp1"
    %~n1
     

     
     
    Добавлено:
    Я вот хочу спросить, можно ли в данном случае обойтись без создания временного файла, чтобы присвоить значение переменной:

    Код:
    for %%f in (%cd%) do echo %%~nf>%Temp%\x.tmp
    set /p x=<%Temp%\x.tmp

    Всего записей: 623 | Зарегистр. 20-12-2005 | Отправлено: 22:43 23-02-2009 | Исправлено: 19w85, 22:45 23-02-2009
    Elroir



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

    Код:
     
    for %%f in (%cd%) do set "x=%%~nf"
     


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

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 03:32 24-02-2009
    Maza_Faka



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

    Цитата:
    Но сам ren теперь не работает:

    Попробуй так:

    Код:
     
    @Echo Off
     
    for /R %%J in (.) do echo %%J | find /i "LPT3">Nul && Call :Founded "%%J"
    GoTo :EOF
     
    :Founded
    Set "DirName=%~n1"
    Set "Path=%~dp1"
     
    CD /D "%Path%"
    Ren "%DirName%" AUTORUN.INF
    GoTo :EOF
     

    Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 07:33 24-02-2009
    Ilyansk

    Junior Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    king_stiven
    спасибо за предложение. Действительно XXCopy показывает прогресс бар, и вообще, неплохая утилита. Есть небольшая "заковыка", не позволяющая мне ее применить - бесплатная версия полнофункциональна только при  копировании файлов ВНУТРИ компьютера. Для "общения" с сетевыми дисками требуется дополнительное нажатие клавиши, которое и продолжит ее работу (если ничего не нажать, через 2 мин. утилита прекращает работу). Купите, говорит, PRO версию, и никаких вопросов...  
    Исходя из этого, повторю свой вопрос: мой батник копирует файл. Как визуализировать процесс его копирования (~100Mb и размер будет расти), что бы пользователь не заподозрил зависание машины и не начал "дергаться".  
    Есть ли rundll решение, или вызов WINAPI из под VBS или JavaScript? На "худой конец", пусть палочка вертится в углу экрана, , как когда-то в начале 90-х

    Всего записей: 70 | Зарегистр. 27-07-2006 | Отправлено: 07:47 24-02-2009 | Исправлено: Ilyansk, 07:50 24-02-2009
    satysaty



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Доброе время суток, помогите пожалуйста, задача запустить файл из расшаренной директории с правами определенной учетки:
     
    \\directory\kidokiller.exe user:administrator password:123123123
     
     
    Как то так... помогите плиз составить как положено.
    Заранее спасибо

    Всего записей: 56 | Зарегистр. 14-11-2006 | Отправлено: 08:48 24-02-2009
    19w85



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Elroir
    Спасибо!
    Столько времени ломал голову в попытках избавиться от промежуточного файла, но знаний так и не хватило это сделать

    Всего записей: 623 | Зарегистр. 20-12-2005 | Отправлено: 09:08 24-02-2009
    igor_andreev

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Ilyansk
    Ну robocopy возьми. Бесплатная. У нее процентный индикатор копирования, циферки меняются.

    Всего записей: 1705 | Зарегистр. 08-12-2004 | Отправлено: 09:11 24-02-2009
    Maza_Faka



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

    Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 09:36 24-02-2009
    Serhiy123



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

    Код:
     
    for /R %%J in (.) do echo %%J | find /i "LPT3">Nul && Call :Founded "%%J"
     
    :Founded
    Set Path=%~dp1
    Ren %Path% AUTORUN.INF
     

     
    Очень изящно получилось с Set Path=%~dp1
    Но переименовывать не хочет по той же причине (The process cannot access the file because it is being used by another process). Думаю что все дело в Call, ведь как пишут в документации, Call это "Вызов одного пакетного файла из другого без завершения выполнения первого файла." - получается что именно команда for "держит" каталог, который необходимо переименовать.
     
    Думаю что имеет смысл остановиться пока на старом варианте с 1.txt, а там может что-то еще придумается.  Спасибо большое за помощь - из ваших вариантов я узнал для себя несколько новых приемов!
     

    Всего записей: 126 | Зарегистр. 05-09-2002 | Отправлено: 13:25 24-02-2009
    magistrfet



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    такой вот вопрос, из первого (инсталлятора) bat файла, где запрашивается диск (с,d), на котором есть каталог куда все копировать,
    echo Please enter your disk letter where soft has been installed:
    set /p "ans=Enter your letter: "
     
    echo processing...moving...
    move /y .\Firmware\*.* "%ans%:\Program Files\Firmware" > nul
    md "%ans%:\Program Files\files" > nul
    move /y .\Firmware\files\*.* "%ans%:\Program Files\Firmware\files" > nul
     
    echo Done...starting menu...
    start cmd /c "%ans%:\Program Files\Firmware\updater.bat"
    exit
     
    в конце запрашиваю запуск второго (исполняемого с меню и выбором)
     
    файл вызывается, но после выбора в меню не выполняются команды (пути до файлов относительные),а если запустить напрямую второй файл, то все нормально.
    Что не так?

    Всего записей: 728 | Зарегистр. 27-09-2001 | Отправлено: 15:01 24-02-2009
    king_stiven

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

    Всего записей: 2229 | Зарегистр. 17-07-2006 | Отправлено: 16:12 24-02-2009
    Maza_Faka



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

    Цитата:
    именно команда for "держит" каталог

    Ничего она не "держит", я проверял.  Возможно дело в нестандартном названии каталога? Кстати, как ты его создаёшь, у меня не получается.

    Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 16:54 24-02-2009
    satysaty



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Maza_Faka
    Вопрос конечно может глупый но как мне прописать в батнике что необходимо... извините я в теме недавно =(
     

    Всего записей: 56 | Зарегистр. 14-11-2006 | Отправлено: 16:58 24-02-2009
    yurkesha



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    упс - ошибся...
     
    Добавлено: - чтоб мессага не пропадала :)
    magistrfet
    перед запуском последнего скрипта перейди в его каталог через CD /D "путь по которому переходим"

    Всего записей: 2741 | Зарегистр. 15-12-2003 | Отправлено: 16:59 24-02-2009 | Исправлено: yurkesha, 17:18 24-02-2009
    magistrfet



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

    Всего записей: 728 | Зарегистр. 27-09-2001 | Отправлено: 17:11 24-02-2009
    Serhiy123



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Maza_Faka
     
    Я проверял с помощью Unlocker - при выполнении этого кода Unlocker показывает что каталог , содержащий искомый подкаталог LPT3 (с моем случае D:\AUTORUN.INF_) занят cmd.exe  
     
    Каталог с "неправильным именем" создается следующей конструкцией:  

    Код:
     
    mkdir "\\?\D:\AUTORUN.INF\LPT3"
     

    Подробнее о самом скрипте можно глянуть у меня здесь - mechanicuss.livejournal.com/195192.html
     
    Но думаю что дело не в "неправильном" имени (проверял с вполне безобидным именем каталога TEST вместо LPT3), а все же в команде Call.  
     

    Всего записей: 126 | Зарегистр. 05-09-2002 | Отправлено: 17:35 24-02-2009 | Исправлено: Serhiy123, 17:39 24-02-2009
    king_stiven

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    magistrfet
    И всё таки запусти батник, если в начале батника есть команда
    @echo off
    убери её, чтоб батник не закрылся вставь в конец команду pause
    откроется чёрное окошечко, пойдёт батник, потом правой мышкой "выделить всё" потом на заголовке батника "копировать" и присылай сюда всё или ту часть , где вероятней проблемы есть. Поверь, сэкономишь себе и другим пару суток. Или жди гуру типа Elroir или Игорь Андреев. Посмотри вариант yurkesha выше.
     
     
    Добавлено:
    Serhiy123

    Код:
    @Echo Off
    for /f "tokens=*" %%J in ('dir /b /s /a:d') do (
        set NAMEOFDIR=%%J
        echo %%J | find /i "LPT3">Nul && Call :Founded
    )
    GoTo :EOF  
    :Founded
    ren %NAMEOFDIR:~3,-5% AUTORUN.INF

     
    ещё вариант

    Код:
    @Echo Off
    for /f "tokens=*" %%J in ('dir /b /s /a:d') do (  
        if "%%~nJ"=="LPT3" (
            set NAMEOFDIR=%%J
            Call :Founded
        )
    )
    GoTo :EOF
    :Founded
    ren %NAMEOFDIR:~3,-5% AUTORUN.INF

    Всего записей: 2229 | Зарегистр. 17-07-2006 | Отправлено: 17:51 24-02-2009 | Исправлено: king_stiven, 19:30 24-02-2009
    K_AHTOH



    Junior Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Будте добры подскажите как сделать вывод сообщения  

    Код:
    Echo %1

    %1 - это полный путь и имя файла
    Мне неоходимо чтобы расширения файла выводимое на экран поменять.
    к примеру:
    в %1 содержится C:\test\test.log
    а выводилось на экран C:\test\test.txt
     
    При этом никаких действий с самим файлом производить не надо. Только вывод на экран.
     

    Всего записей: 155 | Зарегистр. 20-10-2006 | Отправлено: 20:58 24-02-2009
    Serhiy123



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    king_stiven - супер! Спасибо большое - работают оба варианта.
     
    Я только заменил Call на безусловный переход Goto, чтобы цикл не докручивался до конца после нахождения LPT3. Окончательный вариант выглядит так:  

    Код:
     
    for /f "tokens=*" %%J in ('dir /b /s /a:d') do (
        set NAMEOFDIR=%%J
        echo %%J | find /i "LPT3">Nul && Goto :Founded
    )
     
    :Founded
    ren %NAMEOFDIR:~3,-5% AUTORUN.INF
     
     
     
    Спасибо еще раз! Вроде бы и просто, но сам бы не догадался такую конструкцию выстроить - опыт в этом деле еще не тот.

    Всего записей: 126 | Зарегистр. 05-09-2002 | Отправлено: 21:35 24-02-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