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

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

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

Цитата:
Код:
if  0 eql 00 echo 0 and 00
 
Выдаёт "непредвиденное появление: eql"  

 
Век живи, век учись...
EQL - это ошибка в русской справке, а я начитался и думаю - чего это оно не работает.
Нужно использовать EQU:

Код:
if  0 EQU 00 echo 0 and 00

Вот так работает, и нули сравнивает в числовом, а не текстовом формате.

Всего записей: 89 | Зарегистр. 28-11-2016 | Отправлено: 02:52 26-07-2017
MAGNet



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

Цитата:
Так сравниваются строковые представления, а не цифровые

irsemi, тебе уже за меня ответили.
дело в том, что все эти псевдо-языки "программирования" не предназначены для сколь-нибудь серьёзных расчетов и не заточены под "математику", они более подходят для обработки строк и потому любая переменная/константа в них по умолчанию считается строкой. Если нужно явно определить переменную как число, то нужно использовать команду SET с ключом /a

Всего записей: 2074 | Зарегистр. 31-03-2004 | Отправлено: 05:04 26-07-2017
thejustsoul



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подскажите, есть ли ограничение на количество строк в скобках, пример:

Код:
(
echo 123 123 123
echo 456 456 456
echo ... ... ...
)>1.txt

 
Ради эксперимента пробую загнать мелкие нужные exe в base64 и из скрипта уже распаковывать их во временную папку на выполнение, но у больших файлов, получается много строк и перенаправление в файл не работает, скрипт просто падает.

Всего записей: 1789 | Зарегистр. 30-03-2014 | Отправлено: 13:13 27-07-2017
MAGNet



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
thejustsoul, powershell тебе в помощь
вот тут у человека тоже не получилось сразу, и ему помогли. изучи тему - https://stackoverflow.com/questions/42592518/encode-decode-exe-into-base64

Всего записей: 2074 | Зарегистр. 31-03-2004 | Отправлено: 21:24 27-07-2017
thejustsoul



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

Цитата:
вот тут у человека тоже не получилось сразу, и ему помогли. изучи тему - https://stackoverflow.com/questions/42592518/encode-decode-exe-into-base64

Не хочу powershell, хочу bat\cmd -) Но раз невозможно это в батнике сделать без повершела, то и фиг с ним.

Всего записей: 1789 | Зарегистр. 30-03-2014 | Отправлено: 02:10 28-07-2017
Baltazar500



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Столкнулся со странной ситкацией, может кто в курсе как её разрулить ?
 
При использовании программ фонового запуска батников типа hidcon или nircmd с командой execmd при попытке удаления веток/ключей из реестра через "reg" ничего не выходит. При обычном запуске батника всё отрабатывает на ура. Добавление запуска от имени администратора скрывающим батники программам не даёт никакого эффекта. Через reg при фоновом запуске без проблем добавляются ключи, а вот с удалением - облом.
 
Что это ? Встроенный механизм безопасности win 7 x64 ? Или ещё что (антивирус кстати молчит, если что) ? Если бы эта дурь была с одной программой, то куда не шло, но этот эффект проявляется на двух не связанных между собой программах фонового запуска bat/cmd O_o
 
upd: Занятно, но xStarter тоже не смог грохнуть ключ  в ветке HKCR\CLSID\... Попробовал поиграться с разрешениями, но т.к. мой скилл в этом плане прокачан не настолько, ничего не вышло.

Всего записей: 2089 | Зарегистр. 19-09-2011 | Отправлено: 06:14 31-07-2017 | Исправлено: Baltazar500, 08:23 31-07-2017
tmrx

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

Цитата:
Добавление запуска от имени администратора скрывающим батники программам не даёт никакого эффекта

 
А если так?
 

Цитата:
runassystem [Process and Command-Line Parameters]  
 
Run a process with a 'SYSTEM' user. This command only works on Windows 7/8/2008/Vista. It also requires full administrator rights, so you should run it with elevatecmd command.  
 
Example:  
elevatecmd runassystem c:\windows\regedit.exe

Всего записей: 206 | Зарегистр. 27-01-2016 | Отправлено: 09:03 31-07-2017 | Исправлено: tmrx, 09:04 31-07-2017
Baltazar500



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
tmrx, гм, а разве эта команда у nircmd будет совместно работать с execmd ? Тут её скорее придётся запихивать в сам батник, который в свою очередь будет запущен через execmd или использовать psexec -s ...
 
На досуге погляжу как обстоит дело, но не горит, ибо "выстрелил" вариант с vbs-скриптом.

Всего записей: 2089 | Зарегистр. 19-09-2011 | Отправлено: 10:12 31-07-2017
irsemi

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

Цитата:
 у больших файлов, получается много строк и перенаправление в файл не работает, скрипт просто падает.

 
Ради эксперимента проверил у себя на win 7 x64
5000 строк по 100 символов обрабатывает нормально, на 6000 по 100 символов - падает.
 
Если очень надо, можно поделить задачу на части.
Сначала создаем пустой файл:
Код:
echo. 2>file.ext

Перенаправляем именно второй поток - он пустой.
Затем блоками по несколько тыс. строк дописываем:

Код:
 
(  
echo 0000 abcd ...
echo ... ... ...
echo 0999 abcd ...
) >>file.ext
 
(  
echo 1000 abcd ...
echo ... ... ...
echo 1999 abcd ...
) >>file.ext
 

В эксперименте 5 МБ успешно сохранилось.
 

Всего записей: 89 | Зарегистр. 28-11-2016 | Отправлено: 15:12 31-07-2017
thejustsoul



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

Код:
for /f "delims=" %%a in (file.tmp) do >>file2.tmp (echo(echo %%a)


Цитата:
Сначала создаем пустой файл:

Можно и так:
Код:
type NUL>file.ext

Всего записей: 1789 | Зарегистр. 30-03-2014 | Отправлено: 08:28 01-08-2017
irsemi

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

Цитата:
Еще бы автоматизировать разбиение на куски по 5к строк, типа как тут, только еще добавить функцию подсчета строк и дописывание в файл..  

 
Не знаю как в bat, но при помощи JScript это решается так:

Код:
 
//Base64 to BAT converter
//Usage: cscript //NoLogo b64_to_bat.js /file:"myfile.b64" /limit:500 <input.b64 >output.bat
 
var an = WScript.Arguments.Named;
var f =  an.Item('file');  if(!f) f = "test.b64"; //Destination file name
var l = +an.Item('limit'); if(!l) l = 1000; //Lines per block 
var i = WScript.StdIn, o = WScript.StdOut;
 
o.WriteLine( '@echo >nul 2>"'+ f +'"' );
while(!i.atEndOfStream) {
  o.WriteLine( '@(' );
  for(var c=0; c<l && !i.atEndOfStream; c++) {
    var t = i.ReadLine().replace(/[()<>^|&"]/g, '^$&').replace(/%/g, '%%');
    o.WriteLine( 'echo'+ (t.match(/\S/)?' ':'.') + t ); 
  }
  o.WriteLine( ') >>"'+ f +'"' );
}
 

 
Использование:

Код:
cscript //NoLogo b64_to_bat.js /file:"myfile.b64" /limit:500 <input.b64 >output.bat

 
Где:
//NoLogo - скрыть заголовок WSH
b64_to_bat.js - наш скрипт.
/file: - имя файла, подставляемое в создаваемый батник
/limit: - строк в одном блоке (необязательно, по умолчанию 1000)
< - исходный текст подаем на stdin
> - вывод получаем с stdout
 
Для пустых или состоящих из одних пробелов строк вместо echo подставляется echo.
Спецсимволы ()<>^|& экранируются символом ^
 
Добавлено 18.08.2017:
Исправлено экранирование символов % и "

Всего записей: 89 | Зарегистр. 28-11-2016 | Отправлено: 18:40 01-08-2017 | Исправлено: irsemi, 16:27 18-08-2017
TVN



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
wadimuss
С Opera, BitTorrent и т.д. все ОК! AdwCleaner проблема, что не так?

Всего записей: 2605 | Зарегистр. 19-09-2003 | Отправлено: 14:26 02-08-2017 | Исправлено: TVN, 14:26 02-08-2017
wadimuss

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

Код:
@echo off
CD /d "%~dp0"
 
echo ... AdwCleaner
 
"%~dp0..\Scripts\wget.exe" -N --waitretry=5 -t5 -T15 "https://toolslib.net/downloads/finish/1-adwcleaner/" -O "%~dp0down.txt"
findstr /R /C:"It does not work" "%~dp0down.txt" >"%~dp0down1.txt"
FOR /F "usebackq tokens=2 delims==>" %%a in ("%~dp0down1.txt") do set f=%%a
set f=%f:~1,-1%
"%~dp0..\Scripts\wget.exe" -N --waitretry=5 -t5 -T15 "https://toolslib.net%f%" -O "%~dp0adwcleaner.exe
findstr /R /C:"Thank you for downloading AdwCleaner (" "%~dp0down.txt" >"%~dp0down1.txt"
FOR /F "usebackq tokens=2 delims=()" %%a in ("%~dp0down1.txt") do set f=%%a
echo %f%> "%~dp0version.txt"
del "%~dp0down.txt"
del "%~dp0down1.txt"

 
в файле version.txt версия (7.0.1.0)

Всего записей: 1029 | Зарегистр. 24-11-2008 | Отправлено: 04:14 03-08-2017
Wu Tang



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

Цитата:
побился код. там где рожа должно быть "двоеточие" delay

это батник, который будет висеть в диспетчере?
YuS_2

Цитата:
Эти значения редактируемые...

где?
MAGNet

Цитата:
Wu Tang, можно встать в поле и написать там любое значение

и минуты и секунды?

----------
Всему свое время и каждому свой час!
Хочешь жить - умей вертеться!

Всего записей: 3788 | Зарегистр. 15-10-2007 | Отправлено: 08:56 03-08-2017
YuS_2



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

Цитата:
где?  

тама...
Попробовать, что мешает?

Всего записей: 3218 | Зарегистр. 03-02-2009 | Отправлено: 09:40 03-08-2017
Sinclair83

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Wu Tang
Да. При запуске батника в "Диспетчере задач" будет виден процесс cmd.exe. Собственно как и любого другого.

Всего записей: 757 | Зарегистр. 07-01-2009 | Отправлено: 11:41 03-08-2017
Lepar



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Задача: передать в подпрограмму имена всех файлов определенных расширений в определенной папке. Можно ли сделать это одной строкой? Пока делаю так:
Код:
FOR /R D:\DIR    %%F IN (*.EXT1) DO CALL :DO_ONE "%%F"
FOR /R D:\DIR    %%F IN (*.EXT2) DO CALL :DO_ONE "%%F"


Всего записей: 510 | Зарегистр. 01-06-2017 | Отправлено: 05:11 04-08-2017 | Исправлено: Lepar, 05:13 04-08-2017
Pasha_ZZZ



Запрет на пост
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Lepar
... in (*.ext1 *.ext2) do....

Всего записей: 12396 | Зарегистр. 11-03-2002 | Отправлено: 06:53 04-08-2017
thejustsoul



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

Код:
CD /d "%~dp0"

Надо так:

Код:
pushd "%~dp0"
...
popd

Иначе при запуске батника на сетевых дисках папках будут проблемы.

Всего записей: 1789 | Зарегистр. 30-03-2014 | Отправлено: 09:03 04-08-2017 | Исправлено: thejustsoul, 09:18 04-08-2017
Pasha_ZZZ



Запрет на пост
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
thejustsoul
Не на сетевых дисках. А прямо с UNC-путей. С сетевого диска и CD замечательно сработает.

Всего записей: 12396 | Зарегистр. 11-03-2002 | Отправлено: 09:08 04-08-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.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru