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

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

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

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

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

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

Цитата:
Это что за бред и откуда

Ну хорошо, не так выразился. Условный Вася из Мухосранска особо не понимающий в ПК (а таких большинство) всегда будет делать то, что ему подсунет Майкрософт на этапе установки, т.е. скорее всего - онлайн учетка. А там, вроде, свои приколы.

Всего записей: 149 | Зарегистр. 12-10-2012 | Отправлено: 12:33 14-11-2021
GCRaistlin



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Silver Raven
Добавляйте логирование, смотрите логи.


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

Всего записей: 3950 | Зарегистр. 18-04-2005 | Отправлено: 13:45 14-11-2021
Silver Raven

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
GCRaistlin
Я так понимаю, добавлять придется в ручном режиме на каждую команду, вывода для всего файла целиком нет?
 
Раньше не сталкивался, не знаю как правильно:
 

Код:
 
set "ControlPanelLog=Silver Raven mods pack data\log.txt"
 
if not exist "%SkyrimPrefsINI%" (
echo >> %ControlPanelLog%
 

Как-то так?
 
Еще на другом форуме, говорят мол: "есть пробелы в пути, значит нужно заковычивать. и заковычиывать не вместе с переменной, а именно значение."
Т.е:  

Код:
set SkyrimPrefsINI="%USERPROFILE%\Documents\My Games\Skyrim Special Edition\SkyrimPrefs.ini"

Но оно же так не работает. Или я тупой, или лыжи не едут?

Всего записей: 149 | Зарегистр. 12-10-2012 | Отправлено: 14:16 14-11-2021 | Исправлено: Silver Raven, 14:30 14-11-2021
GCRaistlin



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Silver Raven
Сообщение информативное желательно добавлять.
 
Если есть возможность подключиться к системе, где проблема есть, то для начала можно скрипт там запустить, убрав @echo off из начала, и посмотреть, на чем он спотыкается.

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

Всего записей: 3950 | Зарегистр. 18-04-2005 | Отправлено: 14:35 14-11-2021
INKOGNI



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
У меня есть команда для батника на удаление папок https+++
@echo off
for /d %%a in ("%APPDATA%\Mozilla\Firefox\Profiles\*") do for /d %%b in ("%%a\storage\*") do for /d %%c in ("%%b\http?++*") do rmdir /s /q "%%c"
 
и
 
for /f "delims=" %%# in ('dir /b /s  /a:d "%APPDATA%\Mozilla\Firefox\Profiles\http?++*"') do rd /s /q "%%~f#"  
 
но это именно для определённой папки.
 
Пользуюсь сейчас портативной версией. Как переписать, чтоб именно в определённом диске файлы искала или хотябы по всем дискам? Спасибо.

Всего записей: 1355 | Зарегистр. 09-01-2006 | Отправлено: 16:01 14-11-2021
Silver Raven

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
GCRaistlin
 
Пока, высланные скриншоты ничего конкретного мне не говорят:
 
https://ibb.co/60Qd56N - попросил убрать @echo off
https://ibb.co/qmZxK98 - описанная мной ошибка
 
Опишу cmd-шник подробнее:
 
При запуске проверяется наличие переменной FirstLaunch = true (хранится во внешнем .cfg)
после чего запускается определенный набор действий:
 

Код:
 
set "TempConfig=Silver Raven mods pack data\temp_config.tmp"
set "MainConfig=Silver Raven mods pack data\main_config.cfg"
set "HDAudioConfig=Silver Raven mods pack data\hd_audio_config.cfg"
set "ControlPanelFilesList=Silver Raven mods pack data\control_panel_files_list.cfg"
 
set "ModsPackRussianLocalizationFolder=Silver Raven mods pack data\Additional options\Mods pack russian localization"
set "SkyrimPrefsINI=%USERPROFILE%\Documents\My Games\Skyrim Special Edition\SkyrimPrefs.ini"
set "SkyrimINIFolder=%USERPROFILE%\Documents\My Games\Skyrim Special Edition"
set "PluginsListFolder=%USERPROFILE%\AppData\Local\Skyrim Special Edition"
 
if "%FirstLaunch%" == "true" (
color f2
 echo.
 echo  Копируются файлы русскоязычной локализации модификаций сборки...
 xcopy "%ModsPackRussianLocalizationFolder%" "Data\" /y /e /q
 echo.
 echo.
timeout /t 3
call :option_1_copy_plugins_list_and_ini_settings
)
 
*здесь другой код, который в момент работы с переменной FirstLaunch - не активен*
 
:option_1_copy_plugins_list_and_ini_settings
cls
if not exist "%SkyrimPrefsINI%" (
cls
color fc
 echo.
 echo.
 echo *ОШИБКА! SkyrimPrefs.ini не найден!
 echo.
 echo Используйте лаунчер игры для задания настроек, согласно своим предпочтениям.
 echo Перезапустите панель управления сборкой для повторного выполнения данной опции.
 echo.
 echo.
pause
exit
)
 
color f2
 @echo.
 @echo.
 @echo Копируется отсортированный список загрузки модов...
 if not exist "%PluginsListFolder%" md "%PluginsListFolder%"
 copy /y "Silver Raven mods pack data\Plugins list\plugins.txt" "%PluginsListFolder%\"
 
 @echo.
 @echo.
 echo  ■ Редактируется SkyrimPrefs.ini...
)
 
*далее простыня кода, который тут, наверняка, не чем не поможет*
 

 
Многие получают мое заготовленное сообщение о том, что файл SkyrimPrefs.ini не найден, хотя, на самом деле он присутствует по указанному пути. Из-за того, что более-менее подробные данные о ОС дал только один человек, я знаю что у него Win10 x64 и имя профиля написано кириллицей.

Всего записей: 149 | Зарегистр. 12-10-2012 | Отправлено: 19:02 14-11-2021 | Исправлено: Silver Raven, 23:00 14-11-2021
westlife



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Папка Documents может быть в другом месте. Лучше ее путь взять из реестра:  
Для консоли:

Код:
for /f "tokens=3" %I in (' reg query "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v "Personal" 2^>nul ') do echo. User Documents: "%I"

 
Если кириллица не отображается правильно, тогда надо использовать кодировку, я вам писал в приват об этом:  

Код:
chcp 65001 >nul  

и файл использовать с utf-8 без bom

Всего записей: 1390 | Зарегистр. 12-12-2006 | Отправлено: 21:54 14-11-2021 | Исправлено: westlife, 21:57 14-11-2021
Silver Raven

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

Цитата:
Папка Documents может быть в другом месте. Лучше ее путь взять из реестра

А можно для тупых, как передать полученный результат в переменную и потом ее подбрасывать везде, где она юзается?
 

Цитата:
Если кириллица не отображается правильно, тогда надо использовать кодировку, я вам писал в приват об этом

Использую OEM866. Проблем нет.

Всего записей: 149 | Зарегистр. 12-10-2012 | Отправлено: 22:10 14-11-2021 | Исправлено: Silver Raven, 22:15 14-11-2021
westlife



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

Цитата:
А можно для тупых, как передать полученный результат в переменную и потом ее подбрасывать везде, где она юзается?

Если без setlocal EnableDelayedExpansion
то вот так (это для батника):

Код:
for /f "tokens=3" %%I in (' reg query "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v "Personal" 2^>nul ') do call set "Documents=%%I"
echo. User Documents: "%Documents%"

 
Добавлено:
Silver Raven

Цитата:
Использую OEM866. Проблем нет.

Это у вас нет.

Всего записей: 1390 | Зарегистр. 12-12-2006 | Отправлено: 22:23 14-11-2021
GCRaistlin



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

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

Всего записей: 3950 | Зарегистр. 18-04-2005 | Отправлено: 23:39 14-11-2021
Fenrizz



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

Цитата:
У меня есть команда для батника на удаление папок https+++  

Я на 61 странице писал решение, можете адаптировать  

Код:
forfiles /P "%APPDATA%\Mozilla\Firefox\Profiles" /M https+++* /S /C "cmd /c if @isdir==TRUE echo @path && rd /S /Q @path"  

или

Код:
for /d /r "%APPDATA%\Mozilla\Firefox\Profiles\" %%I in (https+++*) do (
echo %%I
rd /S /Q "%%I"
)  

Всего записей: 677 | Зарегистр. 12-09-2017 | Отправлено: 07:07 15-11-2021 | Исправлено: Fenrizz, 07:08 15-11-2021
Silver Raven

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
westlife
Пока чудеса продолжаются. С добавлением твоего кода и принудительной сменой кодировки, у какого-то гражданина на Win 7, cmd-шник вообще выдает на запуске пустое окно.
 
Короче, состряпал я тестовый bat-ник:
 

Код:
 
cls
for /f "tokens=3" %%I in (' reg query "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v "Personal" 2^>nul ') do call set "UserDocuments=%%I"
echo. "%UserDocuments%"
 
set "TestPath=%UserDocuments%\My Games\Skyrim Special Edition\"
 
copy /y test.txt "%TestPath%"
 
pause
exit
 

 

 
Ну и он нихрена не работает. Я сегодня уставший сильно, может, чего в упор не вижу?

Всего записей: 149 | Зарегистр. 12-10-2012 | Отправлено: 20:24 15-11-2021 | Исправлено: Silver Raven, 20:25 15-11-2021
BorlandIMHO

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

Цитата:
может, чего в упор не вижу?

Вариантов вижу ровно два:
1) Рядом с батником нет файла test.txt
или 2) отсутствует папка назначения.
test.cmd
Код:
cls
for /f "tokens=3" %%I in (' reg query "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v "Personal" 2^>nul ') do call set "UserDocuments=%%I"
echo. "%UserDocuments%"
 
set "TestPath=%UserDocuments%\My Games\Skyrim Special Edition\"
pushd "%TestPath%" && popd || call :ABORT "Недоступна папка %TestPath%!!!"
 
if EXIST "%~dp0test.txt" (copy /y test.txt "%TestPath%") else (call :ABORT "Недоступен файл %~dp0test.txt!!!")
 
pause
exit  
 
:ABORT
echo "Аварийное завершение выполнения: %~1"
pause
exit


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

Всего записей: 2352 | Зарегистр. 12-10-2006 | Отправлено: 21:01 15-11-2021 | Исправлено: BorlandIMHO, 21:02 15-11-2021
GCRaistlin



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

Цитата:
он нихрена не работает

Замените в цикле set на echo - и сразу поймете почему.

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

Всего записей: 3950 | Зарегистр. 18-04-2005 | Отправлено: 21:20 15-11-2021
Silver Raven

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

Всего записей: 149 | Зарегистр. 12-10-2012 | Отправлено: 21:48 15-11-2021
BorlandIMHO

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

Цитата:
Понятнее не стало:

Скрипт по какой-то причине не видит файла  test.txt, о чём и сообщает.
Если дело происходит на диске с ФС NTFS - возможно, проблема с ACL.
Или, к примеру, файл занят другим процессом и к нему нет доступа.
ЧЮдес не бывает...
 
У вас, судя по картинке, не "test.txt", а "text.txt", так что реакция скрипта закономерна.
 


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

Всего записей: 2352 | Зарегистр. 12-10-2006 | Отправлено: 22:22 15-11-2021 | Исправлено: BorlandIMHO, 22:26 15-11-2021
Silver Raven

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

Цитата:
У вас, судя по картинке, не "test.txt", а "text.txt", так что реакция скрипта закономерна

Ну, значит все, едет кукуха. Надо ложится спать.

Всего записей: 149 | Зарегистр. 12-10-2012 | Отправлено: 22:28 15-11-2021
GCRaistlin



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Silver Raven
У меня результат выполнения выглядит так:

Код:
 
"UserDocuments=\\Domain\Public\Users\Raistlin\My"
 

Потому что папка называется "My Documents".
Вообще, корректное получение значений из реестра - дело ох какое не простое.
 
Но у вас сработала другая мина, совсем простенькая: pushd не принимает параметры с "\" на конце.

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

Всего записей: 3950 | Зарегистр. 18-04-2005 | Отправлено: 22:29 15-11-2021
BorlandIMHO

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

Цитата:
pushd не принимает параметры с "\" на конце.


У меня принимает почему-то?...
Собственно, у Silver Raven проблема в том, что нет файла для копирования (у файла, который предполагается копировать, имя отличается от указанного в скрипте), а не с путём...
А pushd в эту конструкцию вообще с моей подачи добавлен... И, как это ни странно, нормально сработал, если верить картинке.


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

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

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

Цитата:
Потому что папка называется "My Documents".
Вообще, корректное получение значений из реестра - дело ох какое не простое.

И что делать?
Писать какой-то код отдельно для Win 7, и 8-11?
 
BorlandIMHO
Ну это ж я так, для теста. Выглядит все хорошо: получили путь из реестра и сделали его переменной (как я понял, это заодно исключит возможные проблемы с кириллицей в имени пользователя), добавили свое, заранее известное, окончание и (этого я не показывал) выполнили действия с файлом SkyrimPrefs.ini Вроде, все просто и логично. Но поди ж ты... не у всех пашет.

Всего записей: 149 | Зарегистр. 12-10-2012 | Отправлено: 22:36 15-11-2021 | Исправлено: Silver Raven, 22:42 15-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 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

Компьютерный форум 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