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

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



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

    Цитата:
    А выводит такое.

    А это значит, что предложенный батник для добавления пустых строк, после копирования с форума, Вы не почистили от конечных пробелов. Почитайте шапку, там примечание есть, красными буквами "Важно"...
    Ну да ладно, всё равно, даже если строки непустые, а с пробелами, их тоже можно удалять, правда код уже будет немного другим.
    Да, кстати, вот такая запись:

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

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

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



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    YuS_two
     
    Не знаю как у вас а у меня таже ситуация-нажал на посте редактировать,скопировал код в текстовый редактор ,сохранил и никаких изменений
    Скорее всего у меня лишние пробелы в текстовом файле поэтому батник не работает
     
    Добавлено:
    Да правда заработал код.Благодарю!Действительно как я и подумал- проблема была в текстовом файле-вроде названия располагались через пустую строку а начал удалять кнопкой  Backspace назад то оказалось что надо было нажимать не один раз а два или три.Пробелов наверное было больше чем надо
     
    Добавлено:
    YuS_two
     

    Цитата:
     for /f "delims=" %%i in ('type "in.txt"') do >>"test.txt" (echo %%i&&echo.)

     
    А этот ваш код тоже хорош-он делает то что я просил до этого-т.е добавляет пустую строку после  каждого названия в текстовом документе.Спасибо за код!
     
    Добавлено:
     
    for /f "delims=" %%i in ('type "test.txt"') do >>"out.txt" (echo %%i&&echo.)
     
    Правда я его немного подредактировал и работает лучше чем мне предложили ребята выше(не в обиду им).Там создаются лишнии пробелы при удалении через кнопку Backspace

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



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

    Цитата:
    Там создаются лишнии пробел

    Лишние пробелы там не создаются, если выполнить то, что написано в шапке.

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



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

    Цитата:
    Есть текстовый файл,(насчитывающий 12085 строк),со строками такого вида

    Чтобы выявить закономерности, необходим сам файл...
     

    Цитата:
    для примера некоторые строки:

    Такой пример не очень наглядный, при копировании-вставке через форум, могут "потеряться" какие-нибудь символы...

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



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    YuS_two
     
    как загрузить сюда текстовый файл
     
    Пока так
     
    http://rgho.st/private/6XnZgJNN4/3bee4198f1e3eb456b684139f7077e95
     
     
    Разделы платная или бесплатная из текстового файла можно не включать никуда

    Всего записей: 113 | Зарегистр. 11-07-2015 | Отправлено: 19:04 07-09-2016 | Исправлено: Linksach, 19:39 07-09-2016
    GCRaistlin



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

    Цитата:
    Пока так

    Именно так и надо.

    ----------
    Magically yours
    Raistlin

    Всего записей: 3962 | Зарегистр. 18-04-2005 | Отправлено: 19:13 07-09-2016
    Jon_Dow

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    YuS_two
    Цитата:
    даже с лишними пробелами в конце, будет работать правильно, но это уже необязательные тонкости...
    это обязательные тонкости и любой правильно написанный код буден индиферентным относительно хвостовых пробелов. Не расслабляй посетителей - пусть сразу привыкают использовать правильный код
     
    Linksach
    Цитата:
    Правда я его немного подредактировал и работает лучше чем мне предложили ребята
    приведи код - глянем что у тебя там за красивое решение...
    И заодно есть такой тег [more=простынка]сюда помещаешь то что надо спрятать под простынку[/more]
    И в применении будет так простынка
    Чтоб не плодить то ужас что ты накопипастил на предыдущей странице.
     

    Всего записей: 732 | Зарегистр. 25-11-2006 | Отправлено: 22:34 07-09-2016
    Linksach



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

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



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

    Цитата:
    Пока так

    Мда... вот, такой результат:
    1. Кодировка файла UTF8 с BOM и как следствие, в наличии символы, которые, при прямом использовании в наименовании каталогов, приведут к ошибке. В cmd лучше всего, чтобы не случилось накладок, использовать кодировку 866... ну, или, хотя бы 1251. Можно было бы сделать автоматическую перекодировку, прямо в cmd, но там есть особенности - она не всегда корректно перекодирует и кроме того, некоторые символы будут утеряны...
    2. Закономерность в разделителях не постоянная. Можно было бы взять за основу наличие 2-х и более пробелов, но в некоторых местах присутствуют такие символы:

    Код:
    "-N"
    "без устан"

    которые приведут к ошибочному созданию неправильных наименований каталогов и путей... Кроме того, в некоторых местах длинное наименование разделяется всего одним пробелом с каталогом... и ещё, между наименованием и номером версии, в некоторых местах присутствуют два и более пробела, что приведет к созданию ошибочных подпапок...
    3. В тексте присутствует символ "*", а этот спецсимвол не совсем просто меняется в чистом cmd. Но т.к. нашелся поиском только один, то проще его удалить. Либо можно использовать доп. утилиту, типа sed, если эта задача периодически возникает с такими списками.
     
    В общем, с учетом вышеперечисленного, предварительно необходимо этот список обрабатывать, чтобы можно его было использовать в автоматическом создании структуры папок. Главное - необходим четкий разделитель столбцов и отсутствие вставок из п.2, которые не должны попасть в наименование...
     
     
     
    Добавлено:
    Jon_Dow

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

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

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



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    YuS_two
     
    Спасибо что посмотрели файл!
    Согласен что проблем много в текстовом файле
    Думаю что должна быть кодировка 866 ибо много в файле русских названий
    Из пункта 2 можно смело удалять всё лишнее
    Кроме того надо удалить редактированием столбцом в Notepad+++ с помощью ALT и мыши столбец -платная или бесплатная ну и некоторые символы,которые будут мешать созданию папок думаю можно с помощью редактора Notepad++ или того же блокнота поменять например на тире или просто удалить
    Насчёт столбцов тоже понял
    Как будет больше свободного времени я подредактирую файл и выложу
     

    Всего записей: 113 | Зарегистр. 11-07-2015 | Отправлено: 20:52 08-09-2016 | Исправлено: Linksach, 20:54 08-09-2016
    YuS_two



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

    Цитата:
    подредактирую файл  

    Ну, честно говоря, это вовсе необязательно... но если предполагается использовать именно сценарии cmd, то изначально лучше придерживаться существующих ограничений в спецсимволах и форматировании...
    А так, можно ведь и напрямую с файлом работать, даже в таком варианте.  
    Код сценария
    Только для батника придется скачать конвертер кодировок iconv.exe из комплекта GnuWin32, иначе средствами cmd конвертируется слишком коряво и в папках будет разброд и шатание.
    В общем, вот Вам комплект, где есть сценарий cmd для создания папок (run.bat - почитайте комментарии), чтобы не копировать с форума...  
    Время выполнения, правда немаленькое:

    Код:
    Start: 08.09.2016 20:11:24,78
    Stop: 08.09.2016 20:32:16,57

    но тут уж ничего не поделать...
    Там же есть сценарий powershell, запускать run_ps.bat, для сравнения - он работает побыстрее, менее капризен к спецсимволам, да и написать его гораздо проще и быстрее было:
    Время выполнения powershell, с тем же файлом:

    Код:
    Days              : 0
    Hours             : 0
    Minutes           : 1
    Seconds           : 47
    Milliseconds      : 207
    Ticks             : 1072078823
    TotalDays         : 0,00124083197106481
    TotalHours        : 0,0297799673055556
    TotalMinutes      : 1,78679803833333
    TotalSeconds      : 107,2078823
    TotalMilliseconds : 107207,8823

    В общем, пробуйте...

    Всего записей: 399 | Зарегистр. 28-03-2016 | Отправлено: 21:15 08-09-2016 | Исправлено: YuS_two, 21:19 08-09-2016
    Nikoderiko

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Вопроc такой:
    Как перенести все файлы в подпапках на папку выше?
    Уточняю: Там может быть много уровней влодженности.

     
    Ответ: for /r "%~dp0" %%a in (.) do move "%%a\*" "%%a."
     
    Pasha_ZZZ: спасибо, всё правильно.

    Всего записей: 808 | Зарегистр. 17-07-2002 | Отправлено: 17:15 09-09-2016 | Исправлено: Nikoderiko, 18:35 09-09-2016
    Pasha_ZZZ



    Platinum Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Nikoderiko
    Цитата:
    for /r "%~dp0" %%a in (.) do move "%%a\*" "%%a."
    но лучше сначала попробовать на чем-нибудь, например на копии

    Всего записей: 12375 | Зарегистр. 11-03-2002 | Отправлено: 18:02 09-09-2016
    YuS_two



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Pasha_ZZZ
    А скрытые или системные?

    Всего записей: 399 | Зарегистр. 28-03-2016 | Отправлено: 19:57 09-09-2016
    Jon_Dow

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Nikoderiko
    Цитата:
    Вопроc такой:
    Как перенести все файлы в подпапках на папку выше?
    Уточняю: Там может быть много уровней влодженности.
    ответ не может быть столь очевиден - а обработку исключений кто делать будет:  
    - текущая папка - корень диска
    - существует уже папка с таким именем как целевая папка
    - существует файл с таким именем как целевая папка
    и так далеее

    Всего записей: 732 | Зарегистр. 25-11-2006 | Отправлено: 19:58 09-09-2016
    YuS_two



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

    Цитата:
    и так далеее

    Как-то так, возможно:

    Код:
    @echo off
    rem Корневой каталог. Файлы из корневого каталога не перемещаются.
    set "src=d:\TEMP\!temp"
    if not exist "%src%\" echo Error. Not exist %src%&&pause&&exit
    for /f "delims=" %%i in ('dir /s/b/ad "%src%"') do (set "fold=%%~i"&&call :files)
    pause&&exit
    :files
    cd /d "%fold%"
    cd ..
    set "m_fold=%cd%"
    cd /d "%fold%"
    for /f "delims=" %%a in ('dir /b/a-d "%fold%"') do (
        set "f_file=%%~dpnxa"
        set "n_file=%%a"
        call :mov
    )
    exit /b
    :mov
    if exist "%m_fold%\%n_file%\" (
        echo Error!!!  
        echo "%n_file%" - такое наименование уже присвоено подпапке в папке "%m_fold%"
        echo Файл "%f_file%" не подлежит перемещению.
        exit /b
    )
    for /f "delims=" %%b in ('attrib "%f_file%"') do set "att=%%b"
    attrib -s -h "%f_file%"
    rem Перемещаемые файлы, при сопадении имени с файлом в целевом каталоге, замещают его.
    move /y "%f_file%" "%m_fold%\" >NUL
    set "att=%att:~3,2%"
    set "att=%att:S=+S %"
    set "att=%att:H=+H %"
    if "%att%" neq "  " attrib "%m_fold%\%n_file%" %att%
    exit /b

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



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    YuS_two
     
    Не знаю как вас благодарить-вы меня очень выручили!Всех благ вам в жизни!Я проверил пока скрипт,созданный в Powershell.Ваш скрипт в Powershel это супер!!!!! Я правда немного подредактировал потом свой текстовый файл,исправил ошибки в тексте чтоб правильно создались подпапки(чтоб не было отсутствующих папок),добавил инфу о пропущеных мною в текс документе папках
    КОМУ надо исправленный файл он здесь
     
    Вот как выполнялся скрипт
    Код:
    Days              : 0
    Hours             : 0
    Minutes           : 0
    Seconds           : 44
    Milliseconds      : 960
    Ticks             : 449605233
    TotalDays         : 0,000520376427083333
    TotalHours        : 0,01248903425
    TotalMinutes      : 0,749342055
    TotalSeconds      : 44,9605233
    TotalMilliseconds : 44960,5233

     
    Почему мой график выполнения скрипта отличается от вашего что выложен выше

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



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

    Цитата:
    Почему мой график выполнения скрипта отличается от вашего что выложен выше

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

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



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    YuS_two
     
    А вот запустил другой ваш скрипт и пока не работает.Показывает это после секунд 30-ти от начала старта
     
    http://uploads.ru/HpLGE.jpg
     
    И после нажатия -никакие каталоги с папками не создаются

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



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

    Цитата:
    другой ваш скрипт и пока не работает.

    Необходима вот эта программа-перекодировщик:

    Код:
    rem Конвертер кодировок из комплекта GnuWin32 http://gnuwin32.sourceforge.net/packages/libiconv.htm  
    rem Скачивать можно без установщика - "Binaries  Zip" http://gnuwin32.sourceforge.net/downlinks/libiconv-bin-zip.php

    без неё работать не будет.
    Но если уж препятствий для использования powershell нет, то советую использовать лучше его - он гибче в настройках и дополнениях регулярок (их в cmd использовать почти невозможно), да и вообще, практичнее и значительно быстрее работает.

    Всего записей: 399 | Зарегистр. 28-03-2016 | Отправлено: 23:16 09-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