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

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

Модерирует : gyra, Maz

Maz (19-09-2020 13:36): Командная строка, батники, сценарии (bat, cmd) Часть 6  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199

   

cchameleone



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Командная строка, батники\сценарии (bat, cmd)
(часть 1) (часть 2) (часть 3) (часть 4)
Вопросы, задачи и их решения по работе с командной строкой, файлами, а также сопутствующие ссылки.

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

Смежные темы:
В помощь системному администратору » Автоматизация администрирования
Microsoft Windows » Сценарии Windows

Полезные ссылки:
· Из Windows XP Professional Product Documentation:
» Описание Cmd.exe » Command shell overview
» Using batch files » Using batch parameters » Using filters » Using command redirection operators
 
· Уроки bat-аники (для начинающих): первый и второй
· Курс из 19 лекций "Командная строка и сценарии Windows"
· Попов А. Командная строка и сценарии Windows (PDF). Курс лекций для начинающих
· Бокалий В. Командная строка (pdf-брошюрка в 20 страниц)
· Александров А., Дибров А. Урок bat-аники (pdf)
· Уильям Р. Станек - Командная строка Windows. Справочник администратора
 
· Скрываем консольные окна, Выполнение BAT-скриптов без вызова окна консоли
· cmdow — изменение параметров и видимости дос-окна, Статья в КОМПЬЮТЕРРАONLINE
· Набор GNU утилит для win32
· HS_Packet.7z - Пакет утилит для организации интерфейса в bat-файлах
· Использование ansi.sys
· blat — отправка почты из консоли
· Команды RunDll32
· Quick Batch File Compiler - Позволяет превратить ваш батник в независимое приложение
· Easy Batch Builder+Rus+Crack - Редактор BAT файлов.Через графический интерфейс программы вы сможете быстро конструировать пакетные файлы практически любой сложности. (В комплекте есть Лоадер созданный с помощью Sign Of Misery некоторые антивирусы обзывают его вирусом. Вам решать: ставить или не ставить) (ЗЕРКАЛО)
· Простой способ получать текущую дату всегда в одном формате (не зависит от языков и настроек) ещё и ещё
· Переход из 32-битной версии cmd.exe в 64-битную (1) (2)(3)

Всего записей: 2279 | Зарегистр. 16-10-2015 | Отправлено: 09:22 29-04-2016 | Исправлено: Maz, 08:47 26-03-2020
iglezz

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

Всего записей: 1521 | Зарегистр. 18-02-2003 | Отправлено: 19:04 05-11-2019 | Исправлено: iglezz, 19:26 06-11-2019
VVL99

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
obitt
Цитата:
А что дает
Не обращайте внимание, случайный код.
А abc* завершает все процессы название которых начинается с этих символов; abc1.exe, abc2.exe, abc3.exe ...

Всего записей: 4158 | Зарегистр. 03-02-2011 | Отправлено: 19:12 05-11-2019
FridrGauss

BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
iglezz
Во, рабочий вариант, спасибо. Только там еще в одном месте !!. Понравился поиск [KILLEMALL], что можно любые папки дописывать - думал об этом, но как сделать в этом же файле список не сообразил. Ну и выходит, что можно без call. )

Всего записей: 66 | Зарегистр. 30-10-2019 | Отправлено: 02:55 06-11-2019 | Исправлено: FridrGauss, 06:14 06-11-2019
kot1313



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

Цитата:
или так  

iglezz
Вопросы про Ваш второй вариант скрипта
 
1. Каждая строчка, прописанная ниже [KILLEMALL] ищется только целиком ?
2. И ищется в любом месте на диске?
3. Папка принудительно удаляется вместе с содержимым ?
4. Есть ли какие либо исключения (что не удалится) ?
 
Вообщем, Уточните пожалуйста правила написания для имени удаляемой папки ?
Заранее спасибо

Всего записей: 2522 | Зарегистр. 11-12-2002 | Отправлено: 16:16 06-11-2019 | Исправлено: kot1313, 16:19 06-11-2019
iglezz

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
kot1313
Строка с названием каталога из списка берётся целиком (SomeFolder), затем в цикле перебираются буквы дисков  (A:\ .. Z:\), и результат склейки буквы диска с каталогом (A:\SomeFolder .. Z:\SomeFolder ) передаётся команде RmDir с ключом /S (удалить каталог и всё его содержимое).
 
Вот и всё. Никаких защит и проверок.
Главная опасность -- со стороны спецсимволов cmd (скобки, процент, восклицательный знак) в строке на удаление. Закрывающая скобка сломает скрипт. А, например, строка "%s%" даст на выходе "rmdir /s /q c:\". Последствия, надеюсь, объяснять не надо.

Всего записей: 1521 | Зарегистр. 18-02-2003 | Отправлено: 16:46 06-11-2019
kot1313



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

Цитата:
Строка с названием каталога из списка берётся целиком

То есть чтобы удалить папку, например, Ccleaner +,
находящуюся по адресу C:\Program Files (x86)\Ccleaner +
мне нужно внести в скрипт строчку
Program Files (x86)\Ccleaner +
Эта же строчку удалит подобную папку с содержимым и на всех других дисках (D-Z) ?
И папки на русском тоже удалит, главное чтоб батник был в кодировке 866 ?

Всего записей: 2522 | Зарегистр. 11-12-2002 | Отправлено: 19:14 06-11-2019 | Исправлено: kot1313, 19:27 06-11-2019
iglezz

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
kot1313
Самый простой и быстрый способ узнать как отработает скрипт - закоментировать строку с rmdir.
 
Сделал в скрипт небольшое изменение (set folder=%%A:\%~1 --> set "folder=%%A:\%~1"), которое позволило не ломаться скрипту на строках с круглыми скобками ( Program Files (x86) ).
 
% необходимо удваивать
! как побороть не знаю
 
Возможно надо менять структуру скрипта, чтобы обойтись без костылей для записей в списке на удаление.
 
Хороший показатель того, что для батников есть определённый предел, после которого лучше взять инструмент посовершеннее и не заставляющий извращаться под особенности языка.

Всего записей: 1521 | Зарегистр. 18-02-2003 | Отправлено: 19:44 06-11-2019 | Исправлено: iglezz, 19:52 06-11-2019
FridrGauss

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

Цитата:
закоментировать строку с rmdir.

Только оно будет писать "удалено" даже если не удалилось, например нет прав. Я себе оставил строчку типа

Код:
echo !folder!
rmdir /s /q "!folder!" && echo удалено

В целом изначально задача была быстро удалить эти две папки со всех дисков при переустановке системы, например. Она решена и больше  ничего и не надо)).
kot1313
Тут просто алгоритм с буквами, без всяких проверок и т.п. Остальное допиливаешь как нужно. Если нужно.

Всего записей: 66 | Зарегистр. 30-10-2019 | Отправлено: 20:11 06-11-2019 | Исправлено: FridrGauss, 20:20 06-11-2019
kot1313



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

Цитата:
Тут просто алгоритм с буквами, без всяких проверок и т.п.

Ну дак я это понял сразу.
Вместо удаления можно поставить какое-то другое действие
Поэтому я и уточнял рабту алгоритма поиска и\или перебора.
Теперь мне усё понятно. Спасибо.

Всего записей: 2522 | Зарегистр. 11-12-2002 | Отправлено: 20:54 06-11-2019 | Исправлено: kot1313, 04:21 07-11-2019
VVL99

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
FridrGauss (пост)
Цитата:
set str="%%A:\%1"
Пропустил ~

Код:
set str="%%A:\%~1"

iglezz
Цитата:
! как побороть не знаю
А зачем ! вроде и с % должно работать.

Цитата:
Последствия, надеюсь, объяснять не надо.
Тогда может подтверждение на удаление лучше сделать.
 
FridrGauss
Цитата:
Тут просто алгоритм с буквами, без всяких проверок и т.п.
Это про количество дисков?
 
Для разнообразия ещё два варианта:
Простой
Код:
@echo off
for /f "tokens=1*" %%a in ('fsutil fsinfo drives') do set AFs=%%b
for /f "usebackq skip=9 tokens=*" %%a in ("%~nx0") do call :dfs "%%a"
pause
exit
:dfs
for %%? in (%AFs%) do if exist "%%?%~1" rmdir /s /q "%%?%~1" & echo delete "%%?%~1"
exit /b
::Папки для удаления
(x86)Ccleaner +

И со всякими делами
Код:
@echo off
chcp 1251>nul
set t1=Удалить найденные папки
set t2=Найдена папка для удаления
set t3=Удалена папка
set t4=Не найдено указанных папок
set Fn=0
chcp 866>nul
for /f "tokens=1*" %%a in ('fsutil fsinfo drives') do set AFs=%%b
call :cfdf
if %Fn% GTR 0 goto RE
echo %t4%
exit
:cfdf
for /f "usebackq skip=44 tokens=*" %%a in ("%~nx0") do (
    if "%~1" NEQ "" (
        call :dfs "%%a" 1
    ) else (
        call :dfs "%%a"
    )
)
exit /b
:dfs
for %%? in (%AFs%) do (
    if exist "%%?%~1" (
        if "%~2" NEQ "" (
            rmdir /s /q "%%?%~1"
            Ping -n 2 127.0.0.1 > nul
            if not exist "%%?%~1" echo %t3% "%%?%~1"
        ) else (
            echo %t2% "%%?%~1"
            set /a Fn+=1
        )
    )
)
exit /b
:RE
echo.
echo 1: %t1% %Fn%
set /p tp=:
if %tp% == 1 cls & call :cfdf 1
pause
exit
::Папки для удаления
a 1
(x86)Ccleaner +

Всего записей: 4158 | Зарегистр. 03-02-2011 | Отправлено: 22:16 06-11-2019 | Исправлено: VVL99, 00:00 07-11-2019
FridrGauss

BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
VVL99
Спасибо, надо поразбираться.
А что такое %%? в цикле и зачем там ping? Задержка что-ли?

Всего записей: 66 | Зарегистр. 30-10-2019 | Отправлено: 03:33 07-11-2019
VVL99

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

Цитата:
А что такое %%?
Переменная такая же как %%a %%b, пинг это задержка, что бы проверить удалилась папка или нет, скажем если она была занята процессом или открыта или две папки на одном диске, короче с задержкой показывает правильно, можно проверить:
http://klikr.org/1aa416bbf38b977e830b6cad880b.png
Опят же я не гуру, поэтому лучше меня тоже проверять.
Кстати, на скрине я специально отобразил адреса папок, скажем мы удаляем вложенную папку, т.е. a1 останется, а a 1 будет удалена.

Всего записей: 4158 | Зарегистр. 03-02-2011 | Отправлено: 03:50 07-11-2019 | Исправлено: VVL99, 03:53 07-11-2019
FridrGauss

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

Цитата:
Опят же я не гуру, поэтому лучше меня тоже проверять.

После echo %t4% паузы не хватает.
 

Всего записей: 66 | Зарегистр. 30-10-2019 | Отправлено: 04:40 07-11-2019 | Исправлено: FridrGauss, 04:41 07-11-2019
VVL99

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

Цитата:
После echo %t4% паузы не хватает.  
Видимо удалил, поскольку проверял специально текст.
http://vvl99.narod.ru/cmd/DelFolderList.cmd
 
Добавлено:
Да, важно в одном из циклов есть параметр skip=45, номер указывает на номер строки с комментарием после которого начинается список файлов (::Папки для удаления), если будете менять, то меняйте и цифру, иначе в список попадёт лишнее или часть списка обрежется!

Всего записей: 4158 | Зарегистр. 03-02-2011 | Отправлено: 04:48 07-11-2019 | Исправлено: VVL99, 04:56 07-11-2019
FridrGauss

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

Цитата:
skip=45

Это понятно. Неудобство без поиска. У iglezz есть поиск строчки.

Всего записей: 66 | Зарегистр. 30-10-2019 | Отправлено: 04:58 07-11-2019
VVL99

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

Цитата:
Неудобство без поиска. У iglezz есть поиск строчки.
Можно сделать как у iglezz.
 
Добавлено:
Просто будет проверять весь скрипт, пока не дойдёт до нужной строки, ну или список сделать отдельным файлом и читать его.

Всего записей: 4158 | Зарегистр. 03-02-2011 | Отправлено: 05:02 07-11-2019
iglezz

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Поиск до строки-маркера можно так сделать
Очередной ньюанс батников, который надо учитывать - пустых строк не должно быть, т.к. skip= их учитывает, а for /f пропускает

Всего записей: 1521 | Зарегистр. 18-02-2003 | Отправлено: 10:07 07-11-2019 | Исправлено: iglezz, 10:09 07-11-2019
Alex_Piggy

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Доброе время, iglezz
Прошу прощения, что вмешиваюсь. IMHO, через findstr /n будет лучше. Если надо список куда-то передавать через pipe - то "more +n"

Код:
 
@echo off
for /f "tokens=1 delims=:" %%i in ('findstr /n "[FOLDERLIST]" "%~f0"') do set "skip=%%i"
for /f "usebackq skip=%skip% delims=" %%i in ("%~f0") do echo %%i
more +%skip% "%~f0" | findstr "1"
exit
[FOLDERLIST]
data1
data2

Всего записей: 1889 | Зарегистр. 07-08-2002 | Отправлено: 10:25 07-11-2019
FridrGauss

BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alex_Piggy
Ну вот, поиск списка в одну строку уместился, легко добавить к VVL99 "со всякими делами".  
iglezz
Про пустые строки запомню.

Всего записей: 66 | Зарегистр. 30-10-2019 | Отправлено: 10:53 07-11-2019 | Исправлено: FridrGauss, 10:55 07-11-2019
iglezz

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alex_Piggy
Спасибо за ценное замечание!
Только для корректной работы понадобилось добавить ключ /L команде findstr, иначе она спотыкалась на квадратных скобках.

Всего записей: 1521 | Зарегистр. 18-02-2003 | Отправлено: 11:00 07-11-2019
   

Страницы: 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 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199

Компьютерный форум Ru.Board » Компьютеры » Программы » Командная строка, батники, сценарии (bat, cmd)
Maz (19-09-2020 13:36): Командная строка, батники, сценарии (bat, cmd) Часть 6


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

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

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru