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

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

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

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.51 до Windows 10) и command.com (DOS 5.0 и выше). Старые командные процессоры можно запускать на более новых ОС, хотя не всё может работать корректно. Подробная документация по командам cmd.exe и стандартным утилитам ОС для NT 3.51, NT 4.0, NT 5.0 (Windows 2000) и NT 5.2 (Windows Server 2003). Сборник представляет исторический интерес, а также незаменим для тех, у кого появилось желание сделать свои скрипты работоспобными не только на текущей версии ОС. Ссылки wdho.ru tinyupload.com dbree.org
 
· Сборник одним архивом: Сотни Win32 утилит командной строки, нетривиальные .cmd файлы, .bat miniperl скрипты (не требующие полноценной установки Perl), FAR Manager с плагинами и настройками, разное для DOS/DOSBox (откуда под Win32 интерес представляют три продвинутых "мультисистемных" .bat файла да ещё, может быть, оболочка Necromancer DOS Navigator с поддержкой LFN и доступом к буферу обмена Windows). Краткие описания всего - в файликах files.bbs

Всего записей: 37561 | Зарегистр. 26-02-2002 | Отправлено: 13:35 19-09-2020 | Исправлено: Maz, 07:16 24-04-2021
local5805

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
помогите чайнику:
пожалуста напишите CMD для поиска папки по части её названия(путь C:\rout ,часть названия  поисковой папки inf_amd64 и такая папка одна,но меняет часть названия),и что-бы после того как нашёл эту папку,удалил из неё много подпапок(Container,Camera и т.д.их 15 шгук)и файлов(appshext.dll,license.txt и т.д.их 120 штук),оставив только нужные файлы(compiler64.dll,opencl64.dll  и т.д. их 13 штук)в самой найденной папке "inf_amd64"?или что-бы нашёл папку по части её названия  inf_amd64,скопировал из неё в D:\temp нужные файлы(compiler64.dll,opencl64.dll  и т.д. их 13 штук),потом очистил найденную папку "inf_amd64"и кинул в неё из D:\temp скопированные файлы?

Всего записей: 64 | Зарегистр. 26-04-2011 | Отправлено: 03:50 29-10-2021 | Исправлено: local5805, 22:28 29-10-2021
Fenrizz



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

Код:
forfiles /P C:\rout /M *inf_amd64* /S /C "cmd /c if @isdir==TRUE echo @path"

Всего записей: 471 | Зарегистр. 12-09-2017 | Отправлено: 07:17 29-10-2021 | Исправлено: Fenrizz, 07:19 29-10-2021
tmrx

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

Цитата:
нормальный виндовый порт tee

 
Из Yori  
 
Подробнее...

Всего записей: 155 | Зарегистр. 27-01-2016 | Отправлено: 07:45 29-10-2021
local5805

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

спасибо!а дальше никак?
 

Всего записей: 64 | Зарегистр. 26-04-2011 | Отправлено: 12:53 29-10-2021 | Исправлено: local5805, 13:44 29-10-2021
Fenrizz



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

Код:
for /d /r C:\rout\ %%I in (*inf_amd64*) do (
echo %%I
rd /S /Q "%%I\Container"
rd /S /Q "%%I\Camera"
...
del /S /Q "%%I\appshext.dll"
del /S /Q "%%I\license.txt"
...
)  

Всего записей: 471 | Зарегистр. 12-09-2017 | Отправлено: 07:53 30-10-2021 | Исправлено: Fenrizz, 07:56 30-10-2021
WWWaiyter



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Накопал тут по инету, народу хочется, чтобы в трее секунды тикали )) Забирайте архивчик, кому надо, там 2 файлика на выбор, запустить можно любой... )) cmd или reg - они одинаковые функции выполняют )
 
https://www.upload.ee/files/13590593/Sec.rar.html
 


----------
UK жив. Не дождётесь..

Всего записей: 4305 | Зарегистр. 26-12-2019 | Отправлено: 08:28 30-10-2021
fscpsd

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Функция EnableDelayedExpansion — она включается сразу на весь скрипт или можно её включить только перед тем участком, где она нужна, а потом сразу выключить, чтобы логику работы всех остальных переменных не пересматривать?

Всего записей: 153 | Зарегистр. 16-09-2010 | Отправлено: 12:06 30-10-2021
GCRaistlin



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
fscpsd
Можно. Только, если выключать через endlocal, уничтожатся все определенные после setlocal переменные.

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

Всего записей: 3195 | Зарегистр. 18-04-2005 | Отправлено: 12:23 30-10-2021
fscpsd

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

Цитата:
если выключать через endlocal

Ну а больше-то изнутри скрипта никак и не выключить, да?
Можно ещё сделать ещё один setlocal специально для DisableDelayedexpansion — не будет ли конфликтов?
 

Цитата:
уничтожатся все определенные после setlocal переменные

После той setlocal, с помощью которой я EnableDelayedExpansion включил? Или вообще все внутри скрипта обнуляются?  
 
Получается, у меня как минимум два объявления setlocal будет — одно в начале скрипта для локальных переменных, а второе для того, чтобы включить EnableDelayedExpansion. Как там может получиться насчёт конфликтов, интересно.

Всего записей: 153 | Зарегистр. 16-09-2010 | Отправлено: 12:59 30-10-2021 | Исправлено: fscpsd, 13:10 30-10-2021
GCRaistlin



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

Цитата:
Ну а больше-то изнутри скрипта никак и не выключить, да?

Можно через setlocal disabledelayedexpansion. Максимальная вложенность - 32 уровня.
 

Цитата:
После той setlocal, с помощью которой я EnableDelayedExpansion включил?

Да.
 
Вообще, если используемые переменные могут содержать произвольные символы, лучше использовать именно !-раскрытие.

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

Всего записей: 3195 | Зарегистр. 18-04-2005 | Отправлено: 13:12 30-10-2021
fscpsd

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

Цитата:
если используемые переменные могут содержать произвольные символы, лучше использовать именно !-раскрытие

Тут не понял вашу мысль, поясните если не трудно.

Всего записей: 153 | Зарегистр. 16-09-2010 | Отправлено: 14:12 30-10-2021
local5805

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

Спасибо!Работает!
 

Всего записей: 64 | Зарегистр. 26-04-2011 | Отправлено: 14:28 30-10-2021
bytie

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

Код:
cmd /c "for /f "delims=: tokens=2" %M in ("document-3-5.rst:106:6:Hint: Проверка слова 'требуется' c окончанием -ться -тся") do @set "_pre=%M"&&@set "_after=%M"&&@set /a "_pre-=10">nul&&set /a "_after+=10">nul&&echo %_after%"

выводит `%_after%`, хотя хотелось бы, чтобы он выводил число %M увеличенное на заданный шаг. Похоже, что на момент выполнения echo переменные `set /a` ещё как будто бы не созданы.
 
Как сделать так, чтобы число %M уменьшалось и выводилось?

Всего записей: 270 | Зарегистр. 18-08-2005 | Отправлено: 16:57 31-10-2021
Fenrizz



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
bytie
Надо в начале добавить
setlocal enabledelayedexpansion

Всего записей: 471 | Зарегистр. 12-09-2017 | Отправлено: 13:31 01-11-2021
GCRaistlin



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
fscpsd
Допустим, параметр запрашивается у пользователя через set /p или получается парсингом ini-файла. Вы ничего не можете сказать о его содержимом - там может быть что угодно. К значению такого параметра нельзя обращаться через %var%: если оно содержит &|<>, скрипт вылетит с ошибкой. Нужно обращаться через !var!.
 
Добавлено:
bytie
"cmd /v /c ... echo !_after!"

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

Всего записей: 3195 | Зарегистр. 18-04-2005 | Отправлено: 13:39 01-11-2021 | Исправлено: GCRaistlin, 19:12 01-11-2021
zh76internetru

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Всем привет.
Новая задачка появилась. Вроде простая.
В общем нужно поработать с вычитанием 16-тиричных чисел до 100 знаков.
Например из  
ABCDEF1234567890 - abcd890 = ABCDEF122999A000
ABCDEF122999A000 - abcd890 = ABCDEF121EDCC770
ABCDEF121EDCC770 - abcd890 = ABCDEF12141FEEE0
То есть из результата опять что то вычитать, а все получаемое записывать в отдельный файл.
Спасибо )))
 
 
 

Всего записей: 29 | Зарегистр. 24-09-2021 | Отправлено: 14:34 02-11-2021 | Исправлено: zh76internetru, 14:36 02-11-2021
Silver Raven

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Пытался немного модифицировать вот этот код:
 

Код:
 
if exist "%TempConfig%" goto TempConfig
for /f "usebackq delims=" %%A in ("%HDAudioConfig%") do (
  for /f "delims== tokens=1*" %%B %%C in ("%%A") do (
 
:: Запись в конфиг-файл hd_audio.cfg
    >> "%TempConfig%" (
      if /i %%B==HDAudioLocalizationStatus (
        echo %%B=Английский
      if /i %%C==HDAudioStatus (
        echo %%C=установлен  
      ) else (
        echo %%A
      )
    ) || (
      del "%TempConfig%"
      exit /b 1
    )
  )
)
move /y "%TempConfig%" "%HDAudioConfig%"
 

 
Но не догоняю, как правильно здесь добавить редактирование значений в двух строках, вместо одной (так было изначально). Подскажите, где накосячил.

Всего записей: 129 | Зарегистр. 12-10-2012 | Отправлено: 19:12 07-11-2021 | Исправлено: Silver Raven, 19:13 07-11-2021
BorlandIMHO

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

Цитата:
Пытался немного модифицировать вот этот код:

Насколько я чего-то понимаю, именно этот код работать не может от слова "вообще".
Чего автор пытался выразить второй командой for - мне непонятно; в любом случае, командный процессор на этой строчке вывалится с ошибкой типа "%C was unexpected at this time".
Автору стОит прочитать справку по команде for прежде, чем делиться результатами своего творчества...
 
Если же это уже код, неудачно модифицированный вами - будьте добры, представьте изменяемый исходник и опишите, какие изменения хотите внести. Желательно ещё и с описанием формата входного/выходного файлов...

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

Всего записей: 1308 | Зарегистр. 12-10-2006 | Отправлено: 22:25 07-11-2021
Silver Raven

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
BorlandIMHO
 
Исходный код:
 

Код:
 
if exist "%TempConfig%" goto TempConfig
for /f "usebackq delims=" %%A in ("%HDAudioConfig%") do (
  for /f "delims== tokens=1*" %%B in ("%%A") do (
 
:: Запись в конфиг-файл hd_audio.cfg
    >> "%TempConfig%" (
      if /i %%B==HDAudioLocalizationStatus (
        echo %%B=Английский        
      ) else (
        echo %%A
      )
    ) || (
      del "%TempConfig%"
      exit /b 1
    )
  )
)
move /y "%TempConfig%" "%HDAudioConfig%"
 

 
Что делает: редактирует файл hd_audio.cfg, путем создания временного файла, замены части строки
HDAudioLocalizationStatus=none
на
HDAudioLocalizationStatus=Английский
и перемещения результата в исходный.
 
Хочу, чтобы он проделывал тоже самое, но уже с несколькими строками, по тому же принципу. Надеюсь, не слишком запутанно описал.

Всего записей: 129 | Зарегистр. 12-10-2012 | Отправлено: 10:18 08-11-2021 | Исправлено: Silver Raven, 10:19 08-11-2021
BorlandIMHO

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

Цитата:
Хочу, чтобы он проделывал тоже самое, но уже с несколькими строками, по тому же принципу.

Тогда вам нужно тупо добавить несколько блоков "else if" в команду if:

Код:
    if /i %%B==HDAudioLocalizationStatus (
        echo %%B=Английский        
    ) else if /i %%B==HDAudioStatus (
        echo %%B=установлен
    ) else if /i %%B==ЕщёЧёНить (
        echo %%B=ФигняКакая-то
    ) else (
        echo %%A
    )
 

По одному блоку проверки на каждую изменяемую строку.  
 


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

Всего записей: 1308 | Зарегистр. 12-10-2006 | Отправлено: 13:22 08-11-2021
Открыть новую тему     Написать ответ в эту тему

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

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


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

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.Board
© Ru.Board 2000-2020

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru

Рейтинг.ru