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

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

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

KLASS (06-03-2018 00:44): Объединение тем по сценариям: Сценарии Windows
 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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

   

hErAx

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

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

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

  • Отправлено: 01:53 25-10-2015 | Исправлено: Paromshick, 21:51 18-12-2017
    Linksach



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

    Всего записей: 113 | Зарегистр. 11-07-2015 | Отправлено: 17:08 16-08-2016 | Исправлено: Linksach, 14:05 25-08-2016
    ipmanyak



    Platinum Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Linksach Помощи здесь тебе не будет. Твои действия попадают под статьи УК РФ, думай как следует, прежде чем это затевать.


    ----------
    В сортире лучше быть юзером, чем админом...

    Всего записей: 11718 | Зарегистр. 10-12-2003 | Отправлено: 07:53 17-08-2016
    Linksach



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

    Всего записей: 113 | Зарегистр. 11-07-2015 | Отправлено: 23:49 18-08-2016
    Linksach



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
     @echo off  
     set sim=0 1 2 3 4 5 6 7 8 9  
     for %%0 in (%sim%) do for %%1 in (%sim%) do for %%2 in (%sim%) do for %%3 in (%sim%) do for %%4 in (%sim%) do for %%5 in (%sim%) do for %%6 in (%sim%) do for %%7 in (%sim%)  do echo %%0%%1%%2%%3%%4%%5%%6%%7 >>  8жЁда.txt  
     
    Как в этом батнике задать паузу на остановку создания списка и затем когда надо вновь продолжить с того места где сделал паузу создания списка- продолжить выполнение создания списка

    Всего записей: 113 | Зарегистр. 11-07-2015 | Отправлено: 09:32 25-08-2016 | Исправлено: Linksach, 19:38 25-08-2016
    hErAux



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

    Всего записей: 210 | Зарегистр. 08-04-2016 | Отправлено: 09:59 25-08-2016
    Linksach



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    hErAux
    Break- у меня нет на ноуте такой кнопки.Я могу только остановить Ctr+C
    Но мне надо чтобы когда делаю паузу консольное окно закрылось а так оно не закрывается
    а спрашивает Завершить выполнение пакетного файла(Y)-да или (N)-нет
    Если завершаю -то процесс при вновь запущенном батнике начинается сначала
    Чтоб закрылось а потом вновь когда надо нажал на батник и продолжился процесс с того места где была пауза а не сначала опять

    Всего записей: 113 | Зарегистр. 11-07-2015 | Отправлено: 13:43 25-08-2016 | Исправлено: Linksach, 13:58 25-08-2016
    mat86



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Помогите с задачей, копирование файла с заменой в папку с разным именем на разных пк. Вот мой bat:

    Цитата:
    for %%a in (C D E F G H I J K L M N O P Q R S T U V W Y Z) do (
    for /f "delims=" %%c in ('dir /b /s /a:-d "%%a:\Recovery\Winre.wim" 2^>nul') do (
    set Path=%%~dpc
    )
    )
     
    for %%e in (k j i h g f e d z y w v u t s r q p o n m l c x ) do if exist "%%e:\Windows\SysWOW64\" copy boot64.wim "%Path%"\Winre.wim /Y&exit
    copy boot.wim "%Path%"\Winre.wim /Y&exit

     
    Все работает если bat лежит рядом с boot64.wim и boot.wim. Мне нужно чтобы bat можно было запустить из другого места. Boot64.wim и boot.wim у меня всегда лежат на флэшке в папке BWIM\ , а буква флэшки всегда разная. Как сделать чтобы boot64.wim, boot.wim, копировались не из текущей папки, а также происходил их поиск по принципу for %%i in (k j i h g f e d z y w v u t s r q p o n m l c x ) do if exist "%%i:\BWIM\boot64.wim" ?
     

    Всего записей: 438 | Зарегистр. 19-03-2009 | Отправлено: 00:07 31-08-2016 | Исправлено: mat86, 00:11 31-08-2016
    freeedik

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Доброго вечера прошу помощи в написании батника для копирования нескольких последних по времени созданных файлов из одного каталога в другой. Количество файлов измененных можно менять в настройках. Нашел у буржуинов на форуме батник работает, но копирует только последний измененный файл. Второй пример только 1 и последний, хотелось бы все таки несколько файлов.
    for /f "delims=" %%i in ('dir /b /a-d /od "C:\Source\*.bak"') do set "LatestModifiedFile=%%~i"
    copy "C:\Source\%LatestModifiedFile%" "C:\Source\New"
     
    Второй пример
    @echo off
    for /f "tokens=* delims=" %%# in (' dir /a:-d /o:-d /t:a  /b "C:\Source\*.bak"') do (
       if not defined last set "pre_last=%%~f#"
       set "last=%%~f#"
    )
    copy "%last%" "C:\Source\new"
    copy "%pre_last%" "C:\Source\new"

    Всего записей: 2 | Зарегистр. 30-08-2016 | Отправлено: 21:02 01-09-2016
    BorlandIMHO

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

    Код:
    for %%a in (C D E F G H I J K L M N O P Q R S T U V W Y Z) do (
    if exist "%%a:\Recovery\Winre.wim" set "DestPath=%%a:\Recovery"
    )
    for %%b in (C D E F G H I J K L M N O P Q R S T U V W Y Z) do (
    if exist "%%b:\BWIM\Winre.wim" set "SourcePath=%%b:\BWIM" ||exit
    )
    for %%e in (k j i h g f e d z y w v u t s r q p o n m l c x ) do if exist "%%e:\Windows\SysWOW64\" copy "%SourcePath%\boot64.wim" "%DestPath%"\Winre.wim /Y&exit
    copy "%SourcePath%boot.wim" "%DestPath%"\Winre.wim /Y&exit  

    Где-то так. Хотя, конечно, решение кривое во все стороны: не проверяется версия ОС (только разрядность), а использование winre от 7-ки на висте, 8-ке или 10-ке хорошей идеей не является. И опять же - нет никакой гарантии, что на машине единственная папка BWIM (что на флешке), если есть ещё одна на любом локальном диске - файлики могут запросто браться именно из неё... Не говоря уж про систему с несколькими виндами на нескольких разделах - там результат вообще непредсказуем...
     
    freeedik

    Код:
    set "SourcePath=C:\Source"
    set "DestPath=C:\Source\new"
    set /a counter=0
    set /a FilesToProcess=3
     
    pushd "%DestPath%"&&popd||exit
    pushd "%SourcePath%"||exit
     
    for /f  %%A in ('dir /b /a-d *.bak') do set /a counter+=1
     
    if %FilesToProcess% LEQ %counter% (
    rem файлов в исходной папке не больше, чем нужно обработать, обрабатываем все
    for /f  %%B in ('dir /b /a-d /od *.bak') do (
    rem делаем с файлами всё, что угодно
    rem например копируем из сурс в дест
    xcopy "%%B" "%DestPath%\"  
    )
    )else(
    set /a FilesToSkip=%counter%-%FilesToProcess%
    for /f  %%C in ('dir /b /a-d /od *.bak^|more +%FilesToSkip%') do (
    rem делаем с файлами всё, что угодно
    rem например копируем из сурс в дест
    xcopy "%%C" "%DestPath%\"  
    )
    )
    popd
     


    ----------
    http://www.imho.ws

    Всего записей: 2376 | Зарегистр. 12-10-2006 | Отправлено: 00:46 02-09-2016 | Исправлено: BorlandIMHO, 00:57 02-09-2016
    mat86



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    BorlandIMHO, спасибо огромное!, так не заработало, но помогла вот это строка:

    Цитата:
    for %%b in (C D E F G H I J K L M N O P Q R S T U V W Y Z) do (  
    if exist "%%b:\BWIM\" set "SourcePath=%%b:\BWIM" ||exit  
    )

    Цитата:
    решение кривое во все стороны: не проверяется версия ОС (только разрядность)
    Тот кто будет пользоваться должен понимать на какой версии ос запускается. Если таких знаний нет, значит данная функция  ему не нужна. Кроме того в меню можно подписать только для виндовс 7, второй батник только для win8 и т.д. если нужно. Будет так: этого будет достаточно, а кто не знает зачем это, тот и пользоваться не будет.

    Цитата:
    И опять же - нет никакой гарантии, что на машине единственная папка BWIM (что на флешке), если есть ещё одна на любом локальном диске - файлики могут запросто браться именно из неё...
    Ну дважды скопируется, все равно папкой с именем BWIM и файлом внутри boot.wim врядли кто то будет пользоваться другой, скорее всего это будет одна и та же папка на разных дисках.
    Цитата:
    Не говоря уж про систему с несколькими виндами на нескольких разделах - там результат вообще непредсказуем...  
    А вот это уже хуже, было бы хорошо организовать указание на каком диске лежит винда, я где то находил утилиты для cmd в которых выбирается путь. Или хотя бы проверка на версию. Но не знаю как это сделать

    Всего записей: 438 | Зарегистр. 19-03-2009 | Отправлено: 15:13 02-09-2016 | Исправлено: mat86, 15:17 02-09-2016
    king_stiven

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    freeedik
     
    Я так понял задание, по времени создания:
     
    set "n=5"
    for /f "delims=" %%i in ('dir /b /a-d /o-d  /t:a "C:\Source\*.bak"') do call :ert "%%i"
    exit
    :ert
    copy %1 "C:\Source\New"
    set /a "m+=1"
    if  "%n%"=="%m%" exit

    Всего записей: 2229 | Зарегистр. 17-07-2006 | Отправлено: 10:03 03-09-2016 | Исправлено: king_stiven, 09:25 06-09-2016
    AntoshAReal



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

    Всего записей: 305 | Зарегистр. 31-08-2005 | Отправлено: 19:59 03-09-2016 | Исправлено: AntoshAReal, 20:26 03-09-2016
    Linksach



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Есть текстовый документ(txt) такого вида:
     
    txt
     
     
    Как сделать автоматом с помощью батника чтобы стало в документе так:
     
    txt
     
    Т.е . как добавить пустую строку после каждой строки документа

    Всего записей: 113 | Зарегистр. 11-07-2015 | Отправлено: 07:34 05-09-2016 | Исправлено: Linksach, 00:21 08-09-2016
    BorlandIMHO

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Linksach
    Просто добавить пустую строку после каждой строки документа, я правильно понял?

    Код:
    @echo off
    copy /y nul ModifyedTextDocument.txt
    for /f "delims=" %%A in (TextDocument.txt) do (
    echo %%A>>ModifyedTextDocument.txt
    echo. >>ModifyedTextDocument.txt
    )


    ----------
    http://www.imho.ws

    Всего записей: 2376 | Зарегистр. 12-10-2006 | Отправлено: 08:41 05-09-2016
    king_stiven

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

    Цитата:
    echo %%A>>ModifyedTextDocument.txt  

    Всё -таки лучше так писать:
    >>ModifyedTextDocument.txt echo %%A
     
    а то попадётся строка вида:
    echo  Dragon NaturallySpeaking home edition 2>>ModifyedTextDocument.txt

    Всего записей: 2229 | Зарегистр. 17-07-2006 | Отправлено: 12:36 05-09-2016
    Linksach



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


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

     
     
    BorlandIMHO
    Да ,правильно поняли.Большое спасибо ,всё прекрасно работает!
     
    king_stiven
    Спасибо и вам!
     
    А как поступить в обратном направлении,т.е . поубирать пустые строки которые создались.Наверное через команду del.Только вот не знаю где её поставить

    Всего записей: 113 | Зарегистр. 11-07-2015 | Отправлено: 16:38 05-09-2016 | Исправлено: Linksach, 16:46 05-09-2016
    YuS_two



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

    Цитата:
    Наверное через команду del.

    Нет, надо просто также через цикл прогнать текст, он сам вырежет пустые строки:
     

    Код:
    for /f "delims=" %%i in (test.txt) do >>out.txt echo %%i

    а лучше так:

    Код:
    for /f "delims=" %%i in ('type "test.txt"') do >>out.txt echo %%i

    меньше проблем с кодировками будет...

    Всего записей: 399 | Зарегистр. 28-03-2016 | Отправлено: 18:02 05-09-2016 | Исправлено: YuS_two, 18:16 05-09-2016
    Linksach



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

    Всего записей: 113 | Зарегистр. 11-07-2015 | Отправлено: 06:43 06-09-2016
    YuS_two



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Linksach
    Если подставить правильное наименование входного файла и положить этот файл рядом с батником, то он не может не работать...

    Всего записей: 399 | Зарегистр. 28-03-2016 | Отправлено: 07:15 06-09-2016
    Linksach



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    YuS_two
     
     
     
    Не работает!лежит рядом с батником.Названия файла дал ваше-test.txt
    А выводит такое.Батник и файл текстовый в кодировке oem 866.Да хоть в какой кодировке всё равно выдаёт одно и то же
    Вот выходной файл out.txt:
     
    подушка
     
     
       
     
     
    Добавлено:
    Уважаемые знатоки форума!
    Есть ещё задачка посложнее будет наверное.
    Есть текстовый файл,(насчитывающий 12085 строк),со строками такого вида:
     для примера некоторые строки:
     
    Amarok 2.8.0                                         Мультимедиа/Аудио/6Проигрыватели                                          
     
    Amaze 10.0                                            Разработка/6 Авторские средства/Создание заставок    
     
    Amazing Slow Downer 3.5.4                     Мультимедиа/Аудио/3 Редакторы аудио  
     
    Amiga Explorer 2007                               Интернет/17 Удаленный доступ
     
    AnetTest 1.0                                           Сети/3 Тестирование
     
     
    Так вот задача состоит в том чтобы из названий программ из текстового файла создать папки с такими же названиями и  поссортировать(переместить) по прежде созданным на диске D папкам,которые имеют такой вид ,например: Мультимедиа/Аудио/6 Проигрыватели.Т.е первая папка это- Мультимедия ,в ней находится папка -Аудио,а в Аудио папка-6 Проигрыватели.Нужно в последнюю папку 6 Проигрыватели и закинуть созданную из названия программы например папку Amarok 2.8.0.Такую задачу надо сделать для всех 12085 названий программ текстового файла поссортировав по нужным папкам все эти названия в виде папок
    Пока всё!Заранее благодарю!

    Всего записей: 113 | Зарегистр. 11-07-2015 | Отправлено: 16:27 06-09-2016 | Исправлено: Linksach, 00:14 08-09-2016
       

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

    Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Задачи на bat-файлах 12
    KLASS (06-03-2018 00:44): Объединение тем по сценариям: Сценарии Windows


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

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

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru