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

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

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

    Ну, честно говоря, это вовсе необязательно... но если предполагается использовать именно сценарии 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."
    но лучше сначала попробовать на чем-нибудь, например на копии

    Всего записей: 12551 | Зарегистр. 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
    Linksach



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

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

     
     
    Да я вроде её и использовал и не знаю почему не работает

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



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

    Видно, что сценарий не находит программу "iconv".
    Для того, чтобы она заработала, iconv.exe должен находиться либо рядом с батником, либо по одному из путей, прописанных в системной переменной PATH - дайте команду:

    Код:
    echo %path%

    и увидите, что в ней прописано...

    Всего записей: 399 | Зарегистр. 28-03-2016 | Отправлено: 12:04 10-09-2016
    GCRaistlin



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

    Цитата:
    echo %path%

    Лучше

    Код:
    set path


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

    Всего записей: 4051 | Зарегистр. 18-04-2005 | Отправлено: 12:18 10-09-2016
    YuS_two



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

    Цитата:
    Лучше

    Код:
    set path

     

    Это если требуется получить значения всех переменных начинающихся на "path...", а в данном случае, это не лучше, наверное, т.к. больше запутает человека...

    Всего записей: 399 | Зарегистр. 28-03-2016 | Отправлено: 12:49 10-09-2016
    GCRaistlin



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    YuS_two
    Едва ли переменных таких будет много, зато если в путях будет "&"...

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

    Всего записей: 4051 | Зарегистр. 18-04-2005 | Отправлено: 13:02 10-09-2016
    YuS_two



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

    Цитата:
    зато если в путях будет "&"...

    Это да, но и путей таких, тоже, вряд ли, должно быть в этой переменной.
    В любом случае, от этого вполне спасают кавычки:

    Код:
    echo "%path%"


    Всего записей: 399 | Зарегистр. 28-03-2016 | Отправлено: 13:56 10-09-2016
    GCRaistlin



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    YuS_two
    Это только в том случае, если путь с "&" сам добавлен без кавычек

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

    Всего записей: 4051 | Зарегистр. 18-04-2005 | Отправлено: 14:13 10-09-2016
    YuS_two



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

    Цитата:
    если путь с "&" сам добавлен без кавычек

    Это кто же его так добавлять будет, с кавычками?
    Ну тогда с защитой от этого и даже от других непредвиденных ситуаций, пакетник:

    Код:
    @echo off
    setlocal enabledelayedexpansion
    echo !path!
    pause


    Ну, или прямо из командной строки

    Код:
    cmd /v/c echo !path!

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



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    YuS_two
    Не слишком ли сложные замены универсального и лаконичного

    Код:
     
    set path
     

    ?

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

    Всего записей: 4051 | Зарегистр. 18-04-2005 | Отправлено: 14:54 10-09-2016
    YuS_two



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

    Цитата:
    Не слишком ли сложные замены

    А чего тут сложного-то и длинного?

    Код:
    cmd /v/c echo !path!

    - если уж исходить из всяких предположений типа, что в путях могут присутствовать спецсимволы, кавычки и прочая гадость, то почему бы не предположить, что переменных начинающихся на path, может быть больше двух? Поэтому, такая команда, гораздо точнее и правильнее.

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