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

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

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

    Цитата:
     dius80
     
    Ты как раз и упустил самое главное - причины по которой не удаляется папка
     
    Попытайся делать лог

     
    А как это сделать не подскажешь? Или мож знаешь где об этом можно почитать?
     
    Добавлено:
     
    Elroir
     

    Цитата:
    dius80
    Ну или измени батник, чтобы внутри все удалялось, а сама папка оставалась бы:
     
    Код:
     
    cd /d c:\Obmen
    rd /s/q c:\Obmen 2>nul
     
     
     

     
    Спасибо, думаю это решит проблему.

    Всего записей: 17 | Зарегистр. 30-05-2007 | Отправлено: 08:33 05-06-2007 | Исправлено: dius80, 08:48 05-06-2007
    Maza Faka



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

    Цитата:
    К сожалению файлы без шапки игнорируются.

    Вот окончательный код, обрабатывает все файлы, с шапкой и без:

    Код:
     
    @echo off
    setlocal enabledelayedexpansion
    set var=0
    for %%f in (*.txt) do call :sort "%%f"
    goto :eof
     
    :sort
    for /f "delims=[]" %%a in ('find /i /n "Статья:" ^< %~1') do set /a count=%%a-1 & goto :sum
    :sum
    for /f "tokens=*" %%a in ('more +%count% %~1') do (
    echo %%a | find /i "Статья:">nul && set /a var+=1
    if not "%%a"=="" echo %%a>> !var!.txt)
     

    Код сохрани в DOS кодировке.
     
     
    Добавлено:
    mitrichbel

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

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

    Код:
     
    @echo off
    setlocal enabledelayedexpansion
     
    for /f "tokens=*" %%a in ('dir /b *.txt') do (
    set file1=%%a
    set file1=!file1: =!
    set file1=!file1:~-6!
    call :compare !file1! "%%a")
    pause
    goto :eof
     
    :compare
    for /f "tokens=*" %%b in ('dir /b *.txt') do (
    set file2=%%b
    set file2=!file2: =!
    set file2=!file2:~-6!
    if /i not "%~2"=="%%b" (
    if /i "%1"=="!file2!" echo %~2 = %%b)
    )
     

    Тебе вообще, что нужно сделать с этими файлами? Скопировать, переместить, удалить?

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



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

    Цитата:
    set file1=!file1:~-6!
    ...
    set file2=!file2:~-6!

    А если число не двузначное?


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

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 10:50 05-06-2007
    sadmn



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Elroir
    Большое спасибо за разъяснение!
    Ещё вопрос:
    добавление chcp 1251>nul
    в файл у меня не решает проблему отображения русских букв (но позволяет запускать файлы из папок с русскими названиями - т.е. помогает частично)
    Система XP_SP2, в твикере стоит "использовать страницу 1251 вместо 1252" (но отключение этой опции не имеет эффекта), в региоальных настройках "Язык для не-юникод программ" - русский.
    Где ещё можно посмотреть причину неотображения русских букв?
     
    Зы: сохранение в DOS-866 помогает, но просто интересно разобраться, почему у меня chcp 1251 не работает..

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



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

    Цитата:
    А если число не двузначное?

    Так ведь условием задачи было сравнивать два последних символа в имени файла

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



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Здравствуйте.
     
    C удивлением обнаружил, что в российской Википедии нет статьи "пакетный файл". Решил исправить сие и написал статью. Точнее не написал, а перевел с английского, но не 100% по тексту. Чуть-чуть от себя добавил, чуть-чуть переставил предложения ну и т.д. Однако технический английский мой не блестящ, поэтому прошу ознакомиться, указать на косяки, некорректные термины и вообще, сказать насколько статья адекватна Также ожидаю  любых ваших предложений по добавлению/удалению той или иной инфы. Спасибо
    Подробнее...

    Всего записей: 349 | Зарегистр. 22-12-2006 | Отправлено: 19:23 05-06-2007
    KapralBel



    Platinum Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Tipulatoid
    Лучше выдернуть статью из справки Майкрософт - более болная

    Всего записей: 11354 | Зарегистр. 16-02-2005 | Отправлено: 19:39 05-06-2007
    Elroir



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

    Цитата:
    Так ведь условием задачи было сравнивать два последних символа в имени файла  

    Нееее ... -

    Цитата:
    Есть много текстовых файлов (в нескольких папках), имена у которых состоят из двух частей - текстовой и числовой, разделенных пробелами. В текстовой тоже могут быть и пробелы, и цифры, и любые другие символы, допускаемые файловой системой.  
    Мне нужно найти все файлы, у которых совпадает числовая часть их названий (то есть всё после последнего пробела в названии).

    Он просто пример привел с числом 25.

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

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 20:26 05-06-2007
    Sovdep

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Нужно занести найденую в файле строку в переменную
    Просто так не получается
    grep "Video stream:" PSNR | SET  [VideoBitrate]=
     
    Можно через промежуточный файл
    grep "Video stream:" PSNR>VideoBitrate.log
    SET  /p [VideoBitrate]=< VideoBitrate.log
     
    Но хотелось бы красивое решение. Что посоветуете?

    Всего записей: 18 | Зарегистр. 05-06-2007 | Отправлено: 23:11 05-06-2007 | Исправлено: Sovdep, 10:34 06-06-2007
    Maza Faka



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

    Код:
     
    @echo off
    for /f "tokens=*" %%a in ('grep "Video stream:" PSNR') do set VideoBitrate=%%a
     

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

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Спасибо!
     
    Я обратил внимание, в примерах часто такие конструкции встречаются for /f "tokens=*" %%a
     
    А существуют ли другие возможности?
    Я попробовал простым перебором  
    CALL SET
    ENDLOCAL & SET  
    Безрезультатно.
     
    Неужели M$ никакой магический ключ не ввела для такой очевидной задачи?!

    Всего записей: 18 | Зарегистр. 05-06-2007 | Отправлено: 10:28 06-06-2007
    wolf0425



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

    Цитата:
    То есть хотелось бы, чтоб батник сам перебирал файлы попарно и сравнивал последние части, что ли.  

    что-то типа такого, максимальное количество (20) проверяемых символов перед расширением проставь как нравится.
    и на циферки я сравниваемый хвост не проверял, imho обойдешься словом. но если надо - без проблем впишу.

    Код:
    @echo off
    setlocal enabledelayedexpansion
     
    dir /b /s /a-d *.* 1>filelist.txt
     
    for /f "tokens=*" %%a in (filelist.txt) do (
        set "name=%%~na"
        set "name2="
        for /l %%i in (1,1,20) do if "!name2!"=="" if "!name:~-%%i,1!"==" " set "name2=!name:~-%%i!%%~xa"  
        for /f %%i in ('type filelist.txt ^| find /c "!name2!"') do if %%i gtr 1 echo found:%%~fa -- %%~ta -- %%~za bytes  
    )

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 13:14 06-06-2007 | Исправлено: wolf0425, 13:50 06-06-2007
    mitrichbel

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

    Цитата:
    Тебе вообще, что нужно сделать с этими файлами? Скопировать, переместить, удалить?
    мне их нужно найти прежде всего, остальное вручную (сравнение и формирование одного файла из двух по собственному разумению).
     
    Elroir

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

    Всего записей: 1371 | Зарегистр. 30-04-2003 | Отправлено: 13:52 06-06-2007
    wolf0425



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

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 14:09 06-06-2007
    mitrichbel

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    wolf0425
    нет, хвост после последнего пробела гарантированно из цифр. Сколькизначное - яне знаю, от чего это зависит, в имеющейся куче файлов есть десятизначные.

    Всего записей: 1371 | Зарегистр. 30-04-2003 | Отправлено: 15:45 06-06-2007
    taxist77

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Подскажите пожалуйста, необходимо скопировать содержимое текстового файла в переменную. Как это можно сделать?

    Всего записей: 5 | Зарегистр. 06-06-2007 | Отправлено: 16:07 06-06-2007
    wolf0425



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    taxist77
    Цитата:
    Необходимо скопировать содержимое текстового файла в переменную.

    так выше по странице у Sovdep есть пример
    set /p var=<file.txt
     
    Но больше чем одна строка - в переменную не поместится никак.

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 16:17 06-06-2007 | Исправлено: wolf0425, 16:19 06-06-2007
    NIKZZZZ



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

    Цитата:
    Подскажите пожалуйста, необходимо скопировать содержимое текстового файла в переменную. Как это можно сделать?

    Это нельзя сделать стандартными средствами, ограничение - одна строка.

    Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 16:18 06-06-2007
    taxist77

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    NIKZZZZ
    wolf0425
    меня одна строка вполне устраивает спасибо за оперативность!

    Всего записей: 5 | Зарегистр. 06-06-2007 | Отправлено: 16:25 06-06-2007
    Ruslan_FM

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Как запросить с командной строки параметр , и присвоить ее переменной  
    типа  
    Echo *****************
    Echo * Как вас завут . *
    Echo *****************
     
    ???????
    Set name=?????
     

    Всего записей: 69 | Зарегистр. 10-11-2005 | Отправлено: 16:57 06-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