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

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

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

vu1tur (25-01-2010 12:41): лимит страниц, продолжение: http://forum.ru-board.com/topic.cgi?forum=62&topic=19668  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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

   

vu1tur



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

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

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

  • Всего записей: 3690 | Зарегистр. 01-02-2003 | Отправлено: 11:37 26-05-2009 | Исправлено: TechnicsKuzya, 13:53 27-12-2009
    BVV63



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

    Цитата:
    А как реализовать что бы файлы не удалялись а переименовывались в другое расширение. Например *.docx, *.doc в *.bak

    REN <Раздел:>\<Путь>\*.docx *.bak
    REN <Раздел:>\<Путь>\*.doc *.bak
     
    Добавлено:
    PLAYYOB
    Так не сойдёт?
     
    COPY /Y D:\folder_X\folder_Y\*.* D:\folder_Z\folder_Y\*.*
    D:\folder_V\xyz.exe

    Всего записей: 3542 | Зарегистр. 17-08-2009 | Отправлено: 06:20 09-10-2009 | Исправлено: BVV63, 06:51 09-10-2009
    Rush

    Уже за тридцать...
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    PLAYYOB
    Из комстроки:

    Код:
    cmd /c xcopy "D:\folder_X\folder_Y" "D:\folder_Z\folder_Y" /i/e/c/q/k/h/y & start "" "D:\folder_V\ xyz.exe"
     
    Подробности:
    1. cmd - запуск cmd
    2. /c - завершить работу cmd после выполнения всех команд
    3. xcopy "D:\folder_X\folder_Y" "D:\folder_Z\folder_Y" - копирование
    4. /i - если результирующей папки нет, она создается
    5. /e - копирует все подкаталоги, включая пустые
    6. /c - игнорирует ошибки копирования
    7. /q - не выводит на экран сообщения команды xcopy
    8. /k - сохраняет атрибут «только для чтения» у файлов при копировании
    9. /h - копирует системные и скрытые файлы
    10. /y - автоматически перезаписывает существующие файлы
    11. & - разделитель команд (последовательное выполнение)
    12. start - запуск программы

    Всего записей: 3551 | Зарегистр. 20-11-2003 | Отправлено: 07:03 09-10-2009
    PLAYYOB



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

    Цитата:
    Так не сойдёт?  

    Я понятия не имею  
     
    Rush
    Выглядит отлично.
     
    Все сделал. Единственное перед xyz.exe не нужно пробела. Работает отлично. Большое спасибо.

    ----------
    English Room
    _
    Изучаем иностранный язык играя!

    Всего записей: 7216 | Зарегистр. 21-03-2007 | Отправлено: 12:01 09-10-2009 | Исправлено: PLAYYOB, 12:21 09-10-2009
    Rush

    Уже за тридцать...
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    PLAYYOB

    Цитата:
    Единственное перед xyz.exe не нужно пробела

    Как у тебя было написано, так и скопировал.

    Всего записей: 3551 | Зарегистр. 20-11-2003 | Отправлено: 12:36 09-10-2009
    wolf0425



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    toshanNEW
    чего-то типа такого сгодится?

    Код:
    for /f "tokens=1,*" %%a in (' route print ^| find /i "WAN (PPP/SLIP) Interface" ') do route add 192.168.90.0 mask 255.255.255.0 172.17.241.1 if %%a

    Всего записей: 2929 | Зарегистр. 25-04-2007 | Отправлено: 13:26 09-10-2009
    bredonosec



    Platinum Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    задача тривиальна - сбросить всем по списку файлик произвольный.  
    Батник, создающий список компов в группе, есть, список тож есть, так что, решение нарисовано такое:  
     
    echo
     
    set DomainUserUPN=user
    set DomainUserPassword=password
    for /f "tokens=*" %%i in (SK-AD.txt) do (
    IF NOT EXIST "%ALLUSERSPROFILE%\Desktop\TechPagalba.url" %SystemRoot%\System32\XCOPY.EXE "\\server\TechPagalba.url" "%ALLUSERSPROFILE%\Desktop\TechPagalba.url"
    ) goto return
    :return
     
    собсно, вопрос - как именно указывать расположение у меня, и как именно -что надо кидать на комп, в данный момент обозначенный как "i" ?

    ----------
    Вопрос: 'Что человек курит?' как правило возникает не когда ты слышишь, как он дышит, а когда видишь, что он пишет
    Пропеллер играет роль вентилятора, он останавливается -пилот потеет
    Аськи нету.

    Всего записей: 16269 | Зарегистр. 13-02-2003 | Отправлено: 16:15 09-10-2009
    ponand

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Подскажите почему не получается загрузить в переменную значение из файла с помощью такой строки
    set s=<1.txt

    Всего записей: 56 | Зарегистр. 14-07-2008 | Отправлено: 17:43 09-10-2009
    wolf0425



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    bredonosec у тебя там зря %ALLUSERSPROFILE% фигурирует - это папка на локальном диске компа, на котором батник запущен.
    Ну и у for.. do () - все %переменные% в скобках заменяются на значения один раз - когда cmd доходит строки с for.
    Если у тебя на всех компах система однообразно стоит на диске c: - копирование делается в одну строку, запущенную с админскими правами
    Код:
    for /f "tokens=*" %%i in (SK-AD.txt) do ping -n 1 %%i >nul && if exist "\\%%i\C$\Documents and Settings\All Users\nul" if not exist "\\%%i\C$\Documents and Settings\All Users\desktop\techpagalba.url" copy /b "\\server\share\techpagalba.url" "\\%%i\C$\Documents and Settings\All Users\desktop\techpagalba.url"
    (SK-AD.txt при этом без слешей).
     
    если системы стоят на разных буковках и заморочки с %ALLUSERSPROFILE% оправданы - устраиваешь для каждого компа запуск psexec.exe с командой на копирование - и там проще из psexec батник из той же шары запускать, чем считать сколько раз сдваивать % в его комстроке.

    Всего записей: 2929 | Зарегистр. 25-04-2007 | Отправлено: 17:59 09-10-2009
    NIKZZZZ



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

    Цитата:
    set s=<1.txt

     

    Код:
    Set /p s=<1.txt

     
     

    Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 18:26 09-10-2009 | Исправлено: NIKZZZZ, 18:26 09-10-2009
    mrCrowley

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    2 wolf0425
    Если позволите, еще пару вопросов:
     
    Первый скрипт, при небольших интервалах работы, почему-то не всегда срабатывает.. Создали test.txt - отработал батник - переименовали, еще раз то же самое - нормально, еще раз - тормоза - test.txt так и остается. Бывает на 3-й раз, на 4-й.. С чем это может быть связано?
    И как можно в коде скрипта (для обоих вариантов)  указать рабочий каталог, на тот случай, если батник выполняется не в нем..

    Всего записей: 164 | Зарегистр. 18-02-2005 | Отправлено: 20:22 09-10-2009 | Исправлено: mrCrowley, 20:23 09-10-2009
    wolf0425



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

    Цитата:
    как можно в коде скрипта (для обоих вариантов)  указать рабочий каталог,  
    например дописать в начало pushd d:\gdenado
     

    Цитата:
    С чем это может быть связано?  
    если у второго проблема - можно убрать  2>nul и посмотреть какими словами ругается. А у первого и так должно писаться.
    Может файл кто-то держит? антивирус проверяет или он индексируется...

    Всего записей: 2929 | Зарегистр. 25-04-2007 | Отправлено: 22:12 09-10-2009 | Исправлено: wolf0425, 22:13 09-10-2009
    wolf0425



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

    Всего записей: 2929 | Зарегистр. 25-04-2007 | Отправлено: 00:12 10-10-2009
    king_stiven

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    wolf0425
    sed -n -e :a -e "1,3!{P;N;D;};N;ba" 1.txt > 2.txt

    Всего записей: 2232 | Зарегистр. 17-07-2006 | Отправлено: 03:09 10-10-2009
    bredonosec



    Platinum Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    wolf0425
    а можно раскомментировать строку? Просто не совсем понимаю смысл некоторых моментов. Зачем пинговать, что за нул мы ищем, из какой шары достается (напр, если со своей машины хочу сбросить, и у меня она не серв домена), что означает знак &&
    Про pcexec пока не надо, но на будущее было б полезно знать, как...

    ----------
    Вопрос: 'Что человек курит?' как правило возникает не когда ты слышишь, как он дышит, а когда видишь, что он пишет
    Пропеллер играет роль вентилятора, он останавливается -пилот потеет
    Аськи нету.

    Всего записей: 16269 | Зарегистр. 13-02-2003 | Отправлено: 15:25 10-10-2009
    wolf0425



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

    Цитата:
    Зачем пинговать
    пинг занимает секунду, а если комп выключен - обращение в его шару подвешивает батник существенно надольше
    Цитата:
    что за нул мы ищем,
    проверяем что есть каталог C$\Documents and Settings\All Users\ на нужном компе. Нехорошо копировать если такого каталога нет
    Цитата:
    из какой шары достается
    \\server\share\
    Цитата:
    если со своей машины хочу сбросить, и у меня она не серв домена
    в варианте без psexec - можно копировать и с локального диска машины где батник запущен, источник я с твоего примера скопировал - только ты имя шары забыл у сервера указать, я дописал
    Цитата:
    что означает знак &&  
    если идущая перед ним команда не выдала ошибку - выполнить ту что после знака. Т.е. если комп пингуется - пробуем проверить наличие каталога и скопировать файл, не пингуется - сразу берем следующий по списку.
     
     

    Всего записей: 2929 | Зарегистр. 25-04-2007 | Отправлено: 16:58 10-10-2009 | Исправлено: wolf0425, 17:07 10-10-2009
    toshanNEW



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

    Цитата:
    чего-то типа такого сгодится?  
     
    Код:
    for /f "tokens=1,*" %%a in (' route print ^| find /i "WAN (PPP/SLIP) Interface" ') do route add 192.168.90.0 mask 255.255.255.0 172.17.241.1 if %%a
     

    спасибо. почему-то не с первого раза, но получилось.
     
    теперь ещё попробывал подключать само vpn-соединение из bat-ника, но что-то странное выходит.
    если делать так:

    Код:
    rasdial "имя" имя_пользователя пароль

    то маршрут по-умолчанию прописывается от vpn соединения, как будто в его настройках стоит галочка "use default gateway on remote network", хотя в её там нету.
    а если запускать вручную из сетевых подключений то всё нормально - маршрутизация не сбивается...

    Всего записей: 67 | Зарегистр. 20-09-2005 | Отправлено: 18:52 10-10-2009
    bredonosec



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

    Цитата:
    в варианте без psexec - можно копировать и с локального диска машины где батник запущен,  

    то есть, в моем варианте пойдет что-нить типа

    Цитата:
    for /f "tokens=*" %%i in (SK-AD.txt) do ping -n 1 %%i >nul && if exist "\\%%i\C$\Documents and Settings\All Users\nul" if not exist "\\%%i\C$\Documents and Settings\All Users\desktop\techpagalba.url" copy /b "C:\Documents and Settings\All Users\desktop\techpagalba.url" "\\%%i\C$\Documents and Settings\All Users\desktop\techpagalba.url"  

    ?  
    вроде если без переменной локальный путь кинуть, не должно подменить?  

    Цитата:
    если идущая перед ним команда не выдала ошибку - выполнить ту что после знака.  

    спасибо, в понедельник опробую

    ----------
    Вопрос: 'Что человек курит?' как правило возникает не когда ты слышишь, как он дышит, а когда видишь, что он пишет
    Пропеллер играет роль вентилятора, он останавливается -пилот потеет
    Аськи нету.

    Всего записей: 16269 | Зарегистр. 13-02-2003 | Отправлено: 19:10 10-10-2009
    ponand

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Подскажите можно ли с помощью findstr получить в переменную полный путь к файлу с найденной подстрокой поиска и если да то как?  
    получить в переменную полную строку с найденной подстрокой поиска из файлаи если да то как?
    И еще один вопросик как узнать имя предпоследнего каталога (в примере  приведенном ниже это \файлы за апрель\) написанного кириллицей с пробелами ?
    Примерно из такого пути C:\файлы за 2009г\файлы за апрель\12 апреля\11-30.txt

    Всего записей: 56 | Зарегистр. 14-07-2008 | Отправлено: 11:27 11-10-2009
    mrCrowley

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    2 wolf0425
     
    Со вторым скриптом проблем нет - работает как часы, а первый так себя и ведет: на 3-й, 4-раз - перестает переименовывать в интервале срабатывания 10-30 секунд. Антивирус отключал - не то! Ну да ладно - попробую два раза в сутки (как собственно и надо в конечном итоге), думаю нормально будет.
    Респектище огромный, очень признателен..

    Всего записей: 164 | Зарегистр. 18-02-2005 | Отправлено: 11:59 11-10-2009
    NIKZZZZ



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

    Цитата:
    И еще один вопросик как узнать имя предпоследнего каталога


    Код:
    Set Name=C:\файлы за 2009г\файлы за апрель\12 апреля\11-30.txt  
    FOR /F "usebackq delims=" %%i IN ('%name%') DO Set Name=%%~dpi
    FOR /F "usebackq delims=" %%i IN ('%name:~0,-1%') DO Set Name=%%~dpi
    FOR /F "usebackq delims=" %%i IN ('%name:~0,-1%') DO Set Name=%%~nxi
    Echo %name%

     

    Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 12:33 11-10-2009 | Исправлено: NIKZZZZ, 12:34 11-10-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 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117

    Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Задачи на bat-файлах 7
    vu1tur (25-01-2010 12:41): лимит страниц, продолжение: http://forum.ru-board.com/topic.cgi?forum=62&topic=19668


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

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

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru