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

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

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

vu1tur (11-09-2007 15:22): продолжаем в теме Задачи на bat-файлах 4  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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

   

vu1tur



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

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

  • Всего записей: 3690 | Зарегистр. 01-02-2003 | Отправлено: 11:54 27-04-2007 | Исправлено: Elroir, 03:59 10-09-2007
    sadmn



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    KapralBel
    да у меня тоже работает. более того, какой ключ? здесь ключа-то нет, вроде..
    Добавлено:
    блин, допёр!!
    я под /имя папки/ имел ввиду подставить имя папки без слешей, просто выделил так неуместно! сорри.

    Всего записей: 1354 | Зарегистр. 04-06-2006 | Отправлено: 14:48 15-06-2007 | Исправлено: sadmn, 14:50 15-06-2007
    Maza Faka



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

    Цитата:
    Подскажите как батником открыть папку

     

    Код:
     
    start "" "c:\program files"
     

    открывается папка "c:\program files".

    Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 14:48 15-06-2007
    AlessTO

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    KapralBel
    Сорри. Ступил. Все работает. Спасибо.
     
    Добавлено:
    А теперь обратный ход.. Нужно её закрыть.
    Применяя taskkill /fi "Windowtitle eq <путь к папке>" не работает. Как быть?

    Всего записей: 253 | Зарегистр. 09-12-2006 | Отправлено: 14:52 15-06-2007
    newhome

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    to Maza Faka
     
    Формат начального файла:
    --------------------------------------------------------------------------------------------------------                 12345647567645747474'ABC'23452352352523432423'ABC'1235464656543.00'ZNACHENIE STROKI : ABCDEF GHIKSJG  DFGSDG
    12345647567645747474'ABC'23452352352523432423'ABC'            156543.00'ZNACHENIE STROKI : ABCDEF GHIKSJG  DFGSDG
    12345647567645747474'ABC'23452352352523432423'ABC'             26543.00'ZNACHENIE STROKI : ABCDEF GHIKSJG  DFGSDG
    --------------------------------------------------------------------------------------------------------
    Re код скрипта:  
    del sum.txt
    for /F "usebackq tokens=1" %%i in (`dir /b *.txt`) do (set fname=%%i)
    for /F "usebackq tokens=9,10 delims='ru. " %%i in (`find %fname% "R'"`) do (echo %%i >>sum.txt)
    --------------------------------------------------------------------------------------------------------
    Задача скрипта:  
    1. вывести на экран список файлов данного каталога;
    2. просчитать суммарные значения каждого выбранного пользователем файла. (можно по 1 ому файлу);
    3. выдать сообщения формата:
    ------------------------------------
    File1 - Sum=10000.12
    File2 - Sum=19231.43
    ------------------------------------

    Всего записей: 11 | Зарегистр. 14-06-2007 | Отправлено: 16:01 15-06-2007
    Maza Faka



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

    Код:
     
    @echo off
    setlocal enabledelayedexpansion
    set count=0
     
    for %%a in (c:\test\*.txt) do echo %%a
     
    :begin
    set /p "choose=Select file "
    if not defined choose (Echo Error occured, select file) & (goto begin)
     
    for /f "delims=" %%a in (c:\test\%choose%) do (
    set str=%%a
    set str=!str:'= !
    for %%b in (!str!) do (
    set sum=%%b
    echo !sum! | findstr "1 2 3 4 5 6 7 8 9 0">nul
    if !errorlevel!==0 (
    set sum=%%b
    for /l %%c in (0,1,254) do if not "!sum:~%%c,1!"=="" set /a count+=!sum:~%%c,1!)
    )
    )
     
    echo %choose% - sum=%count%
    pause
     

    Батник суммирует все числа между собой.
    Не забудь! "Важно: копируя батник через буфер обмена из форума не забывайте удалять пробелы в конце каждой строки, т.к. в некоторых случаях из-за этого программа будет работать неправильно!!!"

    Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 18:02 15-06-2007 | Исправлено: Maza Faka, 18:21 15-06-2007
    Nagual



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    такая вот проблема нарисовалась при использовании сценариев
    есть файлы с именами, содержащие символы &^ (создать такие можно)
    например
    00-&2007.sfv 00-20^07.sfv
    при обработке их сценарием просиходит усечение имен файлов до этих символов, то есть
    00- и 00-20 соответственно
    при передаче имен файлов напрямую какой-либо программе эти файлы воспринимаются нормально
    вопрос: как этого избежать, не используя кавычки?

    Всего записей: 528 | Зарегистр. 06-01-2006 | Отправлено: 18:32 15-06-2007 | Исправлено: Nagual, 18:37 15-06-2007
    newhome

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    to Maza Faka
    -----------------------------------
    set str=!str:'= !
    for %%b in (!str!) do (
    set sum=%%b
    echo !sum! | findstr "1 2 3 4 5 6 7 8 9 0">nul
    if !errorlevel!==0 (
    set sum=%%b
    for /l %%c in (0,1,254) do if not "!sum:~%%c,1!"=="" set /a count+=!sum:~%%c,1!)
    ----------------------------------  
    Что не работает....-(
    echo !sum! | findstr "1 2 3 4 5 6 7 8 9 0">nul - не очень понятен смысл, т.к. в строке:
    ________________
    12345647567645747474'ABC'23452352352523432423'ABC'1235464656543.00'ZNACHENIE STROKI : ABCDEF GHIKSJG  DFGSDG
    ________________
    А.   'ABC'1235464656543.00'ZNA то, что находится чежду ABC и ZNA - является переменной, которую нужно обработать, все остальные числа в файле не важны.
    count+=!sum: -  я так понимаю можно сложить 2 числа с помощью переменная+=число+ или ....?
     
    Б. То, что ты предлагаешь (набить название файла) я мог реализовать и сам, но... мне нужна след.картинка:
    ----------------------------------------------------------
    Для расчета суммы файла ваdю.txt нажмите клавишу 1
    Для расчета суммы файла вsаюdfg2.txt нажмите клавишу 2
    Для расчета суммы файла вfgваю234.txt нажмите клавишу 3
    Для расчета суммы файла выаfgваю234.txtt нажмите клавишу 4
    .... и.т.д.
    ----------------------------------------------------------
    Весь этот геморрой из-за того, что названия файлов может быть записано в разных кодировках (ISO, DOS, WIN, и.т.д.) и пользователь скрипта не может набрать некоторые символы.
     
    P.S. Можешь просто написать как прочитать из файла 2 числа, записанных в строчку? (Пробовал записывать их в массив, а потом складывать через set /a sum=%%i+%%j+..., но чисел в файле может быть >1000)

    Всего записей: 11 | Зарегистр. 14-06-2007 | Отправлено: 18:46 15-06-2007
    Maza Faka



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

    Цитата:
    А теперь обратный ход.. Нужно её закрыть.  
    Применяя taskkill /fi "Windowtitle eq <путь к папке>" не работает. Как быть?

     
    Можно при помощи утилиты "CMDOW.EXE", скачай, скопируй в папку WINDOWS и запускай этот код:

    Код:
     
    @echo off
    for /f %%a in ('cmdow ^| find /i "explorer" ^| findstr /i /c:"c:\program files"') do cmdow %%a /cls
     

    Да, чуть не забыл, в свойствах папки поставь галочку "Выводить полный путь в строке заголовка"
     
    Добавлено:
    newhome

    Цитата:
    Что не работает

    У меня работает, подсчитывает сумму чисел в файле.

    Цитата:
    echo !sum! | findstr "1 2 3 4 5 6 7 8 9 0">nul - не очень понятен смысл

    Здесь ищется наличие чисел в строке, так, как строки могут быть нечисловыми.

    Цитата:
    что находится чежду ABC и ZNA - является переменной

    А как в файле выглядит эта переменная? В виде чисел?

    Цитата:
    Б. То, что ты предлагаешь (набить название файла) я мог реализовать и сам, но... мне нужна след.картинка:  
    ----------------------------------------------------------  
    Для расчета суммы файла ваdю.txt нажмите клавишу 1  
    Для расчета суммы файла вsаюdfg2.txt нажмите клавишу 2  
    Для расчета суммы файла вfgваю234.txt нажмите клавишу 3  
    Для расчета суммы файла выаfgваю234.txtt нажмите клавишу 4  
    .... и.т.д.

    Давай сначала разберёмся с суммированием, а потом сделаем выбор файла(это не трудно)

    Цитата:
    Весь этот геморрой из-за того, что названия файлов может быть записано в разных кодировках (ISO, DOS, WIN, и.т.д.)

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

    Код:
     
    @echo off
    setlocal enabledelayedexpansion
    set count=0
    for %%a in (c:\test\*.txt) do echo %%a
     
    :begin
    set /p "choose=Select file "
    if not defined choose (Echo Error occured, select file) & (goto begin)
     
    for /f "delims=" %%a in ('more ^< c:\test\%choose%') do (
    set str=%%a
    set str=!str:'= !
    for %%b in (!str!) do (
    set sum=%%b
    echo !sum! | findstr "1 2 3 4 5 6 7 8 9 0">nul
    if !errorlevel!==0 (
    set sum=%%b
    for /l %%c in (0,1,254) do if not "!sum:~%%c,1!"=="" set /a count+=!sum:~%%c,1!)
    )
    )
    echo %choose% - sum=%count%
    pause
     

    Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 19:17 15-06-2007
    01MDM



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Подскажите, как добиться, чтоб выводились символы "!" и "=" в следующем батнике:

    Код:
     
    @ECHO OFF
    cls
    chcp 1251 >nul
    for /f "delims=" %%i in ('more %1') do (
        set line=%%i
        call :main
    )
    GOTO:EOF
     
    :main
    setlocal enabledelayedexpansion
    set /a c=0
    :length
    set l=!line:~%c%,1!
    if not "%l%"=="" (
        set /a c+=1
        goto length
    )
    set /a c-=1
    for /l %%i in (0,1,%c%) do (
        set d=!line:~%%i,1!
        set /p=!d!<nul
        ping -n 1 localhost >nul
    )
    echo.
     

     
    В качестве "%1" используется любой текстовый файл, с длиной строки, не превышающей размер определенный для переменной.

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 14:26 16-06-2007
    Maza Faka



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

    Цитата:
    как добиться, чтоб выводились символы "!" и "="

    Скорее всего никак.

    Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 15:33 16-06-2007
    Elroir



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

    Цитата:
    если я правильно понял, просто цикл прерывается после нахождения первого "IP" ?

    Именно так.
    В самом листинге у меня вызывает сомнения строчка "if %errorlevel% LEQ 1 goto okay". Насколько я понимаю - идет проверка на удачное подключение, а при этом errorlevel должен быть равен нулю. Проверка же идет на errorlevel, который меньше или равен единице. То есть если errorlevel=1, будет засчитано удачное соединение.

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

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 21:57 16-06-2007
    Lapochka ili Chai



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Взял я addline чтобы добавлять строчку в файл, а этот addline не работает с файлами, у которых длинные имена (система Win XP). Бывает ли другой, хороший addline?

    Всего записей: 847 | Зарегистр. 27-11-2003 | Отправлено: 13:48 17-06-2007
    Elroir



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Lapochka ili Chai
    Если в системе включена генерация коротких имен, можешь воспользоваться такой конструкцией в батнике:

    Код:
    for %%a in ("file with long name.txt") do addline line_to_add 10 %%~sa


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

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 14:21 17-06-2007
    Lapochka ili Chai



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Elroir
    Спасибо. Только я не понял, 10 это что, номер строки-в-файле, куда вставится моя строчка?
    И ещё: а можно ли отключить "генерацию коротких имён" и, если можно, то как? А то после запуска addline все записи на чёрном экране (а не только addline-овская) обрубаются, и имена папок делаются невразумительными.

    Всего записей: 847 | Зарегистр. 27-11-2003 | Отправлено: 14:28 17-06-2007
    Elroir



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

    Цитата:
    Только я не понял, 10 это что, номер строки-в-файле, куда вставится моя строчка?

    Да. Число 10 взято просто для примера.

    Цитата:
    можно ли отключить "генерацию коротких имён" и, если можно, то как? А то после запуска addline все записи на чёрном экране (а не только addline-овская) обрубаются, и имена папок делаются невразумительными.

    Не понял ни проблемы, ни вопроса. Код, который я привел выше, ничего не меняет в системе. Он просто использует короткие имена, которые Windows генерирует при создании файлов с длинными именами.
    Подробнее опиши проблему, с примерами.

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

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 15:19 17-06-2007
    Maza Faka



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

    Цитата:
    можно ли отключить "генерацию коротких имён"

    Можно:

    Код:
     
    @echo off
    reg add "HKLM\System\CurrentControlSet\Control\FileSystem" /t REG_DWORD /v NtfsDisable8dot3NameCreation /d 0 /f
     

    не знаю поможет ли тебе.

    Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 16:03 17-06-2007 | Исправлено: Maza Faka, 16:07 17-06-2007
    Elroir



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Maza Faka
    Не поможет ему. Только проблемы начнутся - некоторые программы написаны так, что используют эти короткие имена. Если их не будет - могут появиться разнообразные глюки.  

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

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 16:12 17-06-2007
    Lapochka ili Chai



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Ёлки-палки! а этот addline ещё и обрезает все строки обрабатываемого файла по 80-й позиции!!!  
     
    Ну уж этого я от него никак не ожидал!
     
    Ну уж короткие имена -- это ещё туда-сюда. А чтоб короткие строки внутри файла -- это просто ерунда!!!
     
    Нет, такой addline нам не нужен.
     
    Спасибо всем за советы, за потраченные усилия.
     
    Добавлено:
    кстати, может быть удалить этот addline из шапки? или сопроводить комментарием?
    Чтоб другие не тратили время на этого негодяя?
     
    Добавлено:
    он сидит в шапке -- под ссылкой "полезные утилиты"

    Всего записей: 847 | Зарегистр. 27-11-2003 | Отправлено: 16:36 17-06-2007
    Elroir



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Lapochka ili Chai
    Ты прав - лучше этой утилитой не пользоваться. Убрал из шапки.

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

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 17:37 17-06-2007
    Maza Faka



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

    Цитата:
    чтобы добавлять строчку в файл

    Можно стандартными средствами, например:

    Код:
     
    @echo off
    set count=0
    for /f "delims=" %%a in (list.txt) do (
    call :write "%%a"
    echo %%a>> out.txt)
    del /q /s list.txt
    ren out.txt list.txt
    goto :eof
     
    :write
    set /a count+=1
    if %count% equ 3 echo New string>> out.txt
     

    В этом коде в 3-ю строку добавляется строчка "New string".

    Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 19:10 17-06-2007
       

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

    Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Задачи на bat-файлах 3
    vu1tur (11-09-2007 15:22): продолжаем в теме Задачи на bat-файлах 4


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

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

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru