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

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

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



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

Цитата:
if /i "%PROCESSOR_ARCHITECTURE%"=="x86" for /f "tokens=*" %%a in ('dir /b ".\internet\firefox\Firefox Setup *.exe"^|findstr /e /v "\-x64\.exe"') do ".\internet\firefox\%%a" -ms
if /i "%PROCESSOR_ARCHITECTURE%"=="AMD64" for /f "tokens=*" %%a in ('dir /b ".\internet\firefox\Firefox Setup *.exe"^|findstr /e "\-x64\.exe"') do ".\internet\firefox\%%a" -ms

переделал под более универсальный вариант:
 
 set path_to_program=.\internet\firefox
 if /i "%PROCESSOR_ARCHITECTURE%"=="x86" for /f "tokens=*" %%a in ('dir /b "%path_to_program%\*.exe"^|findstr /e /v "x64.exe"') do "%path_to_program%\%%a" -ms
 if /i "%PROCESSOR_ARCHITECTURE%"=="AMD64" for /f "tokens=*" %%a in ('dir /b "%path_to_program%\*.exe"^|findstr /e "x64.exe"') do "%path_to_program%\%%a" -ms
 
из плюсов:
добавил одну переменную path_to_program
убрал привязку к названию файла, сделал *.exe
 
все отлично работает, если у инсталятора в название в самом конце стоит x64.exe.
 
но вот если встречается файл по типу:
 
winrar-x64-540ru.exe
wrar540ru.exe
 
регулярка не работает.
 
нужна помощь, может сделать еще универсальный вариант *x64*.exe.

Всего записей: 1303 | Зарегистр. 23-04-2007 | Отправлено: 16:05 12-01-2017 | Исправлено: redson, 16:11 12-01-2017
Pasha_ZZZ



Platinum Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
redson
Цитата:
нужна помощь, может сделать еще универсальный вариант *x64*.exe.
.exe и так в dir фильтруется, так что это совсем не нужно, значит и FINDSTR тоже ни к чему.
Цитата:
find /i "x64"
и
Цитата:
find /i /v "x64"

Всего записей: 10071 | Зарегистр. 11-03-2002 | Отправлено: 16:12 12-01-2017
redson



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
вот так?
 
 set path_to_program=.\utils\winrar
 if /i "%PROCESSOR_ARCHITECTURE%"=="x86" for /f "tokens=*" %%a in ('dir /b "%path_to_program%\*.exe"^|find /i "x64"') do "%path_to_program%\%%a" /S /RI
 if /i "%PROCESSOR_ARCHITECTURE%"=="AMD64" for /f "tokens=*" %%a in ('dir /b "%path_to_program%\*.exe"^|find /i /v "x64"') do "%path_to_program%\%%a" /S /RI

Всего записей: 1303 | Зарегистр. 23-04-2007 | Отправлено: 16:19 12-01-2017
Pasha_ZZZ



Platinum Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
redson
Местами надо поменять: для х86 с /v, x64 - без /v
 
Добавлено:

Цитата:
@echo off
 
call :LaunchApp ".\internet\firefox\Firefox Setup *.exe" -ms
rem Add :LauchApp commands here...
 
goto :eof
 
:LaunchApp
set AppStr=%1
set "AppDir=%~dp1"
if /i "%PROCESSOR_ARCHITECTURE%"=="x86" for /f "tokens=*" %%a in ('dir /b %AppStr%^|find /i /v "x64"') do echo "%AppDir%%%a" %2 %3 %4 %5 %6 %7 %8 %9
if /i "%PROCESSOR_ARCHITECTURE%"=="AMD64" for /f "tokens=*" %%a in ('dir /b %AppStr%^|findstr /i "x64"') do echo "%AppDir%%%a" %2 %3 %4 %5 %6 %7 %8 %9
goto :eof

Всего записей: 10071 | Зарегистр. 11-03-2002 | Отправлено: 16:22 12-01-2017
redson



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Pasha_ZZZ
спасибо за ценные советы и код, чувствуется ты крутой спец. все работает. остановился на варианте с find

Всего записей: 1303 | Зарегистр. 23-04-2007 | Отправлено: 07:37 13-01-2017 | Исправлено: redson, 07:38 13-01-2017
K0MMEHTAT0P



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Доброго времени.
В bat файле две задачи,есть возможность как то  прописать между ними интервал времени  запуска?

Всего записей: 191 | Зарегистр. 23-08-2015 | Отправлено: 11:54 16-01-2017 | Исправлено: K0MMEHTAT0P, 14:41 16-01-2017
Xant1k



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подскажите как именно работает параметр NUL? И в чём разница между nul и null. А так же надо ли брать его в "".

Всего записей: 2918 | Зарегистр. 20-02-2009 | Отправлено: 20:58 17-01-2017
Pasha_ZZZ



Platinum Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Xant1k
Цитата:
Подскажите как именно работает параметр NUL
NUL не параметр, а устройство для вывода в никуда.
Цитата:
И в чём разница между nul и null
NUL - в никуда, NULL - в файл с именем NULL
Цитата:
А так же надо ли брать его в ""
С какой целью?

Всего записей: 10071 | Зарегистр. 11-03-2002 | Отправлено: 21:08 17-01-2017
Xant1k



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

Цитата:
С какой целью?

Для браузера предлагается ключ запуска --disk-cache-dir=NUL и также встретилось "NUL".
 
И всё таки, данные будут затираться ещё до их появления в папке или запись будет куда-то вестись и затираться сиюсекунду?

Всего записей: 2918 | Зарегистр. 20-02-2009 | Отправлено: 00:40 19-01-2017 | Исправлено: Xant1k, 00:44 19-01-2017
Valery_Sh



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Xant1k
 
Никуда не пишется. Считай NUL (/dev/null в *nix) чёрной дырой. Записи по факту нет.

Всего записей: 2042 | Зарегистр. 30-06-2008 | Отправлено: 01:01 19-01-2017
nicka



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
:offtop:
никто не знает где этот человек Alex_Piggy ? в личке также не отвечает...

Всего записей: 754 | Зарегистр. 01-10-2002 | Отправлено: 10:19 24-01-2017
cbah

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
знающие, помогите незнающему... напишите, пожалуйста, батник, который переименовывает мп3 файлы с разными именами в 001.мп3, 002.мп3 и т.д. это нужно для аудиокниг. если меньше сотни мп3шек, тогда 01.мп3, 02.мп3... ну так, чтобы я скачал аудиокнигу, распаковал ее в папку, положил туда этот батник, запустил его и он мне, не путая порядок файлов, переименовал всю аудиокнигу. спасибо.

Всего записей: 477 | Зарегистр. 13-11-2007 | Отправлено: 00:14 28-01-2017 | Исправлено: cbah, 00:23 28-01-2017
Bolenic



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
cbah
Цитата:
... переименовывает мп3 файлы с разными именами в 001.мп3, 002.мп3 и т.д. ...

"Групповое переименование" в Total Commander чем не устраивает?

Всего записей: 2548 | Зарегистр. 30-03-2006 | Отправлено: 00:34 28-01-2017 | Исправлено: Bolenic, 00:35 28-01-2017
cbah

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Bolenic, спасибо, нет. есть много программ-ренеймеров, хотелось бы батником, знаю, что можно, но не знаю как...

Всего записей: 477 | Зарегистр. 13-11-2007 | Отправлено: 00:38 28-01-2017
Xant1k



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Пытаюсь получить хэш-сумму с помощью консольной утилиты. Расположил батник рядом с ней, перетаскиваю на батник файл > создаётся итоговый файл, но пустой.

Код:
@echo off
cd /D "%~dp0"
start rhash.exe --percents --printf=%{sha-256}\n%h\n%m\n%c\n%f\n%s\n%{mtime} --output=15

Что не так делаю?
И ещё хотелось бы получить итоговый файл рядом с перетаскиваемым файлом.

Всего записей: 2918 | Зарегистр. 20-02-2009 | Отправлено: 02:51 28-01-2017
BorlandIMHO

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

Код:
@echo off
rem Переименование файлов в заданной папке
if "%~1" == "" (echo Использование: %~nx0 "x:\path to\папка с mp3".) && exit
pushd "%~1" || call :ERR "Папка %~1 не существует!"
set /a FILESCOUNT=0
chcp 437
for /f "usebackq" %%A in (`dir *.mp3 ^| find /i "File(s)"`) do set /a FILESCOUNT=%%A
chcp 866
if %FILESCOUNT% EQU 0 call :ERR "Папка %~1 не содержит mp3 файлов!"
 
setlocal ENABLEDELAYEDEXPANSION
set /a COUNTER=0
for /f "usebackq delims=" %%B in (`dir /b *.mp3`) do (
    set /a COUNTER=!COUNTER!+1
    if !FILESCOUNT! LSS 10 (
        set NEWNAME=!COUNTER!
    ) else if !FILESCOUNT! LSS 100 (
        set NEWTEMPNAME=0!COUNTER!
        set NEWNAME=!NEWTEMPNAME:~-2!
    ) else if !FILESCOUNT! LSS 1000 (
        set NEWTEMPNAME=00!COUNTER!
        set NEWNAME=!NEWTEMPNAME:~-3!
    ) else call :ERR "Папка %~1 содержит более 1000 mp3 файлов. Мы так не договаривались!"
    1>nul 2>&1 ren "%%~nxB" "!NEWNAME!.mp3"
 
)
endlocal
popd
goto :EOF
 
:ERR
echo ERROR: %~1
pause
goto :EOF
 

Где-то так, насколько я понял задачу...

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

Всего записей: 1240 | Зарегистр. 12-10-2006 | Отправлено: 03:24 28-01-2017 | Исправлено: BorlandIMHO, 03:53 28-01-2017
thejustsoul



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

Цитата:
Что не так делаю?
И ещё хотелось бы получить итоговый файл рядом с перетаскиваемым файлом.

Пробуйте (может и криво, но вроде робит):

Код:
@for %%I in (%*) do @"%~dp0rhash.exe" --percents --printf=%%{sha-256}\n%%h\n%%m\n%%c\n%%f\n%%s\n%%{mtime} --output="%%~fI.sum.txt" %%I

Либо:

Код:
@echo off
for %%I in (%*) do (
    if exist %%I (
        "%~dp0rhash.exe" --percents --printf=%%{sha-256}\n%%h\n%%m\n%%c\n%%f\n%%s\n%%{mtime} --output="%%~fI.sum.txt" %%I
    ) else echo %%I not found
)
pause

Всего записей: 1782 | Зарегистр. 30-03-2014 | Отправлено: 18:41 28-01-2017 | Исправлено: thejustsoul, 20:09 28-01-2017
Xant1k



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
thejustsoul
Респект! работают оба варианта
 
P.S.: Пошёл перечитывать про циклическую обработку, а то моё понимание по этой команде ограничивается как "применять для входного списка, допустим переименовать указанные файлы/папки, или строки изменить внутри тестового файла

Всего записей: 2918 | Зарегистр. 20-02-2009 | Отправлено: 21:51 28-01-2017
cbah

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
BorlandIMHO, спасибо, но тут слишком круто. мне не разобраться. у меня ничего не заработало не ругайтесь на меня за то, что я ничего не понимаю...
я позволил себе удалить всю верхнюю часть после @echo off до setlocal ENABLEDELAYEDEXPANSION: мы ведь знаем, что в папке, куда мы копируем бат файл, мп3шки таки лежат. еще я удалил все после endlocal до конца, уж извиняюсь. все заработало. только небольшая неувязочка: хорошо бы иметь трехзначные имена всех файлов: 001.мп3, 010.мп3 и т.д., а то глупый плеер после 1.мп3 играет 10.мп3, 11.мп3 и т.д.
зы: а это принципиально ограничивать количество файлов тысячью шт.? может, пусть дальше переименовывает?
ззы: бат файл в папке у меня тож в мп3 переименовался ну, ничего, его можно удалить, его копия ведь есть. или обратно переименовать в бат. главное, чтобы он не сбил нумерацию мп3шек...

Всего записей: 477 | Зарегистр. 13-11-2007 | Отправлено: 01:07 29-01-2017 | Исправлено: cbah, 01:10 29-01-2017
thejustsoul



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Xant1k
Да, скрипт получает список файлов которые передаются в качестве параметра(ов) "%*". Дальше уже в цикле подставляет путь до файла (если он есть) "%%I" как параметр для "rhash.exe" (который на выходе берет путь до файла (который передали) и добавляет "sum.txt" к имени). А строку типа "%{sha-256}\n" нужно экранировать, символом "%" =)

Всего записей: 1782 | Зарегистр. 30-03-2014 | Отправлено: 01:38 29-01-2017
   

Страницы: 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.Board
© Ru.Board 2000-2020

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru