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

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

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

Maz (20-06-2024 22:42): Командная строка, батники, сценарии - bat, cmd (7 часть)  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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 200 201

   

Maz



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

Важно: копируя батник через буфер обмена из форума не забывайте удалять пробелы в конце каждой строки, т.к. в некоторых случаях из-за этого программа будет работать неправильно!!! Чтобы не копировались концевые пробелы из форума, жмите на ссылку "Редактировать" в посте, и уже из редактора копируйте батник без пробелов.
 
Примечание: Большие куски кода заключайте в тэг [ 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. Справочник администратора
 
· Выполнение BAT-скриптов без вызова окна консоли
· cmdow - изменение параметров и видимости дос-окна, Статья в КОМПЬЮТЕРРАONLINE
· Набор GNU утилит для win32
· HS_Packet.7z - Пакет утилит для организации интерфейса в bat-файлах
· blat - отправка почты из консоли
· Easy Batch Builder+Rus+Crack - Редактор BAT файлов.Через графический интерфейс программы вы сможете быстро конструировать пакетные файлы практически любой сложности. (В комплекте есть Лоадер созданный с помощью Sign Of Misery некоторые антивирусы обзывают его вирусом. Вам решать: ставить или не ставить) (ЗЕРКАЛО)
· Простой способ получать текущую дату всегда в одном формате (не зависит от языков и настроек) ещё и ещё
· Переход из 32-битной версии cmd.exe в 64-битную (1) (2)(3)
 
· Архив всевозможных версий cmd.exe (от Windows NT 3.10 до Windows 11 +Win95cmd +ReactOS) и command.com (DOS 5.0 и выше). Старые командные процессоры можно запускать на более новых ОС, хотя не всё может работать корректно. Подробная документация по командам cmd.exe и стандартным утилитам ОС для NT 3.51, NT 5.0 (Windows 2000) и NT 5.2 (Windows Server 2003). Сборник представляет исторический интерес, а также незаменим для тех, у кого появилось желание сделать свои скрипты работоспобными не только на своей версии ОС.
 
· Большой сборник одним архивом: Сотни Win32 утилит командной строки, нетривиальные .cmd файлы, .bat miniperl скрипты (не требующие полноценной установки Perl), FAR Manager с плагинами и настройками, разное для DOS/DOSBox (откуда под Win32 интерес представляют три продвинутых "мультисистемных" .bat файла да ещё, может быть, оболочка Necromancer DOS Navigator с поддержкой LFN и доступом к буферу обмена Windows). Краткие описания всего - в файликах files.bbs

Всего записей: 39128 | Зарегистр. 26-02-2002 | Отправлено: 13:35 19-09-2020 | Исправлено: metatrop, 07:55 29-11-2022
DeZz



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

Код:
ForFiles /p %temp% /s /d -20 /c "cmd /c echo @path"

можно вывести количество файлов (например, 20шт.) вместо их списка?

Всего записей: 1253 | Зарегистр. 23-01-2006 | Отправлено: 14:54 01-08-2022 | Исправлено: DeZz, 14:55 01-08-2022
ipmanyak



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
DeZz  Не совсем прозрачно,  но как-то так:      

Код:
                                           
set q=0                                                                                  
for /f  %%A in ('ForFiles /p %temp% /s /d -20 /c "cmd /c ECHO @PATH"') do set /a q+=1"  
ECHO %q%                                                                                
 



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

Всего записей: 11980 | Зарегистр. 10-12-2003 | Отправлено: 16:54 01-08-2022 | Исправлено: ipmanyak, 16:56 01-08-2022
DeZz



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

Всего записей: 1253 | Зарегистр. 23-01-2006 | Отправлено: 17:22 01-08-2022 | Исправлено: DeZz, 17:24 01-08-2022
ipmanyak



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
DeZz Корзина , хз, не проверял, наверно да  не кладет туда.  И да, forfiles удаляет медленно, так как передает на удаление по 1  файлу.  И потом, мы что ли куда-то торопимся? Хочешь быстро удалять,  юзай  команду DEL /F/Q/S *. * > NUL , но не forfiles. Тогда и в корзину попадет. Использование корзины дополнительно замедляет удаление.


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

Всего записей: 11980 | Зарегистр. 10-12-2003 | Отправлено: 18:18 01-08-2022 | Исправлено: ipmanyak, 18:19 01-08-2022
Arcadaw

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Скажите, а можно ли назначить на какую клавиатурное сокращение свой порядок действий?
Ну, например, нажимаю Alt+PrSc  - копируется активное окно в буфер. У меня есть скрипт, который мне любезно предоставили в этом топике. Этот скрипт PS сохраняет содержимое буфера в файл PNG с датой-временем. Хотелось бы нажать кнопки "Alt+PrSc" и чтобы сразу скопировалось активное окно в буфер и сразу же сбросилось в файл.

Всего записей: 1558 | Зарегистр. 25-03-2004 | Отправлено: 18:47 01-08-2022
BorlandIMHO

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Arcadaw
Если винда 10+ - по идее, работает Win+Alt+PrtScr, без всяких скриптов.
(Через имеющийся, по дефолту, в винде "Xbox Game Bar").
 
 
Добавлено:
DeZz

Цитата:
для  
...
можно вывести количество файлов (например, 20шт.) вместо их списка?

Количество файлов с датой последнего изменения {старше 20 дней}:

Код:
powershell -nologo -command "$(gci -Path '%temp%' | Where-Object {$_.LastWriteTime -lt $(get-date).AddDays(-20)}).count"

Работает быстрее, чем forfiles...
Добавлено:
И можно прикрутить удаление в корзину https://social.technet.microsoft.com/Forums/en-US/ff39d018-9c38-4276-a4c9-3234f088c630/how-can-i-delete-quotto-recycle-binquot-in-powershell-instead-of-remove-item-?forum=winserverpowershell
Но это уже не однострочником, наверное...

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

Всего записей: 2655 | Зарегистр. 12-10-2006 | Отправлено: 22:44 01-08-2022 | Исправлено: BorlandIMHO, 23:33 01-08-2022
gutasiho

Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Просьба помочь с батником бекапа папки, который несколько запусков или дней работает нормально, а затем не может определить текущее время и выдает ошибку:
   
Если все нормально, выходной бекап имеет штамп даты и времени:
This_Folder_Backup_2022-07-25_11-34.zip
Когда возникает баг, создается пустой архив с именем без времени:
This_Folder_Backup_2022-07-25_.zip
Если закомментировать время, бекап создается, багов не возникает:
This_Folder_Backup_2022-07-25.zip
Через какое-то время батник снова работает нормально, закономерность уловить не удается.
Батник в кодировке 866, формат даты в системе 19.11.2021 09:05
Почему в штампе даты формат 2022-07-25, а не 25.07.2022 - бекапов много, а при таком формате по крайним справа цифрам визуально легче отслеживать нужный бекап.
В архиве батник и сопутствующее, в батнике пара строк с пояснениями.

Всего записей: 7755 | Зарегистр. 14-09-2020 | Отправлено: 10:04 02-08-2022
Alex_Piggy

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Доброе время, gutasiho
0. Используйте кавычки вокруг имен файлов.
1. У Вас нет ведущего нуля во времени(возможно и в дате), вместо этого пробел. Просто заменить все пробелы на 0.
.\_maintenance\7za.exe u -tzip -mx9 -ssw -r0 "..\%FOLDER_BACKUP: =0%.zip"

Всего записей: 1906 | Зарегистр. 07-08-2002 | Отправлено: 10:17 02-08-2022 | Исправлено: Alex_Piggy, 10:18 02-08-2022
gutasiho

Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alex_Piggy
Заменил свою строку на вашу, работает. Но теперь и с моей строкой работает, зараза, вот такой плавающий баг. Буду работать с вашей и наблюдать.
Правильно я понял, что только замены строки достаточно?

Всего записей: 7755 | Зарегистр. 14-09-2020 | Отправлено: 10:40 02-08-2022
BorlandIMHO

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
gutasiho
Проблема, я думаю, в период с 00:00 по 09:59:59 ...
И возникает из-за лишнего пробела.
Я решал так. И ниже ещё один вариант (более правильный, ибо не зависит от системной локали).
 

Цитата:
Используйте кавычки вокруг имен файлов.

Ну, это в любом случае полезно.

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

Всего записей: 2655 | Зарегистр. 12-10-2006 | Отправлено: 10:47 02-08-2022 | Исправлено: BorlandIMHO, 11:01 02-08-2022
gutasiho

Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
BorlandIMHO
Цитата:
Проблема, я думаю, в период с 00:00 по 09:59:59 ...
Сегодня точно попало в этот промежуток, но вроде и вне промежутка были баги.
Цитата:
Я решал так. И ниже ещё один вариант
Ыыы, я такую сложную конструкцию не соображу вставить в батник, просьба показать что ею заменить.

Всего записей: 7755 | Зарегистр. 14-09-2020 | Отправлено: 11:23 02-08-2022
BorlandIMHO

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

Код:
@echo off
:: Бекап папки
echo.
echo                 Выполняется бекап этой папки (выходной формат .zip)...
for /f "usebackq tokens=2 delims==" %%A in (`wmic os get LocalDateTime /value`) do set "TIMESTAMP=%%A"
set "FOLDER_BACKUP=This_Folder_Backup_%TIMESTAMP:~0,4%-%TIMESTAMP:~4,2%-%TIMESTAMP:~6,2%_%TIMESTAMP:~8,2%-%TIMESTAMP:~10,2%-%TIMESTAMP:~12,2%"
:: батник Folder_Backup.bat поместить в папку, бекап которой создается
:: папку \_maintenance\ поместить в папку, бекап которой создается
:: файл 7za.exe должен быть в папке \_maintenance\
:: архив бекапа будет помещен рядом с папкой, бекап которой создается
.\_maintenance\7za.exe u -tzip -mx9 -ssw -r0 -- "..\%FOLDER_BACKUP%.zip"
 
pause
goto :EOF
 

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

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

Всего записей: 2655 | Зарегистр. 12-10-2006 | Отправлено: 11:47 02-08-2022
ipmanyak



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
gutasiho  Как сформировал переменную  FOLDER_BACKUP   такую дату и имеешь
 

Код:
@echo off                                                                              
:: Получение даты\времени независимо от региональных настроек и формата                
For /F "skip=1 tokens=1-6" %%A In (                                                    
'wmic Path Win32_LocalTime Get Year^,Month^,Day^,Hour^,Minute^,Second /format:table'  
) Do (                                                                                
    Echo Date in DD.MM.YYYY format: %%A.%%D.%%F                                        
    Echo Time in HH.MM.SS format:   %%B:%%C:%%E                                        
)                                                                                      
 


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

Всего записей: 11980 | Зарегистр. 10-12-2003 | Отправлено: 11:48 02-08-2022
gutasiho

Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alex_Piggy BorlandIMHO ipmanyak
Спасибо за помощь!
 

Всего записей: 7755 | Зарегистр. 14-09-2020 | Отправлено: 11:54 02-08-2022
BorlandIMHO

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

Цитата:
 Получение даты\времени независимо от региональных настроек и формата

Таки докопаюсь...
Приведённый код просто замечателен тем, что позволяет получить численные значения каждого из компонентов даты/времени, но вот ведущих нулей к дате/времени не добавляет. Соответственно, при дне месяца/месяце/часе/минуте/секунде <10  вывод не будет соответствовать заявленному формату.
Дополнительное форматирование (дописать ведущий ноль) можно, к примеру, сделать так (второй пример кода).

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

Всего записей: 2655 | Зарегистр. 12-10-2006 | Отправлено: 14:50 02-08-2022
gutasiho

Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Наступило время Ч с 00:00 по 09:59:59 , батники с правками от BorlandIMHO и Alex_Piggy  время цепляют правильно. Спасибо!

Всего записей: 7755 | Зарегистр. 14-09-2020 | Отправлено: 11:16 03-08-2022
Simoid



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Привет всем.
Прошу помочь написать bat-файл под следующую задачу:
 
1. Есть папка c:\Folder\
2. В ней 100500 подпапок с именем 2022-08-05_09-59-11, 2022-08-03_15-17-10 и т.д.
3. В каждой подпапке много разных текстовых файлов. Среди которых есть файл с единым названием filtered.txt, который присутствует в каждой подпапке.
 
Необходимо:
1. Объединить все filtered.txt (с ненуллевым размером, так как бывают и пустые файлы) в один файл filtered_all.txt.
2. Удалить полные дубли строк из финального файла filtered_all.txt
 
На выходе должен получиться txt-файл с суммарными данными без дублей.

Всего записей: 1048 | Зарегистр. 23-07-2005 | Отправлено: 15:47 05-08-2022 | Исправлено: Simoid, 16:20 05-08-2022
BorlandIMHO

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

Код:
@echo OFF
pushd "c:\Folder"||exit
copy /y nul "filtered_all.txt"
for /f "tokens=*" %%A in ('dir /B /S filtered.txt') do (
    for /F "tokens=*" %%B in ('type %%~fA') do (
        find "%%B" < "filtered_all.txt" || 1>>"filtered_all.txt" echo %%B
    )
)
popd
goto :EOF



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

Всего записей: 2655 | Зарегистр. 12-10-2006 | Отправлено: 16:31 05-08-2022 | Исправлено: BorlandIMHO, 20:25 05-08-2022
Simoid



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
BorlandIMHO
Огромное спасибо за помощь. Сегодня проверю и отпишусь.

Всего записей: 1048 | Зарегистр. 23-07-2005 | Отправлено: 16:38 05-08-2022
Simoid



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
BorlandIMHO
Скрипт зависает после фразы "1 file(s) copied." и ничего визуально не происходит.

Всего записей: 1048 | Зарегистр. 23-07-2005 | Отправлено: 19:00 05-08-2022
   

Страницы: 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 200 201

Компьютерный форум Ru.Board » Компьютеры » Программы » Командная строка, батники, сценарии - bat, cmd
Maz (20-06-2024 22:42): Командная строка, батники, сценарии - bat, cmd (7 часть)


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

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

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru