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

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

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

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

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

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

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

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

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



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


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

Всего записей: 3198 | Зарегистр. 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"

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

Всего записей: 129 | Зарегистр. 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

Всего записей: 3198 | Зарегистр. 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#"  
 
но это именно для определённой папки.
 
Пользуюсь сейчас портативной версией. Как переписать, чтоб именно в определённом диске файлы искала или хотябы по всем дискам? Спасибо.

Всего записей: 1273 | Зарегистр. 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 и имя профиля написано кириллицей.

Всего записей: 129 | Зарегистр. 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

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

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

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

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

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

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

Всего записей: 129 | Зарегистр. 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. Проблем нет.

Это у вас нет.

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



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

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

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



Full 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"
)  

Всего записей: 482 | Зарегистр. 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
 

 

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

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

Advanced 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

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



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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

Всего записей: 129 | Зарегистр. 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

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

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

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


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


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

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

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

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

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

Всего записей: 129 | Зарегистр. 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

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