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

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

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

Цитата:
Лехко.    
 
Код:
@echo off
for /f "delims=" %%A in (' dir /b *.jpg ') do (
    for /f "tokens=1* delims=:" %%B in ('zbarimg "%%~A" ^| findstr /b /i /c:"CODE-128:"') do (
        set NEWNAME=%%~C
        ren "%%~A" "%NEWNAME:~-5%.jpg"
    )
)
 
 
 

Получается
ren "0109122019pf00000767.jpg" "~-5.jpg"
Что-то не то....
Завтра поразбираюсь и с остальным.

Всего записей: 20 | Зарегистр. 25-11-2005 | Отправлено: 20:23 23-01-2020
BorlandIMHO

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

Цитата:
Получается
ren "0109122019pf00000767.jpg" "~-5.jpg"
Что-то не то....

Моя ошибка. % пропустил...
Исправил.

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

Всего записей: 2388 | Зарегистр. 12-10-2006 | Отправлено: 20:44 23-01-2020
NIKZZZZ



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

Код:
@echo off
setlocal enabledelayedexpansion
for /f "delims=" %%A in (' dir /b *.jpg ') do (
    for /f "tokens=1* delims=:" %%B in ('zbarimg "%%~A" ^| findstr /b /i /c:"CODE-128:"') do (
        set NEWNAME=%%~C
        ren "%%~A" "!NEWNAME:~-5!.jpg"
    )
)


Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 05:38 24-01-2020 | Исправлено: NIKZZZZ, 05:44 24-01-2020
Vityaserov

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

Цитата:
@echo off
setlocal enabledelayedexpansion
for /f "delims=" %%A in (' dir /b *.jpg ') do (
    for /f "tokens=1* delims=:" %%B in ('zbarimg "%%~A" ^| findstr /b /i /c:"CODE-128:"') do (
        set NEWNAME=%%~C
        ren "%%~A" "!NEWNAME:~-5!.jpg"
    )
)

в таков виде получается
ren "0109122019pf00000767.jpg" "!NEWNAME:~-5!.jpg"
 
Где можно почитать разобраться о том как работать из CMD, даже не знаю как сформулировать, вот этим токеном?

Всего записей: 20 | Зарегистр. 25-11-2005 | Отправлено: 06:15 24-01-2020
NIKZZZZ



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

Цитата:
в таков виде получается
ren "0109122019pf00000767.jpg" "!NEWNAME:~-5!.jpg"  

А как смотрели?
Если просто заменили @echo off  на @echo on, то именно это и должны увидеть.
Результат то видели, может там то, что вам нужно?
Что-бы нормально увидеть результат добавьте отладочную строку

Код:
echo;ren "%%~A" "!NEWNAME:~-5!.jpg"

 

Цитата:
Где можно почитать разобраться о том как работать из CMD

Конкретно получить справку можно в консоли, к примеру по данному вопросу

Код:
set /?
for /?
setlocal /?

А так, смотрите в шапке.

Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 06:37 24-01-2020 | Исправлено: NIKZZZZ, 06:38 24-01-2020
Vityaserov

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

Цитата:
А как смотрели?
Если просто заменили @echo off  на @echo on, то именно это и должны увидеть.
Результат то видели, может там то, что вам нужно?
Что-бы нормально увидеть результат добавьте отладочную строку
 

Блин действительно - мой косяк - все отлично работает.
Почитаю справки постараюсь разобраться.
 

Всего записей: 20 | Зарегистр. 25-11-2005 | Отправлено: 07:31 24-01-2020
YasnyiPerec



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подскажите пожалуйста, как правильно сделать бат файл. Если пишу так:
 

Код:
@Echo off
for %%i in (файл1, файл2, файл3, файл4, файл5) do set prog=%%i  
Cls
Echo %prog%
ping -n 3 127.0.0.1 > nul
 
Exit

 
то выводится имя одного файла и всё. Ну это понятно - полноценного цикла нет, а вот если написать так:
 

Код:
@Echo off
for %%i in (файл1, файл2, файл3, файл4, файл5) do (
set prog=%%i  
Cls
Echo %prog%
ping -n 3 127.0.0.1 > nul
)
 
Exit

 
То ничего не выводится. Тут что-то с set в цикле? Как извратиться, чтобы работало?

Всего записей: 92 | Зарегистр. 16-12-2019 | Отправлено: 07:34 27-01-2020
Galiley

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

Код:
setlocal enabledelayedexpansion
@Echo off
for %%i in (файл1, файл2, файл3, файл4, файл5) do (
  set prog=%%i  
  REM Cls - это очистка экрана
  Echo !prog!
  ping -n 3 127.0.0.1 > nul
)

Там внизу про это.

Всего записей: 95 | Зарегистр. 02-01-2020 | Отправлено: 07:41 27-01-2020 | Исправлено: Galiley, 07:46 27-01-2020
NIKZZZZ



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

Цитата:
То ничего не выводится. Тут что-то с set в цикле? Как извратиться, чтобы работало?


Код:
@Echo off
setlocal enabledelayedexpansion  
for %%i in (файл1, файл2, файл3, файл4, файл5) do (
set prog=%%i  
Cls
Echo !prog!
ping -n 3 127.0.0.1 > nul
)
 
Exit
 

Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 07:44 27-01-2020
YasnyiPerec



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Galiley и NIKZZZZ, спасибо! Так работает. Но вот если усложнить так:

Код:
@Echo off
setlocal enabledelayedexpansion  
for %%i in (файл1, файл2, файл3, файл4, файл5) do (
set prog=%%i  
tasklist /fi "imagename eq !prog!" | findstr /i /c:"!prog!" >nul
if %errorlevel%==0 (
Echo !prog!
ping -n 3 127.0.0.1 > nul
)
 
)
 
Exit

 
то опять не работает. Идея - если  например файл1...файл5 это программы, то выводить их имя только в том случае, если они запущены. Как подправить ещё?

Всего записей: 92 | Зарегистр. 16-12-2019 | Отправлено: 08:38 27-01-2020 | Исправлено: YasnyiPerec, 08:39 27-01-2020
NIKZZZZ



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
YasnyiPerec
Та-же ошибка

Код:
if !errorlevel!==0 (

 
А лучше вообще не пользоваться блоками, с помощью call и goto от них можно избавиться
 

Код:
@Echo off
for %%i in (файл1, файл2, файл3, файл4, файл5) do call :_xx %%i
Exit
 
:_xx
set prog=%%1  
tasklist /fi "imagename eq %prog%" | findstr /i /c:"%prog%" >nul
if not %errorlevel%== 0 goto :eof
Echo %prog%
ping -n 3 127.0.0.1 > nul
goto :eof

Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 08:59 27-01-2020 | Исправлено: NIKZZZZ, 08:59 27-01-2020
YasnyiPerec



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
NIKZZZZ
Спасибо! Теперь всё работает. А почему блоками лучше не пользоваться? Мне наоборот блоки больше нравятся. Без них порой слишком длинные строки получаются - тяжеловато для восприятия при просмотре на мой взгляд.

Всего записей: 92 | Зарегистр. 16-12-2019 | Отправлено: 09:22 27-01-2020
NIKZZZZ



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

Цитата:
А почему блоками лучше не пользоваться?

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

Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 09:39 27-01-2020
YasnyiPerec



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

Всего записей: 92 | Зарегистр. 16-12-2019 | Отправлено: 10:00 27-01-2020
GCRaistlin



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

Цитата:
А лучше вообще не пользоваться блоками

Вредный совет.
 
YasnyiPerec

Код:
 
for %%i in (файл1, файл2, файл3, файл4, файл5) do (
set prog=%%i  
setlocal enabledelayedexpansion  
tasklist /fi "imagename eq !prog!" | >nul findstr /i /c:"!prog!" && (
Echo !prog!
ping -n 3 127.0.0.1 > nul
)
endlocal
)
 

Обращаться к FOR-переменной нужно при отключенном delayed expansion, т. к. имя файла может содержать "!".

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

Всего записей: 3962 | Зарегистр. 18-04-2005 | Отправлено: 11:09 27-01-2020
JohnRD

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

Код:
 
set term_new=
for %%I in (term.dll) do (
    echo %%~zI
    if %%~zI EQU 680960 set term_new=%~dp0term_x64_680960.dll
    if %%~zI EQU 681984 set term_new=%~dp0term_x64_681984.dll
    if %%~zI EQU 683520 set term_new=%~dp0term_x64_683520.dll
    if %%~zI EQU 687616 set term_new=%~dp0term_x64_687616.dll
    if %%~zI EQU 688128 set term_new=%~dp0term_x64_688128.dll
    if %%~zI EQU 521216 set term_new=%~dp0term_x32_521216.dll
    if %%~zI EQU 523776 set term_new=%~dp0term_x32_523776.dll
    if %%~zI EQU 543232 set term_new=%~dp0term_x32_543232.dll
    if %%~zI EQU 527872 (
        for %%J in (term.dll) do (
            echo %%~tJ  
            if %%~tJ EQU "13.08.2018 18:41" set term_new=%~dp0term_x32_527872.dll
            if %%~tJ EQU "12.03.2019 00:33" set term_new=%~dp0term_x32_527872_1.dll
        )
    if %%~zI EQU 295936 set term_new=%~dp0term_xp_295936.dll
    )
)
 
echo %term_new%
 

 
файл с датой 13.08.2018 18:41
вывод в каждом форе верный
527872
13.08.2018 18:41
 
как обьединить условия
 
 
заранее благодарен

Всего записей: 205 | Зарегистр. 29-08-2004 | Отправлено: 13:43 27-01-2020
NIKZZZZ



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

Код:
set term_new=
for %%I in (term.dll) do (
    echo %%~zI
    echo %%~tI
    if %%~zI EQU 680960 set term_new=%~dp0term_x64_680960.dll
    if %%~zI EQU 681984 set term_new=%~dp0term_x64_681984.dll
    if %%~zI EQU 683520 set term_new=%~dp0term_x64_683520.dll
    if %%~zI EQU 687616 set term_new=%~dp0term_x64_687616.dll
    if %%~zI EQU 688128 set term_new=%~dp0term_x64_688128.dll
    if %%~zI EQU 521216 set term_new=%~dp0term_x32_521216.dll
    if %%~zI EQU 523776 set term_new=%~dp0term_x32_523776.dll
    if %%~zI EQU 543232 set term_new=%~dp0term_x32_543232.dll
    if %%~zI EQU 295936 set term_new=%~dp0term_xp_295936.dll
    if %%~zI EQU 527872  if "%%~tI" == "13.08.2018 18:41" set term_new=%~dp0term_x32_527872.dll
    if %%~zI EQU 527872  if "%%~tI" == "12.03.2019 00:33" set term_new=%~dp0term_x32_527872_1.dll
)
echo %term_new%
 

Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 14:23 27-01-2020 | Исправлено: NIKZZZZ, 15:12 27-01-2020
JohnRD

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
NIKZZZZ
 
set term_new=
for %%I in (term.dll) do (
    echo %%~zI
    if %%~zI EQU 688128 set term_new=%~dp0term_x64_688128.dll
    if %%~zI EQU 527872  if %%~tI EQU "13.08.2018 18:41" set term_new=%~dp0term_x32_527872.dll
    if %%~zI EQU 527872  if %%~tI EQU "12.03.2019 00:33" set term_new=%~dp0term_x32_527872_1.dll
    echo %%~tI
)  
echo %term_new%
 
только размер  первым эхо и дату вторым
но нет %term_new%
 
Z:\Scripts>term_4.cmd
527872
13.08.2018 18:41
Режим вывода команд на экран (ECHO) отключен.
 
 
 
 
когда с одним if - все хорошо выдает
 
X:\Scripts>term_4.cmd
688128
26.11.2019 17:46
X:\Scripts\term_x64_688128.dll

Всего записей: 205 | Зарегистр. 29-08-2004 | Отправлено: 14:55 27-01-2020 | Исправлено: JohnRD, 15:08 27-01-2020
NIKZZZZ



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
JohnRD
Я немного исправил предыдущий пост, проверьте.
Дата пробел содержит.

Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 15:12 27-01-2020 | Исправлено: NIKZZZZ, 15:23 27-01-2020
JohnRD

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
NIKZZZZ
 
премного благодарен
 
можете прокоментировать кавычки, в чем суть?
 
 
Добавлено:
NIKZZZZ
 
понял.  
 
огромное спасибо

Всего записей: 205 | Зарегистр. 29-08-2004 | Отправлено: 15:24 27-01-2020 | Исправлено: JohnRD, 15:25 27-01-2020
   

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