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

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

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

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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

Открыть новую тему     Написать ответ в эту тему

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

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



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подскажите, пожалуйста, батник или скрипт PowerShell для решения такой задачи.
В папке имеется около 400 файлов .cmd, примерно 90% из них требуют редактирования следующим образом.
1. Нужно один параметр (условно --aaa, один и тот же для всех) заменить на другой (условно --bbb, один и тот же для всех).
2. Дату изменения всех редактируемых файлов нужно оставить прежнюю.
Дело в том, что остальные примерно 10% самых свежих файлов уже созданы с новым параметром (тем самым условным --bbb). Сортировка файлов в папке требуется по дате изменения, поэтому очень важно, чтобы отредактированные файлы в списке стояли бы раньше этих свежих файлов.

Всего записей: 487 | Зарегистр. 31-01-2015 | Отправлено: 12:11 08-12-2023
ewild

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

Код:
 
$oldtext = '--aaa'
$newtext = '--bbb'
 
$files   = Get-ChildItem $pwd -recurse -filter *.cmd
 
foreach   ($file in $files) {
$i       = $file.FullName
$record  = (Get-Item -Literal "$i").LastWriteTime
$content = [System.IO.File]::ReadAllText($i)
$content = $content.Replace($oldtext,$newtext)
$content = $content.Trim()
[IO.File]::WriteAllLines($i,$content)
(Get-Item  $i).LastWriteTime = $record}

Всего записей: 1194 | Зарегистр. 13-08-2005 | Отправлено: 16:44 08-12-2023
notinthewoods



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ewild
Спасибо большое. Получилось, как нужно. Есть только нюанс - во всех файлах .cmd в конце кода добавился переход на новую строку (там, где его не было).

Всего записей: 487 | Зарегистр. 31-01-2015 | Отправлено: 22:22 08-12-2023
ewild

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

Код:
$files   = Get-ChildItem $pwd -recurse -filter *.cmd
foreach   ($file in $files) {
$i       = $file.FullName
$record  = (Get-Item $i).LastWriteTime
$content = (Get-Content $i -Raw) -replace "(?s)\s*$"
[IO.File]::WriteAllText($i,$content)
(Get-Item  $i).LastWriteTime = $record
}


Всего записей: 1194 | Зарегистр. 13-08-2005 | Отправлено: 02:10 09-12-2023 | Исправлено: ewild, 02:11 09-12-2023
notinthewoods



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ewild
Благодарю еще раз. Переходы на новую строку в конце кода исчезли.
Впрочем, насчет этих переходов вот нагуглил:

Цитата:
На практике отсутствие перехода на новую строку в конце файла батника (или любого другого скрипта) не является принципиальным отличием в его функциональности. Оба скрипта будут выполняться в большинстве случаев аналогичным образом.
В операционных системах, таких как Windows, командный интерпретатор (cmd.exe) должен правильно обработать и выполнить команды, представленные в бат-файле, даже если в конце файла нет перехода на новую строку. Некоторые текстовые редакторы автоматически добавляют переход на новую строку в конце файла, чтобы соблюсти стандарты.
Тем не менее, есть ситуации, когда отсутствие перехода на новую строку может привести к проблемам. Например, если этот бат-файл объединяется с другим текстом, то может возникнуть проблема слияния строк.
Также, при использовании определенных инструментов или скриптов, отсутствие перехода на новую строку может привести к нежелательному поведению.
В целом, рекомендуется добавлять переход на новую строку в конце файла для соблюдения общих стандартов форматирования и предотвращения потенциальных проблем совместимости.

Всего записей: 487 | Зарегистр. 31-01-2015 | Отправлено: 14:05 09-12-2023
FiLinX



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Не совсем по теме, но считаю всё же связанное это:
Вобщем на моём древнебуке под ХР решил заюзать я батник, чтоб получать линк потока с ютубин-рутубин и вручную копипастить его в потплеер:

Код:
for /f "delims=" %%i in ('
 mshta "javascript:var x=clipboardData.getData('text');if(x) new ActiveXObject('Scripting.FileSystemObject').GetStandardStream(1).Write(x);close();"
') do set ClipboardData=%%i
D:\SOFT\UTILL\PotPlayer\Extension\Media\PlayParse\yt-dlp.exe -g -f "[height<=?480]" "%ClipboardData%"
pause

Но вот тут я столкнулся с проблемой  -  полученный адрес потока при копировании из консольного окна получается разделённым на много строк (ровно так как в том окне и кажет).
Это меня очень удручает((  Приходиться вручную в тхт файле убирать эти переносы, жуть как неудобно..
И это только на ХР у меня так, с консоли вин10 копируется нормально весь адрес сплошняком.
Вот и вопрос - чё сделать? )
Возможно ли, чтоб этот батник исполнялся бы в другой консоли?  
Я на той ХР уже лет 20 юзаю такую портаблю - Console2
Ну и вот с неё то всё копируется как надо слитно..

Всего записей: 1746 | Зарегистр. 05-05-2010 | Отправлено: 18:28 09-12-2023
BorlandIMHO

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
FiLinX
Вам обязательно копировать в клипборд именно из окна?..
Если нет - то команда clip замечательно отправляет вывод консоли в клипборд прямо из батника без всяких "танцев с бубном":

Код:
echo %ClipboardData% |clip

Если вам нужно вывести то же самое в текстовый файл

Код:
1>"x:\Path to\YourTextFile.txt" echo %ClipboardData%

Никакие переносы строк при этом не добавляются...

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

Всего записей: 2394 | Зарегистр. 12-10-2006 | Отправлено: 14:53 10-12-2023
FiLinX



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
BorlandIMHO
ух.. вот эта clip  меня бы очень даже устроила!
но поймите меня правильно, я совсем не кодун продвинутый)  ну и я непонимаю, как мне в вышеприведённом батнике эту  |clip использовать?
попробовал просто поставить за клипборд  -  но тогда батник вообще не исполняется, а тупо моргнув исчезает и ничего в фоне не завершается..
попробовал вместо клипборд вписать целиком echo %ClipboardData% |clip  -  но опять же всё тоже самое, батник не выполняется..
 
я впринципе то для чего именно этим батником по получению адреса потока хочу, да просто работавший ранее батник отправлявший полученный адрес сразу в потплеер

Код:
 
for /f "delims=" %%i in ('
 mshta "javascript:var x=clipboardData.getData('text');if(x) new ActiveXObject('Scripting.FileSystemObject').GetStandardStream(1).Write(x);close();"
') do set ClipboardData=%%i
D:\SOFT\UTILL\PotPlayer-7sh3\Extention\Media\PlayParse\yt-dlp.exe -f "[height<=?480]" -o - "%ClipboardData%" | D:\SOFT\UTILL\PotPlayer-7sh3\PotPlayerMini.exe -
pause

  -  с недавно перестал у меня там на ХР исправно работать, плеер запускается но зависает на дёргающемся "буферизайия 0%"
а вот вручную в открытом плеере запуск из буфера уже полученного адреса - работает)
правда такое его поведение стало лишь с ютубинами, а со всяких рутубов-океев-мимайлов - нормально ролики в потплеере крутит..

Всего записей: 1746 | Зарегистр. 05-05-2010 | Отправлено: 06:44 11-12-2023
BorlandIMHO

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

Цитата:
как мне в вышеприведённом батнике эту  |clip использовать?

Ну, раз запуск потплюера из батника не работает и вы хотите получить "%ClipboardData% в клипборд - логично же вставить "echo %ClipboardData% |clip" вместо "D:\SOFT\UTILL\PotPlayer-7sh3...."
Ну или, как вариант, вместо "set ClipboardData=%%i" в команде for сразу поставить "echo %%i|clip", а команду запуска потплюера просто убрать...

Собственно, конструкция "|clip" берёт консольный вывод команды/блока команд слева от себя и пихает его в клипборд.
Там только нужно чего-то делать с амперсандами ("&") и "трубой" ("|") в строке - они ломают логику echo...
Что-то типа
Код:
echo D:\SOFT\UTILL\PotPlayer-7sh3\Extention\Media\PlayParse\yt-dlp.exe -f "[height<=?480]" -o - "%ClipboardData:^&=^^^&%" ^| D:\SOFT\UTILL\PotPlayer-7sh3\PotPlayerMini.exe -|clip
 

 
Насколь я понимаю в jscript - ваш код читает клипборд и выдаёт его в консоль, где он присваивается переменной и передаётся команде запуска потплюера. Т.е. линк уже в клипборде на момент запуска батника...
Если вы хотите получить в клипборд всю команду запуска целиком вместе с URL (т.е. добавить к уже имеющемуся URL команду прямо в клипборде) - логично сделать это напрямую в jscript (прочитать клипборд, сформировать команду, записать в клипборд). Может кто из местных гуру и возьмётся код нарисовать...


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

Всего записей: 2394 | Зарегистр. 12-10-2006 | Отправлено: 10:24 11-12-2023
DeZz



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Такой вопрос.
Есть reg-меню для .ps1 файлов.
Можно ли как-то, заставить выдать окно для ввода параметров перед его выполнением стандартными средствами (может vbs)?
 
Я знаю только через костыль на nircmd, но хотелось бы обойтись без него.

Всего записей: 1154 | Зарегистр. 23-01-2006 | Отправлено: 14:29 11-12-2023
Pasha_ZZZ



Platinum Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
DeZz
https://www.vbsedit.com/html/c911e626-555a-41c5-8343-5e8b941469c4.asp

Всего записей: 12395 | Зарегистр. 11-03-2002 | Отправлено: 14:31 11-12-2023
DeZz



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Pasha_ZZZ
типа того. вопрос как теперь это все запихнуть в @:
 

Код:
[HKEY_CLASSES_ROOT\Microsoft.PowerShellScript.1\shell\Выполнить скрипт]
"Icon"="powershell.exe"
[HKEY_CLASSES_ROOT\Microsoft.PowerShellScript.1\shell\Выполнить скрипт\command]
@="????????????????????????????????????"

 
 
для проверки, ps1 скрпит:
 

Код:
$servername=$args[0]
 
if ($servername) {
    Write-Host "arg - $servername"
} else {
    Write-Host 'no arg'
}
 
pause
exit

Всего записей: 1154 | Зарегистр. 23-01-2006 | Отправлено: 15:05 11-12-2023
Pasha_ZZZ



Platinum Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
DeZz
Так сделайте ps1 скрипт, из него вызовите окно ввода, а потом из этого скрипта запустите нужный и передайте параметр... InputBox в PS:

Цитата:
Add-Type -AssemblyName Microsoft.VisualBasic;
$Value = [Microsoft.VisualBasic.Interaction]::InputBox('Set parameter', 'Input par', '')

Всего записей: 12395 | Зарегистр. 11-03-2002 | Отправлено: 15:19 11-12-2023
DeZz



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Pasha_ZZZ
тут весь прикол как раз в том, что reg-меню должно быть универсальным

Цитата:
а потом из этого скрипта запустите нужный и передайте параметр

такой .ps1-файл придется тягать рядом с reg либо добавлять в path - это не совсем то

Всего записей: 1154 | Зарегистр. 23-01-2006 | Отправлено: 15:24 11-12-2023 | Исправлено: DeZz, 15:26 11-12-2023
Pasha_ZZZ



Platinum Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
DeZz
Вы по ПКМ клацаете на нужном скрипте - вызывается сначала фиксированный скрипт с окном ввода (ему передается имя скрипта, на котором вы клацнули), а из этого фиксированного скрипта после окошка вызывается клацнутый скрипт

Всего записей: 12395 | Зарегистр. 11-03-2002 | Отправлено: 15:27 11-12-2023
Inoz2000



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Есть возможность хранить тело скриптов прямо в реестре и обращаться к нему из контекстного меню. Код можно даже предварительно сжать, а затем нужно конвертировать в BASE64, емнип…
Только я не занимаюсь этим шаманством и подсказать не могу.

Всего записей: 4898 | Зарегистр. 23-04-2009 | Отправлено: 15:41 11-12-2023
Arcadaw

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Скажите почему не срабатывает для Firefox нижеследующий код:

Код:
@echo off
 
echo "Тут команды, запускаемые до запуска программы.
 
start /w notepad.exe
 
echo "Тут команды, запускаемые после запуска программы.
 
 

 
Для Нотепада это срабатывает. Открывается окно, запускаются команды до запуска Нотепада, а команды после запуска Нотепада ждут, когда Нотепад закроется.
Для Firefox это не срабатывает. Все команды запускаются сразу же, не ожидая закрытия firefox.
Почему?  
Пришлось сделать переход после выполнения условия. Т.е. бесконечный цикл, пока не получу нужный ответ.

Всего записей: 1506 | Зарегистр. 25-03-2004 | Отправлено: 19:39 11-12-2023 | Исправлено: Arcadaw, 20:58 11-12-2023
Death_INN

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Arcadaw, потому что firefox.exe - это не один процесс, а несколько

Всего записей: 3048 | Зарегистр. 24-10-2002 | Отправлено: 21:40 11-12-2023
DeZz



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

Код:
for %%a in (
 "D:\1"
 "D:\2"
  ) do (
ROBOCOPY /s /e "%%~a" "D:\backup\"
  )

 
можно ли сделать чтобы было скопировано не СОДЕРЖАНИЕ папок 1 и 2 - а САМИ папки (с содержанием)?

Всего записей: 1154 | Зарегистр. 23-01-2006 | Отправлено: 14:03 12-12-2023 | Исправлено: DeZz, 16:48 12-12-2023
ipmanyak



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
DeZz Задание непонятное. Если вам нужны  только имена папок без файлов, то зачем вам  robocopy /?
Используйте  команду  MD  - создание каталогов.
MD "D:\backup\%%~a"

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

Всего записей: 11733 | Зарегистр. 10-12-2003 | Отправлено: 15:34 12-12-2023
Открыть новую тему     Написать ответ в эту тему

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

Компьютерный форум Ru.Board » Компьютеры » Программы » Командная строка, батники, сценарии - bat, cmd


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

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

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru