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

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



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

    Цитата:
    dir /a:d /b c:\windows\* >dirs.txt

     
    Спасибо. А я тщетно пытался переделать "пример с реестром"...
     
    А как сделать, чтобы название папки записалось в файле в определенном месте (строка 5, позиция 10)?
    Как сделать, чтобы название папки записалось в файле вместо определенного слова?

    Код:
    dir /a:d /b "c:\windows\*_32" >dirs.txt


    Всего записей: 503 | Зарегистр. 25-02-2008 | Отправлено: 14:40 13-06-2011 | Исправлено: fire4x, 14:59 13-06-2011
    vlary



    Platinum Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    fire4x
    Цитата:
    А как сделать, чтобы название папки записалось в файле в определенном месте (строка 5, позиция 10)?  
    Как сделать, чтобы название папки записалось в файле вместо определенного слова?  
     
    А никак. Если бы подобные вещи были возможны, народ бы забросил языки  программирования, и все писал бы на бат-файлах.
    Так что если хочется странного, пиши программу на  c++/c#/vb и делай там с файлами что душе угодно...
     


    ----------
    Заслуженный SCOтовод, почетный SUNтехник и любитель Кошек

    Всего записей: 17282 | Зарегистр. 13-06-2007 | Отправлено: 15:07 13-06-2011
    res2001



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

    Цитата:
    А никак. Если бы подобные вещи были возможны, народ бы забросил языки  программирования, и все писал бы на бат-файлах.  

    Ну почему же никак, на это спец.утилиты есть - sedом запросто.
    fire4x

    Цитата:
    Как сделать, чтобы название папки записалось в файле вместо определенного слова?  

    Используй утилиту sed, найдешь ее в шапке, примеры использования ищи в этой ветке, открой "версию для печати и поищи.

    Цитата:
    А как сделать, чтобы название папки записалось в файле в определенном месте (строка 5, позиция 10)?  

    Можно и это, но "технологичнее" - "вместо определенного слова".

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



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

    Цитата:
    Так что если хочется странного, пиши программу на  c++/c#/vb и делай там с файлами что душе угодно...  
     

    Увы, языками программирования не владею.

    Цитата:
    Цитата:А как сделать, чтобы название папки записалось в файле в определенном месте (строка 5, позиция 10)?  
    Как сделать, чтобы название папки записалось в файле вместо определенного слова?  
     
     
    А никак. Если бы подобные вещи были возможны, народ бы забросил языки  программирования, и все писал бы на бат-файлах.

    А возможно ли с помощью бат-файла объединить допустим 3 текстовых файла в один следующим образом:
    1.txt (содержимое файла: 123)
    2.txt (содержимое файла: 456)
    3.txt (содержимое файла: 789)
    чтобы получить файл
    4.txt с содержимым: 123456789

    Всего записей: 503 | Зарегистр. 25-02-2008 | Отправлено: 15:30 13-06-2011
    Elroir



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

    Цитата:
    А возможно ли с помощью бат-файла объединить допустим 3 текстовых файла в один следующим образом

    Возможно, но при определенном условии - в каждом из файлов 1.txt, 2.txt, 3.txt только одна строка. В любом случае, берется только первая строка из каждого файла.
     

    Код:
     
    @echo off
    setlocal
    del /f/q 4.txt 2>nul
    for %%a in (1.txt 2.txt 3.txt) do (
    call :add "%%a"
    )
    goto :EOF
    :add
    set /p fileText=<%~1
    set /p=%fileText%<nul>>4.txt
     


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

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 18:04 13-06-2011 | Исправлено: Elroir, 18:04 13-06-2011
    fire4x



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

    Цитата:
    Код:  
    @echo off  
    setlocal  
    del /f/q 4.txt 2>nul  
    for %%a in (1.txt 2.txt 3.txt) do (  
    call :add "%%a"  
    )  
    goto :EOF  
    :add  
    set /p fileText=<%~1  
    set /p=%fileText%<nul>>4.txt

    Данный код не хочет учитывать пустые строки (т.е. если файл с пустой строкой, то она не учитывается).
     
    Как сделать, чтобы для каждого из 3-х файлов можно было-бы выбирать добавлять текст в эту-же строку или начинать с новой?
    А возможно ли преобразовать код таким образом, чтобы для каждого из 3-х файлов можно было-бы выбирать номер строки, которую нужно добавлять в файл?
     
    P.S. "del /f/q 4.txt 2>nul" - что делает "2>nul" ?

    Всего записей: 503 | Зарегистр. 25-02-2008 | Отправлено: 19:54 13-06-2011 | Исправлено: fire4x, 20:45 13-06-2011
    01MDM



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

    Цитата:
    Как сделать, чтобы для каждого из 3-х файлов можно было-бы выбирать добавлять текст в эту-же строку или начинать с новой?
    А возможно ли преобразовать код таким образом, чтобы для каждого из 3-х файлов можно было-бы выбирать номер строки, которую нужно добавлять в файл?

    Все это можно. Но надо ставить вопрос конкретно. Ты с каждым ответом добавляешь новые вопросы. Сначала подумай что ты хочешь.
     


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

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 20:46 13-06-2011
    fire4x



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

    Цитата:
    Цитата:Как сделать, чтобы для каждого из 3-х файлов можно было-бы выбирать добавлять текст в эту-же строку или начинать с новой?  
    А возможно ли преобразовать код таким образом, чтобы для каждого из 3-х файлов можно было-бы выбирать номер строки, которую нужно добавлять в файл?  
     
     
    Все это можно. Но надо ставить вопрос конкретно.

     
    Чтобы впоследствии не переспрашивать многократно о каждой вариации, мне интересны оба вышеуказанных варианта.
     

    Цитата:
    Ты с каждым ответом добавляешь новые вопросы. Сначала подумай что ты хочешь.

    При решении новых задач зачастую возникают и новые вопросы (пока моих умений хватает только на самое простенькое). Ну и в процессе испытания предложенных решений порой возникают непредвиденные нестыковки при практическом применении - сначала пытаюсь решить их своими усилиями.
     

    Цитата:
    Цитата:Код:  
    @echo off  
    setlocal  
    del /f/q 4.txt 2>nul  
    for %%a in (1.txt 2.txt 3.txt) do (  
    call :add "%%a"  
    )  
    goto :EOF  
    :add  
    set /p fileText=<%~1  
    set /p=%fileText%<nul>>4.txt

    Как в данном примере обойтись без "goto :EOF"? После дописывания строк в конец добавляется только первый файл.

    Всего записей: 503 | Зарегистр. 25-02-2008 | Отправлено: 22:40 13-06-2011 | Исправлено: fire4x, 00:38 14-06-2011
    lexikon4ik



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    здрасте ^^
    такая ситуация: есть скрипт php который чекает порт бесконечно
    как запустить батником его чтобы если вдруг он прервался по какой либо причине ( убился или еще что нибудь ) то запускался снова батником?
    запускаю пока что через cmd командой  
    php.exe D:\blabla\script.php
     

    Код:
    @echo off
    cls  
    :loop  
    c:\php5\php.exe -f "c:\script.php"
    goto loop

     вот такую феню сделал но после закрытия окна оно снова не запускается

    Всего записей: 40 | Зарегистр. 27-09-2008 | Отправлено: 23:36 13-06-2011 | Исправлено: lexikon4ik, 01:09 14-06-2011
    Elroir



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

    Цитата:
    Как в данном примере обойтись без "goto :EOF"? После дописывания строк в конец добавляется только первый файл.

    Каждый раз долго пытаюсь понять вопрос...
    Покажи, что именно происходит - что дано и что получается.
     

    Цитата:
    мне интересны оба вышеуказанных варианта

    Опять же - дай четкую задачу - дано: X; хочу получить: Y  
    01MDM прав - можно сделать почти все, но универсального кода не существует.

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

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 01:55 14-06-2011
    fire4x



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

    Цитата:
    Каждый раз долго пытаюсь понять вопрос...  
     

    Сори, не всегда получается описать то, к чему нужно прийти с первого раза.

    Цитата:
    Опять же - дай четкую задачу - дано: X; хочу получить: Y


    Цитата:
    Объединение 3х текстовых файлов в один следующим образом:  
    1.txt (содержимое файла: 123)  
    2.txt (содержимое файла: 456)  
    3.txt (содержимое файла: 789)  
    чтобы получить файл  
    4.txt с содержимым: 123456789

     

    Код:
     
    @echo off
    setlocal
    del /f/q 4.txt 2>nul
    for %%a in (1.txt 2.txt 3.txt) do (
    call :add "%%a"
    )
    goto :EOF
    :add
    set /p fileText=<%~1
    set /p=%fileText%<nul>>4.txt
    del 1.txt
    del 2.txt
    del 3.txt
     

    Окно не закрывается.
    Код не срабатывает.

    Всего записей: 503 | Зарегистр. 25-02-2008 | Отправлено: 04:57 14-06-2011 | Исправлено: fire4x, 05:39 14-06-2011
    01MDM



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

    Цитата:
    Окно не закрывается.
    Код не срабатывает.

    А так:

    Код:
     
    .....
    :add
    set /p fileText=<%~1
    set /p=%fileText%<nul>>4.txt
    del %1
     



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

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 06:53 14-06-2011
    Elroir



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

    Цитата:
    что делает "2>nul"

    Это перенаправление сообщений об ошибках в никуда. В данном случае, мы пытаемся удалить файл 4.txt. Если файл не существует, в нормальном случае выдается сообщение о невозможности найти такой файл, с добавлением "2>nul", команда "del" работает "тихо".
     

    Цитата:
    Окно не закрывается. Код не срабатывает

    Добавив 3 "del" в конец, ты уничтожил входные файлы после обработки первого из них. Либо используй конструкцию, предложенную 01MDM (она более правильная), либо такую:\

    Код:
     
    ...
    for ... (
    ...
    )
    del 1.txt
    del 2.txt
    del 3.txt
    goto :EOF
    :add
    ...
     


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

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 10:24 14-06-2011 | Исправлено: Elroir, 16:15 14-06-2011
    Joo1z



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    lexikon4ik
    А оно и не будет работать, если ты окно закрываешь. Если окно мешает, то прячь его всякими cmdow @ /HID и прочие nircmd.

    Всего записей: 123 | Зарегистр. 17-02-2009 | Отправлено: 11:33 14-06-2011
    ndch

    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Есть программа gswin32c
    из командной строки ей передаётся параметр
    gswin32c.exe  -sOutputFile=page-%d-w.png
     
    Как составить файл.cmd
    что бы %d воспринимался как параметр  (но не как переменная)?
     
    Так верно? Есть ли более корректный вариант ?
    gswin32c.exe  -sOutputFile=page-%%d-w.png
     
    Где почитать про экранирование и прочие синтаксические особенности cmd ?

    Всего записей: 7004 | Зарегистр. 31-08-2008 | Отправлено: 11:40 14-06-2011 | Исправлено: ndch, 17:26 14-06-2011
    fire4x



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

    Цитата:
    А так:  
     
    Код:  
    .....  
    :add  
    set /p fileText=<%~1  
    set /p=%fileText%<nul>>4.txt  
    del %1  
     

    Каков принцип действия конструкции "del %1"? Как код понимает что именно нужно улалить, а что - не трогать.
    P.S. Спасибо всем кто помогал.

    Всего записей: 503 | Зарегистр. 25-02-2008 | Отправлено: 15:19 14-06-2011 | Исправлено: fire4x, 16:29 14-06-2011
    Engraf



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ndch По-моему так:
    gswin32c.exe  -sOutputFile=page-^%d-w.png

    Всего записей: 67 | Зарегистр. 07-08-2007 | Отправлено: 16:51 14-06-2011 | Исправлено: Engraf, 17:38 14-06-2011
    ndch

    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Engraf
    запуск cmd с содержимым  
    "gswin32c.exe  -sOutputFile=page-^%d-w.png"
     
    интерпритируется cmd как  
    "gswin32c.exe  -sOutputFile=page-d-w.png"

    Всего записей: 7004 | Зарегистр. 31-08-2008 | Отправлено: 17:20 14-06-2011
    Engraf



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Никак не могу придумать, как переместить часть файлов (по критерию, напр. по дате создания), сохранив структуру каталогов.  
    Подробнее: есть папка, в ней подкаталоги с файлами. Пусть под критерий попал файл "C:\Dir\Subdir1\file1.txt". Его необходимо переместить в папку Olddir так, чтобы полный путь к файлу был C:\Olddir\Subdir1\file1.txt

    Всего записей: 67 | Зарегистр. 07-08-2007 | Отправлено: 17:38 14-06-2011 | Исправлено: Engraf, 17:39 14-06-2011
    wolf0425



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

    Код:
    @echo off
    set "_src=C:\Dir\"
    set "_dest=C:\Olddir\"
     
    cd /d "%_src%"
    for %%a in ( "%_src%Subdir1\file1.txt" ) do call :_move "%%~a"
    exit
     
    :_move
    set "_path=%~dp1"
    call set "_path=%%_path:%_src%=%_dest%%%"
    echo move /y "%~1" "%_path%"
    exit /b
     


    Всего записей: 2929 | Зарегистр. 25-04-2007 | Отправлено: 22:03 14-06-2011 | Исправлено: wolf0425, 22:04 14-06-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