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

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

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

Maz



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

Важно: копируя батник через буфер обмена из форума не забывайте удалять пробелы в конце каждой строки, т.к. в некоторых случаях из-за этого программа будет работать неправильно!!! Чтобы не копировались концевые пробелы из форума, жмите на ссылку "Редактировать" в посте, и уже из редактора копируйте батник без пробелов.
 
Примечание: Большие куски кода заключайте в тэг [ 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

Всего записей: 39692 | Зарегистр. 26-02-2002 | Отправлено: 22:41 20-06-2024 | Исправлено: Maz, 21:52 28-09-2024
FiLinX



Запрет на пост
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
DeZz
если что, то для ручного:
 В свойства системы - в переменные окружения добавить: DEVMGR_SHOW_NONPRESENT_DEVICES   и присвоить значение 1  
После этого в диспетчере устройств на панели Вид, при нажатии на "показать скрытые устройства"  станут видны все когда либо подключённые девайсы.. которые уже можно будет и удалить

Всего записей: 3255 | Зарегистр. 05-05-2010 | Отправлено: 04:13 08-02-2025
DeZz



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
tmpl
предложу установить https://github.com/chrisant996/clink
там есть удобная история и авто-завершение команд

Всего записей: 1387 | Зарегистр. 23-01-2006 | Отправлено: 11:07 08-02-2025
DeZz



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Помогите с пошиком, плез.  
Делаю мас удаление в корзину. Под админом все ок, а под юзером для файлов которым нужно повышение прав на удаление для каждого выводится запрос uac. Задача - игнорировать такие запросы и тупо логировать мол не смог удалить - нет прав.
 

Код:
        foreach ($file in $filesToDelete) {
            try {
                [Microsoft.VisualBasic.FileIO.FileSystem]::DeleteFile($file.FullName, [Microsoft.VisualBasic.FileIO.UIOption]::OnlyErrorDialogs, [Microsoft.VisualBasic.FileIO.RecycleOption]::SendToRecycleBin)
                $count++
 
                # Update progress bar
                $progressParams.PercentComplete = [math]::Round(($count / $totalFiles) * 100)
                $progressParams.CurrentOperation = "Deleting: $($file.FullName)"
                Write-Progress @progressParams
            } catch {
                Add-Content -Path $logFile -Value "Error deleting $($file.FullName): $_"
                $errorCount++
            }
        }

Всего записей: 1387 | Зарегистр. 23-01-2006 | Отправлено: 11:44 10-02-2025 | Исправлено: DeZz, 13:48 10-02-2025
Roman_Hayretdinov



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
DeZz, http://forum.ru-board.com/topic.cgi?forum=33&topic=7685

Всего записей: 127 | Зарегистр. 19-12-2021 | Отправлено: 17:47 10-02-2025 | Исправлено: Roman_Hayretdinov, 17:48 10-02-2025
LZAA

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

     Есть разные хитроумные способы устроить задержку между выполнением команд в пакетном коде.
     Но есть ли способ сделать задержку запуска исполняемого файла 'x.exe' в командной строке?

Всего записей: 2628 | Зарегистр. 09-01-2010 | Отправлено: 00:55 11-02-2025
greeple

Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
LZAA
чатгпт выдал, проверяй

Код:
timeout /t 5 /nobreak > NUL & start "" "x.exe"


Код:
powershell -command "Start-Sleep -Seconds 5; Start-Process 'x.exe'"


Код:
ping 1.1.1.1 -n 1 -w 5000 > NUL & start "" "x.exe"


Код:
echo WScript.Sleep 5000 > delay.vbs & echo Set objShell = CreateObject("WScript.Shell") >> delay.vbs & echo objShell.Run "x.exe" >> delay.vbs & echo Set objShell = Nothing >> delay.vbs & wscript delay.vbs & del delay.vbs

Всего записей: 7748 | Зарегистр. 11-02-2020 | Отправлено: 02:07 11-02-2025
Jonmey

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

Цитата:
Но есть ли способ сделать задержку запуска исполняемого файла 'x.exe' в командной строке?
 

Код:
start calc.exe & timeout /t 10 & start notepad.exe

 

Всего записей: 1406 | Зарегистр. 17-01-2011 | Отправлено: 02:07 11-02-2025
LZAA

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
                              Jonmey
 
      Насколько я понимаю, использование символа '&' - это такой 'хитрый' способ записать пакетный код в одну строчку. Меня интересует такое:
 
      x.exe | y.exe
 
    Можно ли сделать, чтобы в такой команде 'y.exe' запускалось с задержкой?

Всего записей: 2628 | Зарегистр. 09-01-2010 | Отправлено: 02:43 11-02-2025 | Исправлено: LZAA, 03:02 11-02-2025
BorlandIMHO

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

Цитата:
Можно ли сделать ...

"y.exe" в данном случае запускается строго после завершения "x.exe" и получает на вход выданное в консоль x.exe при работе.
Не так. Запускается x.exe, после запускается y.exe. Всё, что выдаёт в консоль x.exe "по трубе" поступает на вход y.exe. После завершения работы x.exe - y.exe заканчивает обработку полученного  "по трубе" и завершает работу.
Пока y.exe не завершила работу - скрипт далее не выполняется.
Программа, способная задержать передачу "по трубе" не существует (либо мне неизвестна).
Как вариант реализации задержки - можно перенаправить выдачу "x.exe" в файл, следующей командой выполнить задержку, а потом запустить "y.exe", подав ей на вход этот файл.

Всего записей: 3097 | Зарегистр. 12-10-2006 | Отправлено: 20:32 11-02-2025 | Исправлено: BorlandIMHO, 00:04 12-02-2025
Death_INN

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Требуется вывод в консоль через
findstr /S /I /M /O /C:"не важно" *.* && echo.
Однако, если совпадений много, то как избежать переполнения, чтобы увидеть в консоли все строки?

Всего записей: 4017 | Зарегистр. 24-10-2002 | Отправлено: 22:30 11-02-2025
LZAA

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

       OK. С этим разобрались.
      Здесь загвоздка именно в том, что 'y.exe' без проблем воспринимает то, что 'x.exe' 'выдало' в консоль. И задержка в таком случае не нужна. Но если 'x.exe' сохраняет некий файл на диск, то 'y.exe' запускается раньше и использовать этот файл не может. Тут-то задержка и нужна. Но с '|' это не работает. А с '&' - работает.
      Резюме: придётся всё же '&' использовать.
       
 
Добавлено:
 
                                 Death_INN
 
     Можно увеличить количество строк в консоли.

Всего записей: 2628 | Зарегистр. 09-01-2010 | Отправлено: 23:02 11-02-2025
BorlandIMHO

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

Цитата:
Но если 'x.exe' сохраняет некий файл на диск, то 'y.exe' запускается раньше и использовать этот файл не может


Все "стандартные" консольные команды, запускаемые скриптом в пределах одной консоли, как и большинство программ с GUI, выполняются строго последовательно, в том порядке, в котором запущены.
Если, например, запустить из скрипта notepad.exe - скрипт будет ждать, пока вы его не закроете.
Если запустить start "" notepad.exe - выполнится команда start, запускающая блокнот, и скрипт продолжит выполнение.
"x.exe & y.exe" - команда y.exe выполнится после завершения x.exe, и никак иначе.
"x.exe && y.exe" - команда y.exe выполнится после завершения x.exe, если команда x.exe вернула ERRRORLEVEL=0, и никак иначе.
"x.exe && y.exe || z.exe" - после завершения x.exe с ERRRORLEVEL=0 выполнится  y.exe, а с любым другим ERRORLEVEL выполнится z.exe, и никак иначе.
В любом случае - выполнение следующей команды начинается после завершения предыдущей.

Цитата:
"y.exe" в данном случае запускается строго после завершения "x.exe"

Это не совсем так, на самом деле. Команды при таком способе запуска вполне себе работают параллельно. Но: команда y.exe получит на вход всё, и в том порядке, в котором выдаст x.exe.
 
При передаче данных через промежуточный файл - следующая команда не запустится, пока не завершится предыдущая. Вообще никак. Т.е. сначала x сохранит своё и завершится, а потом уже запустится y. Запускайте хоть через &, хоть последовательными строчками, на результат оно не влияет.
 
Задержка при запуске хоть через конвейер, хоть при перенаправлении через промежуточный файл просто даст задержку. На передаче данных никак не скажется.

Всего записей: 3097 | Зарегистр. 12-10-2006 | Отправлено: 23:56 11-02-2025 | Исправлено: BorlandIMHO, 00:19 12-02-2025
GCRaistlin



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

Цитата:
"x.exe && y.exe" - команда y.exe выполнится после завершения x.exe, если команда x.exe вернула ERRRORLEVEL=0, и никак иначе.

Нет. Если команда вернула result 0. Errorlevel при этом может быть 1:

Код:
 
((for /f %%# in ()do y)|| if 1==2 y) && echo Result 0
echo %errorlevel%
 
 

Цитата:
"x.exe && y.exe || z.exe" - после завершения x.exe с ERRRORLEVEL=0 выполнится  y.exe, а с любым другим ERRORLEVEL выполнится z.exe, и никак иначе.  

Надо только понимать, что обратное неверно: z.exe может запуститься и если x.exe вернул result 0 - если при этом y.exe вернул result 1:

Код:
 
set/a0 && call|| echo 1
 


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

Всего записей: 4423 | Зарегистр. 18-04-2005 | Отправлено: 00:25 12-02-2025 | Исправлено: GCRaistlin, 00:58 12-02-2025
LZAA

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

                                BorlandIMHO
 
       Некоторые сугубо программные процессы, о которых Вы пишете, мне трудно понять. Наверное всё это правильно. Но как говорил классик:,,Всё хорошо, но включишь - не работает."  
       Например:
 
       curl URL -o video.mp4 | vlc video.mp4
 
      'VLC' player пишет, что не может открыть 'video.mp4'. Окно 'VLC' открылось раньше, чем файл 'video.mp4' сохранился на диск. То есть строгой 'последовательности' я здесь не обнаруживаю, хотя именно она мне и нужна в данном случае. Приходится использовать задержку.

Всего записей: 2628 | Зарегистр. 09-01-2010 | Отправлено: 01:49 12-02-2025
GCRaistlin



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
LZAA
Они запустились одновременно. Вывод первой команды подается на ввод второй.
Точнее, запустился еще один экземпляр cmd.exe, из которого была запущена вторая команда.
 
Непонятно, зачем вообще в данном случае использовать piping: curl выдает в stdout нечто такое, что готов принять из stdin vlc?

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

Всего записей: 4423 | Зарегистр. 18-04-2005 | Отправлено: 02:05 12-02-2025
BorlandIMHO

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

Цитата:
Например:

курл пишет что-то в файл {что именно - из приведённой команды непонятно}, одновременно влц этот же файл читает; в параллель этому курл через "трубу" отдаёт влц текстовый отчёт о своих действиях, который {отчёт} влц тупо игнорирует, ибо "ни панимаит чё ита ваще такое".
Чего именно вы пытаетесь добиться этой коньструкцыйей - непонятно.
Если вы хотите "по трубе" отдать видеопоток от курл к влц - не надо его сохранять в файл и одновременно читать. Если вы хотите передать видео через файл - уберите "трубу", сначала сохраните файл курлом, а следущей командой читайте его влц.

Всего записей: 3097 | Зарегистр. 12-10-2006 | Отправлено: 11:34 12-02-2025 | Исправлено: BorlandIMHO, 11:34 12-02-2025
LZAA

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

                              GCRaistlin
 
       Так и у меня сложилось впечатление, что такой командой оба исполняемых файла запускаются одновременно, а не последовательно. Я это просто вижу.
       Но меня смутила информация
       
Цитата:
команда y.exe выполнится после завершения x.exe

       Наверное я её неверно понимаю.
       Я писал:
       
Цитата:
Здесь загвоздка именно в том, что 'y.exe' без проблем воспринимает то, что 'x.exe' 'выдало' в консоль. И задержка в таком случае не нужна.

       Но для бинарного vidio контента написать просто - 'curl URL' не получится, потому что 'curl' в консоль его не выведет.
 
 
 
 

Всего записей: 2628 | Зарегистр. 09-01-2010 | Отправлено: 11:59 12-02-2025
GCRaistlin



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
LZAA
Запускаются - одновременно. Закончится выполнение команды y.exe после того, как завершится x.exe.
 

Цитата:
для бинарного vidio контента написать просто - 'curl URL' не получится, потому что 'curl' в консоль его не выведет

Тогда нет смысла использовать |. Используйте &&.

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

Всего записей: 4423 | Зарегистр. 18-04-2005 | Отправлено: 13:02 12-02-2025
LZAA

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
           
Цитата:
Запускаются - одновременно. Закончится выполнение команды y.exe после того, как завершится x.exe.

 
      Теперь в такой лаконичной формулировке алгоритм работы с '|' мне наконец стал понятен.
      Можно ещё проще сформулировать: ,, При использовании в команде символа '|' исполняемые файлы запускаются одновременно, а завершаются последовательно."

Всего записей: 2628 | Зарегистр. 09-01-2010 | Отправлено: 14:32 12-02-2025 | Исправлено: LZAA, 18:11 12-02-2025
los

Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
LZAA,
curl $OPTS $URL | vlc -

Всего записей: 7973 | Зарегистр. 08-09-2001 | Отправлено: 14:45 12-02-2025
Открыть новую тему     Написать ответ в эту тему

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

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


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

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

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru