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

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

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

vu1tur (29-07-2011 12:47): Задачи на bat-файлах 11
 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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

   

vu1tur



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

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

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

  • Всего записей: 3690 | Зарегистр. 01-02-2003 | Отправлено: 11:53 09-01-2011 | Исправлено: mazafakermazafaka, 11:22 04-06-2011
    res2001



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

    Всего записей: 2580 | Зарегистр. 11-04-2003 | Отправлено: 16:41 06-04-2011
    mp3exchanger



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    king_stiven, это не поможет
     
    Добавлено:
    res2001, да сейчас заработало, спасибо. А можно ещё чтобы в конце пустой строки не создавалось? И почему-то по прежнему выдаётся сообщение "Не удаётся найти C:\03.txt".

    Всего записей: 518 | Зарегистр. 24-02-2003 | Отправлено: 16:47 06-04-2011
    res2001



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

    Цитата:
    Не удаётся найти C:\03.txt

    Обнови еще раз код.

    Цитата:
    А можно ещё чтобы в конце пустой строки не создавалось?  

    Видимо в 2.txt в конце есть пустая строка, она и лепится в итоговый файл.

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



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    res2001, нет, в конце 2.txt пустых строк нет... но это не критично. А вот то, что при переносе удаляются начальные пробелы, вот это критично. Можно что-нибудь сделать, чтобы все строки были один в один?

    Всего записей: 518 | Зарегистр. 24-02-2003 | Отправлено: 17:22 06-04-2011
    res2001



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

    Всего записей: 2580 | Зарегистр. 11-04-2003 | Отправлено: 17:39 06-04-2011
    mp3exchanger



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    res2001, всё супер! Спасибо большое.

    Всего записей: 518 | Зарегистр. 24-02-2003 | Отправлено: 17:54 06-04-2011
    5peciali5t



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    нужен совет бывалых:
    задача:
    при консольной распаковке до административной точки дистрибутива skype
    имею папку с файлами и папками
    Application Data
    Program Files
    Skype.msi
    и тут же папку {E633D396-5188-4E9D-8F6B-BFB8BF3467E8}
    код в названии которой меняется от версии к версии приложения
    эту папку надо удалить. можно ли зацепиться за символ { в ее имени
    или удалить любую папку длина имени которой >= 16 символов?
    как грамотно прописать с учетом универсальности на будущие версии?
    rd /s /q {*
     
    уж незнаю каким тыком вывел что работает но работает
     
    for /f "delims= " %%i in ('dir /b "%cd%" ') do rd /s /q "%cd%\%%i"  
     
    все равно буду признателен если кто поправит (если это необходимо, например,
    потому что в конкретной ситуации в каких-либо вариациях может неправильно
    отработать)

    Всего записей: 1472 | Зарегистр. 17-07-2009 | Отправлено: 23:32 07-04-2011 | Исправлено: 5peciali5t, 03:24 08-04-2011
    01MDM



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

    Код:
     
    for /f %%i in (' dir /b /ad ^| findstr "{.*}" ') do rd /s /q "%%i"
     



    ----------
    Вопросы в личке останутся без ответа

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 07:16 08-04-2011
    stoun



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Доброе время суток. Имеется вот такой скрипт для передачи файла на удаленный фтп сервер:
    -------
    @echo on  
    echo user ada 23jg> ftp.dat  
    echo bin>> ftp.dat  
    echo put e:\sysinfo.tib>> ftp.dat  
    echo quit>> ftp.dat  
    ftp -n -s:ftp.dat ip
    del ftp.dat  
    -------
    хотел сделать запуск этого скрипта через планировщик, указал учетку, дату время, решил проверить работу задания, в итоге получил следующее:
    -------------
    E:\>echo user ada 23jg  1>ftp.dat
     
    E:\>echo bin  1>>ftp.dat
     
    E:\>echo put e:\sysinfo.tib  1>>ftp.dat
     
    E:\>echo quit  1>>ftp.dat
     
    E:\>ftp -n -s:ftp.dat ip
     
    E:\>echo user ada 23jg  1>ftp.dat
     
    E:\>echo bin  1>>ftp.dat
     
    E:\>echo put e:\sysinfo.tib  1>>ftp.dat
     
    E:\>echo quit  1>>ftp.dat
     
    E:\>ftp -n -s:ftp.dat ip  
    ------------------
    и это все до бесконечности...как можно решить эту проблему подскажите пожалуйста
     
    P.S. Заранее благодарен

    Всего записей: 451 | Зарегистр. 15-10-2003 | Отправлено: 09:19 08-04-2011
    res2001



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    stoun
    Батник твой часом не ftp.bat зовется?

    Всего записей: 2580 | Зарегистр. 11-04-2003 | Отправлено: 09:40 08-04-2011
    Jay90

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Всем доброго времени суток.
    Делаю батник, который:
    1) ищет файл на пк и записывает в переменную $Path путь до файла.

    Код:
    DIR /b/s/a-d C:\1.txt
    Where /r D:\ 1.txt  
    for /f "tokens=*" %%a in ('Dir /b/s/a-d C:\hosts') Do Set $Path=%%a

    2) теперь нужно в нескольких файлах по очереди найти текст и заменить его на найденный путь, хранимый в переменной $Path. У заменяемых файлов известно название, но не известен путь.
     
    Пожалуйста, помогите насчет 2 пункта

    Всего записей: 9 | Зарегистр. 08-04-2011 | Отправлено: 11:24 08-04-2011 | Исправлено: Jay90, 11:55 08-04-2011
    res2001



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Jay90
    Where /r D:\ 1.txt  - что это?

    Цитата:
    2) теперь нужно в нескольких файлах по очереди найти текст и заменить его на найденный путь, хранимый в переменной $Path. У заменяемых файлов известно название, но не известен путь.  

    В соседней ветке как раз обсуждается похожий случай с заменой в файле.

    Всего записей: 2580 | Зарегистр. 11-04-2003 | Отправлено: 12:06 08-04-2011
    Jay90

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

    Цитата:
    Where /r D:\ 1.txt  - что это?  

    я хотел сделать поиск по обоим дискам) чтобы не только на С, но и на D искал. Можно как-нибудь по другому?
     
    Сделал так:

    Код:
    @echo off
    SETLOCAL EnableDelayedExpansion
    DIR /b/s/a-d C:\1.fdb
    for /f "tokens=*" %%a in ('Dir /b/s/a-d C:\hosts') Do Set $Path=%%a
     
    1>1.txt (  
    echo  "%Path%",  
    )
    echo\&pause
     

    получилось что в файл 1.txt вернулся не один путь к базе,а набор адресов причем вообще не нужных:

    Код:
    "C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files\TortoiseSVN\bin;C:\Program Files\CVSNT\",  

     
    хотя в командной строке отображался верный адрес по ходу выполнения батника.

    Всего записей: 9 | Зарегистр. 08-04-2011 | Отправлено: 12:15 08-04-2011 | Исправлено: Jay90, 13:09 08-04-2011
    res2001



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

    Цитата:
    получилось что в файл 1.txt вернулся не один путь к базе,а набор адресов причем вообще не нужных:

    Ты присваиваешь переменной "$Path", а в файл выводишь "Path" - это 2 разные переменные.
    Кстати переманная Path системная, если ее поменяешь как-нить не корректно, то может что-нить перестать работать
     
    Поиск файла hosts на дисках C и D:

    Код:
    for /f "tokens=*" %%a in ('Dir /b/s/a-d C:\hosts d:\hosts') Do Set "Path2=!Path2!;%%~dpa"
    Set "Path2=%Path2:~1%
    echo %Path2%

    Всего записей: 2580 | Зарегистр. 11-04-2003 | Отправлено: 13:00 08-04-2011
    5peciali5t



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

    Всего записей: 1472 | Зарегистр. 17-07-2009 | Отправлено: 13:07 08-04-2011
    Jay90

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

    Код:
    @echo off
    SETLOCAL EnableDelayedExpansion
    DIR /b/s/a-d C:\1.fdb  
    for /f "tokens=*" %%a in ('Dir /b/s/a-d C:\hosts d:\hosts') Do Set "Path2=!Path2!;%%~dpa"  
    Set "Path2=%Path2:~1%  
    echo %Path2%
     
    1>1.txt (  
    echo  "%Path2%",  
    )
    echo\&pause
     

     
    в файл попало в итоге вот что:

    Код:
     "C:\Windows\System32\drivers\etc\;C:\Windows\winsxs\x86_microsoft-windows-w..nfrastructure-other_31bf3856ad364e35_6.1.7600.16385_none_045b589158ae90da\ ",  
     

     
    а в cmd:

    Код:
    C:\Program Files\db\1.fdb
    Файл не найден
    C:\Windows\System32\drivers\etc\;C:\Windows\winsxs\x86_microsoft-windows-w..nfrastructure-other_31bf
    3856ad364e35_6.1.7600.16385_none_045b589158ae90da\
    Для продолжения нажмите любую клавишу . . .
     

    Всего записей: 9 | Зарегистр. 08-04-2011 | Отправлено: 13:23 08-04-2011 | Исправлено: Jay90, 13:29 08-04-2011
    res2001



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Jay90
    Дык какой тебе файл то искать надо?
    Я взял из твоего же кода файл hosts.
    Если не оно, то замени на нужное имя в дире.

    Всего записей: 2580 | Зарегистр. 11-04-2003 | Отправлено: 13:35 08-04-2011
    Jay90

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

    Цитата:
    Дык какой тебе файл то искать надо?  
    Я взял из твоего же кода файл hosts.  
    Если не оно, то замени на нужное имя в дире.

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

    Код:
    1>1.txt (  
    echo  "%Path2%",  )  

    При выводе в файл 1.txt результата поиска... как сделать так, чтобы путь к файлу был прописан? То есть я аналогично найду этот файл по алгоритму описанному выше, запишу путь к нему в переменную какую-то, и выведу ее. Сейчас же стоит жестко путь - в файл который рядом с батником лежит в одной папке.

    Всего записей: 9 | Зарегистр. 08-04-2011 | Отправлено: 13:47 08-04-2011 | Исправлено: Jay90, 13:54 08-04-2011
    res2001



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Jay90
    Пусть путь к файлу в переменно outdir:
     
    1>%outdir%1.txt echo  "%Path2%"

    Всего записей: 2580 | Зарегистр. 11-04-2003 | Отправлено: 14:16 08-04-2011
    Jay90

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    хм почему то не видит путь из переменной outdir... Пишет: Системе не удается найти указанный путь.
    кладу в 123456.txt путь до базы:

    Код:
    @echo off
    SETLOCAL EnableDelayedExpansion
     
    for /f "tokens=*" %%a in ('Dir /b/s/a-d C:\1.fdb  D:\1.fdb') Do Set "Path2=!Path2!;%%~dpa"  
    Set "Path2=%Path2:~1%  
    echo %Path2%
     
    for /f "tokens=*" %%a in ('Dir /b/s/a-d C:\123456.txt D:\123456.txt') Do Set "outdir=!outdir!;%%~dpa"  
    Set "outdir=%outdir:~1%  
    echo %outdir%
     
    1>%outdir%123456.txt
    echo %Path2%  
     
    echo\&pause


    Всего записей: 9 | Зарегистр. 08-04-2011 | Отправлено: 15:00 08-04-2011 | Исправлено: Jay90, 15:05 08-04-2011
       

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

    Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Задачи на bat-файлах 10
    vu1tur (29-07-2011 12:47): Задачи на bat-файлах 11


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

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

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru