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

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



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

    Код:
     
    forfiles /P "G:\video" /S /D -31 /C "cmd /c if not @ext==\"ddl\" del /f /a /q @file"  
     


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

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 18:44 20-11-2016
    Linksach



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

    Код:
    @echo off
    set "ROOTFOLDER=x:\path to\RootFolder"
     
    1>nul 2>&1 7z --help ||call :ABORT "Недоступен 7z.exe!"  
    1>nul 2>&1 pushd "%ROOTFOLDER%" ||call :ABORT "Папка "%ROOTFOLDER%" не существует!"  
    for /f  "delims="  %%A in ('dir /B /A:D *') do call ROCESSFOLDER "%%A"
    popd
    goto :EOF
     
    :ABORT
    echo Аварийное завершение работы!
    echo %~1
    pause
    exit  
     
    ROCESSFOLDER
    pushd "%~1"
    for /f "delims=" %%B in ('dir /B /A:-D *') do 1>>"%%~nB.lst" 7z l "%%B"  
    popd

     
    Вам нужно подредактировать свой батник ибо если в названии файла встречаются русские буквы то файл lst получается такого содержания
     
    http://hkar.ru/McZ2
     
    Пытался вначале батника поставить это     chcp 1251  - не помогло

    Всего записей: 113 | Зарегистр. 11-07-2015 | Отправлено: 21:27 20-11-2016 | Исправлено: Linksach, 21:38 20-11-2016
    Pasha_ZZZ



    Platinum Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Linksach
    Не знаю, какая вам кодировка нужна, но вот например UTF-8
    Цитата:
    7z l -sccUTF-8 "%%B"
    еще есть DOS и WIN

    Всего записей: 12375 | Зарегистр. 11-03-2002 | Отправлено: 21:43 20-11-2016
    Linksach



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Pasha_ZZZ
     
    а для DOS какая будет запись?
     
    Благодарю-работает с utf-8!

    Всего записей: 113 | Зарегистр. 11-07-2015 | Отправлено: 22:18 20-11-2016 | Исправлено: Linksach, 22:42 20-11-2016
    Shaman177

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Привет камрады! Прошу вашей помощи с корректировкой батника для удаления старых файлов из драйвер-пака (Snappy Driver Pack). Батник от автора раздачи у меня на NAS'e не отрабатывает как нужно и, вместо удаления ненужных файлов, сыпятся сообщения о том, что не удалось найти такой-то файл. Вот содержание батника от автора драйвер-пака:

    Код:
    @setlocal enableextensions
    @cd /d "%~dp0"
    attrib drivers\*.* -R
     
    del drivers\DP_Name_12345.7z
     

    Всего записей: 346 | Зарегистр. 15-06-2007 | Отправлено: 22:45 20-11-2016 | Исправлено: Shaman177, 22:47 20-11-2016
    Pasha_ZZZ



    Platinum Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Shaman177
    А у вас NAS'овская шара подключена как диск или просто с сетевым путем? Для CD надо путь с диском.
    Ну или использовать PUSHD/POPD - первая подключает временный диск, если ей передан UNC-путь, а вторая - удаляет.

    Всего записей: 12375 | Зарегистр. 11-03-2002 | Отправлено: 22:55 20-11-2016
    Shaman177

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Pasha_ZZZ
    Спасибо за помощь! Подключил как диск и батник выполнил свою задачу на отлично. В принципе, моя проблемка решена, но, если вас не затруднит, не могли бы вы подсказать какой должна быть команда с использованием PUSHD/POPD при подключении сетевым путем?
     

    Всего записей: 346 | Зарегистр. 15-06-2007 | Отправлено: 23:20 20-11-2016
    Pasha_ZZZ



    Platinum Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Shaman177
    Вместо CD /D нужно PUSHD \\NAS\sharename, а в конце работы - POPD

    Всего записей: 12375 | Зарегистр. 11-03-2002 | Отправлено: 23:25 20-11-2016
    Shaman177

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Pasha_ZZZ
    Ясно. А путь к шаре надо указывать полный (т.е., \\NAS\sharename), даже если батник лежит в этой самой папке?
     

    Всего записей: 346 | Зарегистр. 15-06-2007 | Отправлено: 23:35 20-11-2016
    BorlandIMHO

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

    Цитата:
    если в названии файла встречаются русские буквы то файл lst получается такого содержания

    Если вьюер, которым вы смотрите листинг, не умеет корректно отображать cp866, то это, знаете ли, не проблема моего батника, а проблема вьюера...


    ----------
    http://www.imho.ws

    Всего записей: 2388 | Зарегистр. 12-10-2006 | Отправлено: 02:08 21-11-2016 | Исправлено: BorlandIMHO, 02:12 21-11-2016
    Linksach



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    BorlandIMHO
     
    Я файлы lst открывал Notepad++
     
    Сейчас по-новой сохранил и запустил ваш код и всё работает как надо .

    Всего записей: 113 | Зарегистр. 11-07-2015 | Отправлено: 07:51 21-11-2016 | Исправлено: Linksach, 08:00 21-11-2016
    Pasha_ZZZ



    Platinum Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Shaman177
    Цитата:
    А путь к шаре надо указывать полный
    Можно использовать ту же конструкцию "%~dp0"

    Всего записей: 12375 | Зарегистр. 11-03-2002 | Отправлено: 10:06 21-11-2016
    ALEX173



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

    Цитата:
    Elroir

    Спасибо!  завтра протестирую.
     
    Еще вопрос, можно ли как то Из папки напр.  C:\1\ копировать или перемещать в D:\1\ ПАПКИ  старше 7 дней?

    Всего записей: 50 | Зарегистр. 19-08-2012 | Отправлено: 20:12 21-11-2016
    Linksach



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    а как быть с запароленными архивами 7z
     
    файл lst создаётся вот с таким содержанием
     
    http://hkar.ru/MekX
     
    Да ладно,я просто повводил пароли и распаковал  и заново перепаковал без паролей .
     
    Вот такие ещё надо батники или батник :
     
    Нужно будет чтоб эти 7z,rar архивы автоматом распаковывались через батник когда надо
     
    Ну ,можно потом и поудалять когда надо распакованные файлы,не сразу после распаковки ,а когда надо будет
     
     
     

    Всего записей: 113 | Зарегистр. 11-07-2015 | Отправлено: 23:16 21-11-2016 | Исправлено: Linksach, 23:33 21-11-2016
    BorlandIMHO

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

    Цитата:
    Я файлы lst открывал Notepad++

    Он, между прочим, вполне умеет смотреть файлы во множестве различных кодировок, включая 866...

    Не инструмент виноват, а пользователь, который его не умеет правильно применять...
     
     
     
    Добавлено:

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

    А по-другому никак. Единственно - если ВСЕ до единого архивы запаролены одним паролем, то можно добавить в команду листинга этот пароль (ключ -p{Password}).
     

    Цитата:
    чтоб эти 7z,rar архивы автоматом распаковывались через батник когда надо

    распаковывались там же, где лежит архив? "Когда надо" батник должен определять сам или всё-таки распаковывать сразу как запущен?
    Цитата:
    поудалять когда надо распакованные файлы,не сразу после распаковки ,а когда надо будет
    Опять же - "когда надо" как определяется?..


    ----------
    http://www.imho.ws

    Всего записей: 2388 | Зарегистр. 12-10-2006 | Отправлено: 00:08 22-11-2016
    Linksach



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    BorlandIMHO
     
    Да,файлы должны распаковываться в тех папках где лежит архив
     
    Для удаления наверное нужен другой отдельный батник .Просто батник удаления распакованных файлов ,находящихся в папках с архивами
     
    Насчёт Notepad ++ я так и применяю ,только батники перевожу в эту кодировку,файлы-реже

    Всего записей: 113 | Зарегистр. 11-07-2015 | Отправлено: 00:36 22-11-2016 | Исправлено: Linksach, 00:38 22-11-2016
    BorlandIMHO

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    С точки зрения последующего удаления - значительно проще распаковывать архив в подпапку, а затем удалять эту подпапку вместе со всем содержимым...
    ArchiveUnpacker.cmd:
    Код:
    @echo off
    set "ROOTFOLDER=x:\path to\RootFolder"
     
    1>nul 2>&1 7z --help ||call :ABORT "Недоступен 7z.exe!"  
    1>nul 2>&1 pushd "%ROOTFOLDER%" ||call :ABORT "Папка "%ROOTFOLDER%" не существует!"  
    for /f  "delims="  %%A in ('dir /B /A:D *') do call :PROCESSFOLDER "%%A"
    popd
    goto :EOF
     
    :ABORT
    echo Аварийное завершение работы!
    echo %~1
    pause
    exit  
     
    :PROCESSFOLDER
    pushd "%~1"
    for /f "delims=" %%B in ('dir /B /A:-D *') do 7z x -o"%%~B Unpacked" -- "%%B"  
    popd  

     
    UnpackedEraser.cmd
    Код:
    @echo off
    set "ROOTFOLDER=x:\path to\RootFolder"
     
    1>nul 2>&1 pushd "%ROOTFOLDER%" ||call :ABORT "Папка "%ROOTFOLDER%" не существует!"  
    for /f  "delims="  %%A in ('dir /B /A:D *') do call :PROCESSFOLDER "%%A"
    popd
    goto :EOF
     
    :ABORT
    echo Аварийное завершение работы!
    echo %~1
    pause
    exit  
     
    :PROCESSFOLDER
    pushd "%~1"
    for /f "delims=" %%B in ('dir /B /A:-D *') do if exist "%%~B Unpacked" rd /s /q "%%~B Unpacked"
    popd  


    ----------
    http://www.imho.ws

    Всего записей: 2388 | Зарегистр. 12-10-2006 | Отправлено: 01:08 22-11-2016 | Исправлено: BorlandIMHO, 01:08 22-11-2016
    Elroir



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

    Цитата:
    Еще вопрос, можно ли как то Из папки напр.  C:\1\ копировать или перемещать в D:\1\ ПАПКИ  старше 7 дней?

     

    Код:
     
    FORFILES /D -7 /P C:\1 /C "cmd /c if @isdir==TRUE xcopy @file D:\1\ /e /q"
     


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

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 03:17 22-11-2016
    ALEX173



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

    Цитата:
    FORFILES /D -7 /P C:\1 /C "cmd /c if @isdir==TRUE xcopy @file D:\1\ /e /q"  

    копирует, но только файлы, т.е в C:\1 лежат три папки. в них файлы, а D:\1\ копируют только фалы которые лежали в папках.  
    Как скопировать папки с файлами, а не только файлы?
     
     
    О! вот, все делает что нужно, только из диска С:\ - отказано в доступе.  почему то  (((
     
    FORFILES.exe /p "G:\1\" /C "cmd /c move /y @path H:\77777" /d -3

    Всего записей: 50 | Зарегистр. 19-08-2012 | Отправлено: 08:47 22-11-2016 | Исправлено: ALEX173, 09:12 22-11-2016
    ipmanyak



    Platinum Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ALEX173 move это не копирование, а перемещение. Отказано в доступе, видимо потому, что батник надо запустить от Администратор так как каталог в корне диска С.
     
     
     
    Добавлено:
    ALEX173  

    Код:
     
    ECHO ON                                                                                                    
    FOR /D %%i IN (C:\1) DO (                                                                                
     echo %%i                                                                                                
     FORFILES /D -7 /P %%i /C "cmd /c  if @isdir==TRUE  (echo @file&&MD E:\1\@file&&cd E:\1\@file) " )      
                            )                                                                                
     FORFILES /D -7 /P C:\1 /C "cmd /c  if @isdir==TRUE xcopy @file E:\1\@relpath /e /q "                    
     FORFILES /D -7 /P C:\1 /C "cmd /c  if @isdir==FALSE xcopy @file E:\1\ /q "                              
    PAUSE                                                                                                    
     

    батник некузявый так как использует 3 прохода одного каталога, что не есть гуд, но задача решена. Думать как избавиться от 3 проходов мне лень, сам думай.
    сначала создается структура каталогов в целевом каталоге, затем копируются файлы в этих подкаталогах, затем копируются файлы, не входящие в подкаталоги, а из корня каталога.
    P.S.
    Недостаток команды FORFILES, что она работает только с файлом или  набором файлов, а не каталогов.

    ----------
    В сортире лучше быть юзером, чем админом...

    Всего записей: 11724 | Зарегистр. 10-12-2003 | Отправлено: 10:49 22-11-2016 | Исправлено: ipmanyak, 12:03 22-11-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