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

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



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

Цитата:
Результат на скрине

На всякий случай:
Вы уверены, что батники должны быть в кодировке UTF8?

Всего записей: 3199 | Зарегистр. 03-02-2009 | Отправлено: 09:04 17-07-2019
VVL99

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Silver Raven
Код 3 варианта
И весь комплект, чтобы не было соблазна накосячить, 3 варианта со всеми файлами - https://transfiles.ru/ko5wh

Всего записей: 4158 | Зарегистр. 03-02-2011 | Отправлено: 15:29 17-07-2019 | Исправлено: VVL99, 15:30 17-07-2019
Silver Raven

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
YuS_2
Да фиг, ней, кодировкой. Ну текст на русском покорежит, тестовый полигон все-равно. На работоспособность не влияет.
 
VVL99
А я у мамы пОгрОмист...
Кажись, проблема в расширении (признается только .txt) и пути к конфигу (я же указываю его через переменную) со списком файлов. Любая попытка хоть что-то изменить в этом месте, приводит к крешу CMD-шника.
 
Что-то вроде этого:

Код:
 
set "FilesList=Silver Raven mods pack data\fileslist.cfg"
 
setlocal EnableDelayedExpansion
for /f "tokens=1 delims=" %%A in ("%FilesList%") do if not exist %%A set f=!f! %%A
 

Пробовал дергать\убирать кавычки и так и сяк, вроде не то.

Всего записей: 90 | Зарегистр. 12-10-2012 | Отправлено: 23:32 17-07-2019 | Исправлено: Silver Raven, 23:36 17-07-2019
VVL99

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

Цитата:
Любая попытка хоть что-то изменить в этом месте, приводит к крешу CMD-шника.
Это понятно, иначе помощь не потребовалась бы, к сожалению мои обстрактные примеры вам на пользу не пошли, значит нужно делать полностью рабочий вариант, где вам не пришлось бы хоть что-то менять.
 
 
 
Добавлено:
Укороченный вариант вашего нерабочего кода:

Код:
@echo off
for /f "UseBackQ tokens=1* delims==" %%a in ("Silver Raven mods pack data\fileslist.cfg") do (
    for %%? in (%%b) do if not exist %%? set f=1 && echo Отсутствует файл: %%?
)
if %f% == 1 set /p f=

Обрабатывает конфиг cfg с указанной структурой.
Советую ознакомиться с этим и с этим, чтобы было легче задавать вопросы.

Всего записей: 4158 | Зарегистр. 03-02-2011 | Отправлено: 03:35 18-07-2019 | Исправлено: VVL99, 19:10 18-07-2019
VVL99

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Silver Raven
Можно и так - https://jpegshare.net/images/a4/fd/a4fdf0d0194315bf62ac57fb5bee6aa7.png
 
Добавлено:
https://jpegshare.net/images/7d/d3/7dd30c667c6d6afbd28eba1ac5c7e3c6.png

Всего записей: 4158 | Зарегистр. 03-02-2011 | Отправлено: 15:27 18-07-2019 | Исправлено: VVL99, 15:43 18-07-2019
VVL99

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Silver Raven
Имя файла, затем весь адрес - https://jpegshare.net/images/02/c6/02c6fe0539262a177373ad8005d327ff.png

Всего записей: 4158 | Зарегистр. 03-02-2011 | Отправлено: 22:26 18-07-2019
VVL99

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Полный путь к файлу, без указания самого файла, поскольку он уже указан - https://jpegshare.net/images/d0/e9/d0e9581a7b9ad48cdba6aa063b39d160.png

Всего записей: 4158 | Зарегистр. 03-02-2011 | Отправлено: 02:27 19-07-2019
Silver Raven

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

Цитата:
Укороченный вариант вашего нерабочего кода:  
 
Код:
@echo off  
for /f "UseBackQ tokens=1* delims==" %%a in ("Silver Raven mods pack data\fileslist.cfg") do (  
    for %%? in (%%b) do if not exist %%? set f=1 && echo Отсутствует файл: %%?  
)  
if %f% == 1 set /p f=
 
Обрабатывает конфиг cfg с указанной структурой.  
Советую ознакомиться с этим и с этим, чтобы было легче задавать вопросы.

 
Пока ждал ответ, сам нарисовал такую фиговину:
 

Код:
 
setlocal EnableDelayedExpansion
call :read_control_panel_files_list_config "%ControlPanelFilesListConfig%"
 
:: Проверка наличия всех файлов для панели управления в Silver Raven mods pack data
for %%? in (%$ControlPanelFilesList%) do (
    if not exist "%%~?" set ControlPanelFilesListMissingFiles=!ControlPanelFilesListMissingFiles!, "%%~?"
)
 
if defined %ControlPanelFilesListMissingFiles% (
color fc
 echo.
 echo.
 echo.
 echo *ОШИБКА^^^! Нижеуказанные файлы, необходимые для корректной работы программы, не найдены:
 echo.
 echo.
 
for /f "usebackq tokens=1* delims==" %%a  in ("%ControlPanelFilesListConfig%") do (
    for %%? in (%%b) do if not exist %%? set ControlPanelFilesListMissingFiles=1 && echo %%~?
 
 echo.
 echo.
 echo.
 echo *ОШИБКА^^^! Вышеуказанные файлы, необходимые для корректной работы программы, не найдены.
 echo.
 echo Извлеките папку Silver Raven mods pack data из установочных архивов со сборкой в папку игры вручную и перезапустите панель управления. Убедитесь, что антивирусное ПО не блокирует ее работу.
 echo.
 echo.
pause
exit
)
 
 
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: Чтение конфиг-файла fileslist.cfg
:read_control_panel_files_list_config
    for /f "usebackq eol=; tokens=1,2* delims==" %%a in ("%~1") do set "$%%a=%%b"
exit /b
 

 
Только с экранированием ! проблемы. Т.к. в именах файлов они тоже есть (и из поиска в конфиге, они исключаются), как бы это дело пофиксить?

Всего записей: 90 | Зарегистр. 12-10-2012 | Отправлено: 20:09 19-07-2019 | Исправлено: Silver Raven, 20:10 19-07-2019
VVL99

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Silver Raven
После обработки сохраняем результат в html и запускаем его по желанию - https://jpegshare.net/images/f7/0e/f70e19917248ea72e52b2c81c2a426dc.png

Всего записей: 4158 | Зарегистр. 03-02-2011 | Отправлено: 21:53 19-07-2019
Silver Raven

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

Цитата:
После обработки сохраняем результат в html и запускаем его по желанию - https://jpegshare.net/images/f7/0e/f70e19917248ea72e52b2c81c2a426dc.png

Чегой? Нифига не понял, это к чему и о чем. Батником считать конфиг(и) и пересохранить в формат html, и что это даст?

Всего записей: 90 | Зарегистр. 12-10-2012 | Отправлено: 22:49 19-07-2019
VVL99

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Silver Raven
Это даёт возможность запомнить результат, а также скопировать имена файлов и их адреса, из окна cmd этого не сделаешь.

Всего записей: 4158 | Зарегистр. 03-02-2011 | Отправлено: 23:13 19-07-2019 | Исправлено: VVL99, 02:52 24-07-2019
Silver Raven

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
VVL99
Не понял к чему такие сложности. Вон Гугль говорит, что это возможно, на этом примере:
 
https://dmyt.ru/forum/viewtopic.php?t=2384
 

Код:
 
@echo off
 
set aimp=c:\program files\aimp3\aimp3.exe
set dir1=d:\dir1
set num=0
set list=
 
for /r "%dir1%" %%R in (
"*.mp3"
) do CALL :process "%%R"
 
echo.
echo list=%list%
 
rem start "" "%aimp%" /add_play %list%
 
echo.
pause
exit /b
::exit строкой выше не удалять!
 
::Подпрограмма
:process
set /a num+=1
set list=%list% %1
echo file[%num%]=%~nx1
EXIT /b 0
 

Всего записей: 90 | Зарегистр. 12-10-2012 | Отправлено: 23:33 19-07-2019 | Исправлено: Silver Raven, 23:34 19-07-2019
VVL99

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

Всего записей: 4158 | Зарегистр. 03-02-2011 | Отправлено: 23:53 19-07-2019
Silver Raven

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
VVL99
"Спецы" сразу шлют меня лесом, почти на всех форумах. Иди на Питон, говорят... Слишком мудреную фигню хочешь. Идея конечно супер, особенно когда нет времени на его изучение с нуля, а CMD-шник вон почти готов. Да и юзеры, мягко говоря проблемные. Если что-то доп. устанавливать (а с Питоном это, нужно, кажется. Буду рад ошибаться), это целая трагедия.

Всего записей: 90 | Зарегистр. 12-10-2012 | Отправлено: 00:09 20-07-2019 | Исправлено: Silver Raven, 00:10 20-07-2019
Smitis



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

Цитата:
Да и юзеры, мягко говоря проблемные. Если что-то доп. устанавливать (а с Питоном это, нужно, кажется. Буду рад ошибаться), это целая трагедия.

Если юзеры не на XP, то есть ещё PowerShell "изкоробки".

----------
Разум когда-нибудь победит

Всего записей: 2424 | Зарегистр. 09-02-2003 | Отправлено: 00:35 20-07-2019
Alex_Piggy

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Доброе время, Silver Raven
Во-первых - у Вас ошибка. if defined variable - должно быть без процентов.
Во-вторых - Вы составляете список ControlPanelFilesListMissingFiles - и затем переписываете его единицей, не используя. Тогда зачем Вам список?
В третьих - не пойму - Вы проверяете файлы по списку %$ControlPanelFilesList% и если что-то не находится - проходитесь по всему ini и все поля рассматриваете как список файлов? Но зачем?

Цитата:
Только с экранированием ! проблемы. Т.к. в именах файлов они тоже есть (и из поиска в конфиге, они исключаются), как бы это дело пофиксить?

Отказаться от использования setlocal enabledelayedexpansion. Если нужен именно список  - получать его через call без скобок.

Код:
 
@echo off
for %%i in (1 2 3 4 5) do call :merge "%~dp0%%i"
echo %out%
exit
:merge
  set "out=%out% %~1"
exit /b
 

 
А так - пусть первый цикл проверяет факт, а второй - выдает сообщение. Подробнее...

Всего записей: 1846 | Зарегистр. 07-08-2002 | Отправлено: 01:14 20-07-2019
VVL99

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

Код:
@echo off
call :efn "folder\file.txt"
pause
:efn
    set "fn=%~1"
    for %%a in ("%fn:\=" "%") do set fn=%%~a
    echo Отсутствует файл: %fn%
    echo.
    echo адрес: %~1
    echo.
exit /b

 
Добавлено:
Запуск HTML с данными из cmd:

Код:
set hi="Hello World?"
echo ^<head^>^<title^>html^</title^>^</head^>^<img src="http://forum.ru-board.com/board/images/remake1.gif"^>^<h1^> %date:~5% - %time:~0,-3% ^</h1^>^<h1 style=color:#f00^> Hello World, my name %username% ^</h1^> > html.html
echo ^<script^>alert(%hi%)^</script^> >> html.html
start "" html.html

Всего записей: 4158 | Зарегистр. 03-02-2011 | Отправлено: 02:54 20-07-2019
GCRaistlin



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

Цитата:
Отказаться от использования setlocal enabledelayedexpansion. Если нужен именно список  - получать его через call без скобок.

Г. Остер. Вредные советы по написанию батников.
 
Добавлено:
Silver Raven
Я особо не вникал, но вот это:

Код:
 
for %%? in (%$ControlPanelFilesList%) do (
    if not exist "%%~?" set ControlPanelFilesListMissingFiles=!ControlPanelFilesListMissingFiles!, "%%~?"
)
 

должно выглядеть так:

Код:
 
setlocal enabledelayedexpansion
for %%? in (!$ControlPanelFilesList!) do (
    if "" == "!!" endlocal
    if not exist "%%?" (
      set File=%%?
      setlocal enabledelayedexpansion
      for /f "delims=" %%A in ("!ControlPanelFilesListMissingFiles!, !File!") do (
        endlocal
        set ControlPanelFilesListMissingFiles=%%A
      )
    )
)
 


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

Всего записей: 3082 | Зарегистр. 18-04-2005 | Отправлено: 10:27 20-07-2019
Silver Raven

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
GCRaistlin
Вот, это уже годно и спецсимволы отрабатывает нормально. Только что-то надо еще подергать, потому как в случае, если все проверяемые по списку файлы на месте, CMD-шник падает.
 

Код:
 
set "ControlPanelFilesListConfig=Silver Raven mods pack data\fileslist.cfg"
 
call :read_control_panel_files_list_config "%ControlPanelFilesListConfig%"
 
:: Проверка наличия всех файлов для панели управления в Silver Raven mods pack data
setlocal EnableDelayedExpansion
for %%? in (!$ControlPanelFilesList!) do (  
    if "" == "!!" endlocal  
    if not exist "%%?" (  
      set File=%%?  
      setlocal EnableDelayedExpansion  
      for /f "delims=" %%A in ("!ControlPanelFilesListMissingFiles!, !File!") do (  
        endlocal  
        set ControlPanelFilesListMissingFiles=%%A  
      )  
    )  
)
 
if defined %ControlPanelFilesListMissingFiles% (
color fc
 echo.
 echo.
 echo.
 echo *ОШИБКА! Нижеуказанные файлы, необходимые для корректной работы программы, не найдены:
 echo.
 
for /f "usebackq tokens=1* delims==" %%A  in ("%ControlPanelFilesListConfig%") do (
    for %%? in (%%B) do if not exist %%? set ControlPanelFilesListMissingFiles=1 && echo %%~?
 
 echo.
 echo.
 echo.
 echo *ОШИБКА! Вышеуказанные файлы, необходимые для корректной работы программы, не найдены.
 echo.
 echo Извлеките папку Silver Raven mods pack data из установочных архивов со сборкой в папку игры вручную и перезапустите панель управления. Убедитесь, что антивирусное ПО не блокирует ее работу.
 echo.
 echo.
pause
exit
)
 
 
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: Чтение конфиг-файла fileslist.cfg
:read_control_panel_files_list_config
    for /f "usebackq eol=; tokens=1,2* delims==" %%A in ("%~1") do set "$%%A=%%B"
exit /b
 

 
Структура конфига, если нужно:

Код:
 
ControlPanelFilesList="Silver Raven mods pack data\Additional options\Alternate Start\Alternate Start - Live Another Life.esp" "Silver Raven mods pack data\Additional options\Alternate Start\Alternate Start - Live Another Life.bsa" "Silver Raven mods pack data\Additional options\Serana\Cured\00002b6c.nif" "Silver Raven mods pack data\Additional options\Serana\Vampire\00002b6c.nif" "Silver Raven mods pack data\Additional options\Vampires eyes\Blue\eyeargonianvampirefemale.dds" "Silver Raven mods pack data\ENB\enbseries\textures\SMAA_AreaTex.dds" "Silver Raven mods pack data\ENB\enbseries\textures\SMAA_SearchTex.dds" "Silver Raven mods pack data\ENB\enbseries\!_L_Dungeons.ini" "Silver Raven mods pack data\ENB\enbseries\!_L_Dwarven_Ruins.ini" и т.д.
 

 
Вообще, я бы переделал конфиг на такой (ужас выше, в одну строку, нечитабелен):

Код:
 
[ControlPanelFilesList]
"Silver Raven mods pack data\Additional options\Alternate Start\Alternate Start - Live Another Life.esp"
"Silver Raven mods pack data\Additional options\Alternate Start\Alternate Start - Live Another Life.bsa"
"Silver Raven mods pack data\Additional options\Serana\Cured\00002b6c.nif"
"Silver Raven mods pack data\Additional options\Serana\Vampire\00002b6c.nif"
и т.д.
 

В принципе, можно обойтись и без секции [ControlPanelFilesList], если это заметно сократит код.
 
VVL99
Хотелось бы взглянуть на код тех красивых разделителей строк, что вы показывали на своих скриншотах. Например, этот: https://jpegshare.net/images/02/c6/02c6fe0539262a177373ad8005d327ff.png

Всего записей: 90 | Зарегистр. 12-10-2012 | Отправлено: 11:26 20-07-2019 | Исправлено: Silver Raven, 11:28 20-07-2019
GCRaistlin



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

Цитата:
Только что-то надо еще подергать

Так дергайте. Я лишь указал на явное тонкое место.

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

Всего записей: 3082 | Зарегистр. 18-04-2005 | Отправлено: 11:39 20-07-2019
   

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