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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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 186 187 188 189 190 191 192 193 194

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

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

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

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

Цитата:
"UserDocuments=\\Domain\Public\Users\Raistlin\My"
Потому что папка называется "My Documents".  

Сдаётся мне - у вас кавычек не хватает в set...
А ещё, наверное, на такой случай нужно {set "UserDocuments=%%I"} всё-таки записывать как {set "UserDocuments=%%~I"}. Да и call там не пришей рукав - и без него нормально работает.

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

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



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Silver Raven
В любой ОС можно сделать так, что имя папки документов будет с пробелами. И имя папки профиля, кстати, тоже.
 
Добавлено:
BorlandIMHO

Цитата:
Сдаётся мне - у вас кавычек не хватает в set...

У меня не было set. У меня было echo.
 

Цитата:
на такой случай нужно {set "UserDocuments=%%I"} всё-таки записывать как {set "UserDocuments=%%~I"}

Зачем?
 

Цитата:
Да и call там не пришей рукав - и без него нормально работает.

Тут-то да, но попробуйте, например, получить реальное имя каталога с профилями пользователей из HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList.

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

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

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

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

Наверное, там ещё и к tokens надо * добавить...
Тогда пробелы нормально обработаются.
 
Добавлено:

Цитата:
попробуйте, например, получить реальное имя каталога с профилями пользователей из HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList.

Ну здесь да, без call не обойтись.

Код:
for /f "tokens=3*" %%I in (' reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList" /v "ProfilesDirectory" 2^>nul ') do call set "ProfilesDirectory=%%~I"
echo %ProfilesDirectory%
pause


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

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



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

Цитата:
У меня принимает почему-то?...

Да, кстати, у меня тоже. Значит, дело не в "\", а в том, что и здесь из реестра имя папки извлекается неправильно. Впрочем, это к лучшему: цикл с "tokens=3" в любом случае надо переделывать.
 
Добавлено:
BorlandIMHO

Цитата:
Наверное, там ещё и к tokens надо * добавить...
Тогда пробелы нормально обработаются.

Как бы не так.

Код:
 
for /f "tokens=3*" %A in ("1 2 3  4 5 6") do @echo _%A_
_3_
for /f "tokens=3*" %A in ("1 2 3  4 5 6") do @echo _%B_
_4 5 6_
 

Самая мякотка в том, что между 3 и 4 у меня два пробела, а не один.

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

Всего записей: 4028 | Зарегистр. 18-04-2005 | Отправлено: 23:02 15-11-2021 | Исправлено: GCRaistlin, 23:07 15-11-2021
BorlandIMHO

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

Цитата:
Самая мякотка в том, что между 3 и 4 у меня два пробела, а не один.

Испешали фор Ю:

Код:
for /f "tokens=2,*" %%I in (' reg query "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v "Personal" 2^>nul ') do set "UserDocuments=%%~J"

Хоть 20 пробелов забивайте.


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

Всего записей: 2418 | Зарегистр. 12-10-2006 | Отправлено: 23:31 15-11-2021
GCRaistlin



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
BorlandIMHO
Так работает.
Но я, когда говорил про "не простое дело", имел в виду задачу получения значения параметра реестра с произвольным именем. Например, содержащим пробелы.
 
Кстати, замечу, что вместо
set "UserDocuments=%%~J"
здесь можно использовать
set UserDocuments=%%J

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

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

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

Цитата:
имел в виду задачу получения значения параметра реестра с произвольным именем. Например, содержащим пробелы.

Ну, к примеру, так:

Код:
for /F "delims=" %%A in ('reg query "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v "Local AppData" 2^>nul') do set "TMPVALUE=%%A"
set "LocalAppData=%TMPVALUE:*REG_SZ    =%"
echo "Local AppData" is: "%LocalAppData%"
pause

Отрезаем по {тип получаемых данных+4 пробела}; тип должен быть известен и не должен содержаться в собственно имени объекта и его значении.
Не совсем универсально с точки зрения любых возможных имён/значений - но хоть что-то.
 
 
Добавлено:
P.S. Разделов/параметров с "REG_SZ" в имени в реестре 10-ки боевой машины не обнаружено.
Со значениями несколько хуже, но чтобы не просто REG_SZ, а {REG_SZ+4 пробела} тоже не нашлось.

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

Всего записей: 2418 | Зарегистр. 12-10-2006 | Отправлено: 00:34 16-11-2021
GCRaistlin



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

Цитата:
тип должен быть известен

Вы, когда лезете в regedit смотреть значение параметра, всегда знаете его тип?
 

Цитата:
Отрезаем по {тип получаемых данных+4 пробела}

... и обламываемся, запустив наш код на WinXP: там вместо пробелов табуляция.
 

Цитата:
Разделов/параметров с "REG_SZ" в имени в реестре 10-ки боевой машины не обнаружено.

Это не значит, что их не может быть.
 
reg.exe использует определенные правила эскейпирования кавычек и слешей в именах параметров. Наш код должен корректно этим заниматься. А в Win2k reg.exe вообще нет, а значение получить в принципе можно, потому что там есть regedit.exe, который умеет экспортировать. В общем, тут есть где развернуться.

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

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



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Fenrizz
Спасибо, работает) Сделал так, правильно, ничего лишнего не удалит?:
 
@echo on
for /d /r "O:\FirefoxPortable\Data\profile\" %%I in (http?++*) do (
echo %%I
rd /S /Q "%%I"
)  
 
А команда с  forfiles удаляет через вызов другой что ли программы?

Всего записей: 1355 | Зарегистр. 09-01-2006 | Отправлено: 01:18 16-11-2021 | Исправлено: INKOGNI, 01:54 16-11-2021
Fenrizz



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

Цитата:
 Сделал так, правильно, ничего лишнего не удалит?:  

Не должно Но, в любом случае, лучше сначала закомментировать команду rd (REM rd /S /Q "%%I") и проверть глазами список папок на удаление
И ещё этот вариант не найдёт папки с аттрибутом "Скрытый", а forfiles - найдёт.
 

Цитата:
А команда с  forfiles удаляет через вызов другой что ли программы?

Да, через вызов командного процессора cmd с параметрами.

Цитата:
Internal CMD.exe commands should be preceded with "cmd /c".

Всего записей: 680 | Зарегистр. 12-09-2017 | Отправлено: 05:37 16-11-2021 | Исправлено: Fenrizz, 05:45 16-11-2021
080808



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Можно ли както конвертнуть в пакетном режиме DOCX в TXT с сохранением переносов и подержкой спецсимволов (много специфических знаков из разных языков)?

Всего записей: 78 | Зарегистр. 08-08-2008 | Отправлено: 06:59 16-11-2021
BorlandIMHO

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

Цитата:
конвертнуть в пакетном режиме DOCX в TXT

Насчёт переносов - ХЗ; думается, правильнее всё-таки при конвертации в текст переносы удалять...
А вообще OpenOffice/LibreOffice умеют.
Курите справку по соответствующему продукту, в частности опции --invisible (без GUI) и --convert-to (собственно конвертация).
https://ask.libreoffice.org/t/convert-to-command-line-parameter/840

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

Всего записей: 2418 | Зарегистр. 12-10-2006 | Отправлено: 09:25 16-11-2021
INKOGNI



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

Цитата:
Но, в любом случае, лучше сначала закомментировать команду rd (REM rd /S /Q "%%I")

А можно пример комментария, я не разбираюсь, как её написать и в каком месте.
 

Цитата:
 
@echo on
for /d /r "O:\FirefoxPortable\Data\profile\" %%I in (http?++*) do (
echo %%I
rd /S /Q "%%I"
)  
 

И подскажите, какой командой удалить несколько файлов с разными расширениями из одной папки и где указать путь папки. Например файлы log.txt, storage-sync-v2.sqlite-shm, containers.json

Всего записей: 1355 | Зарегистр. 09-01-2006 | Отправлено: 09:29 16-11-2021 | Исправлено: INKOGNI, 09:31 16-11-2021
Fenrizz



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

Цитата:
А можно пример комментария, я не разбираюсь, как её написать и в каком месте.  

То, что в скобках - REM rd /S /Q "%%I"
 

Цитата:
И подскажите, какой командой удалить несколько файлов с разными расширениями из одной папки и где указать путь папки. Например файлы log.txt, storage-sync-v2.sqlite-shm, containers.json

Проще всего удалять каждый файл по отдельности:

Код:
del /q C:\Folder\Subfolder\log.txt
del /q C:\Folder\Subfolder\storage-sync-v2.sqlite-shm
del /q C:\Folder\Subfolder\containers.json


Всего записей: 680 | Зарегистр. 12-09-2017 | Отправлено: 10:32 16-11-2021
Silver Raven

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Вот, что еще хотел оптимизировать:
есть файл Skyrim.ini, лежащий все там же где и прошлый проблемный. Его раньше копировал с заменой, но правильнее (для моих нужд) редактировать в нем содержимое стоки sResourceArchiveList2.
 
Алгоритм: Находим sResourceArchiveList2= и все что идет после знака, меняем на нашу переменную %HDAudioEnglishLocalizationArchivesList% (текст, в одну строку с запятыми и пробелами). Сохраняем. Через временный файл такое гонять не вариант, наверно? (там секции, упаси боже их поломать, читаться не будет)
 
P.S. Хочу избавиться от этого:
 
set "SkyrimINIFolder=%UserDocuments%\My Games\Skyrim Special Edition"
set "SkyrimPrefsINI=%UserDocuments%\My Games\Skyrim Special Edition\SkyrimPrefs.ini"
set "SkyrimINI=%UserDocuments%\My Games\Skyrim Special Edition\Skyrim.ini"
 
и поменять на, что-то такое:
 
"%SkyrimINIFolder%\Skyrim.ini"
"%SkyrimINIFolder%\SkyrimPrefs.ini"
 
Это можно оформить?

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



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Silver Raven
Можно - через временный файл.

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

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

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

Код:
 
for /f "tokens=2,*" %%I in (' reg query "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v "Personal" 2^>nul ') do set "UserDocuments=%%J"
 
set "TempConfig=Silver Raven mods pack data\temp_config.tmp"
set "SkyrimINIFolder=%UserDocuments%\My Games\Skyrim Special Edition"
 
set "HDAudioEnglishLocalizationArchivesList=Skyrim - Textures0.bsa, Skyrim - Textures1.bsa, Skyrim - Textures2.bsa, Skyrim - Textures3.bsa, Skyrim - Textures4.bsa, Skyrim - Textures5.bsa, Skyrim - Textures6.bsa, Skyrim - Textures7.bsa, Skyrim - Textures8.bsa, Skyrim - Patch.bsa, Unofficial HD Audio Project - Music.bsa, Unofficial HD Audio Project - ENG0.bsa, Unofficial HD Audio Project - ENG1.bsa, Unofficial HD Audio Project - ENG2.bsa, Unofficial HD Audio Project - ENG3.bsa, Unofficial HD Audio Project - ENG4.bsa"
 
if exist "%TempConfig%" goto TempConfig
for /f "usebackq delims=" %%A in ("%SkyrimINIFolder%\Skyrim.ini") do (
  for /f "delims== tokens=1*" %%B in ("%%A") do (
 
 
    >> "%TempConfig%" (
      if /i %%B==sResourceArchiveList2 (
        echo %%B="%HDAudioEnglishLocalizationArchivesList%"        
      ) else (
        echo %%A
      )
    ) || (
      del "%TempConfig%"
      exit /b 1
    )
  )
)
move /y "%TempConfig%" "%SkyrimINIFolder%\Skyrim.ini"
 

?

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



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Silver Raven
Я не знаю. Пробуйте.
Если нужно сохранить пустые строки: http://forum.ru-board.com/topic.cgi?forum=5&topic=50615&start=1080#4 (см. также пару сообщений ниже).

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

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



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

Цитата:
То, что в скобках - REM rd /S /Q "%%I"  

Правда не понимаю, где писать комментарий, в каких скобках? В каком месте батника. Куда писал что, всёравно окно сразу после исполнения закрывается.
 
Разобрался, в конце команд нужно было добавить pause
 
@echo off
for /d /r "O:\FirefoxPortable\Data\profile\" %%I in (http?++*) do (
echo %%I
rem
rd /S /Q "%%I"
)
pause

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

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

Цитата:
Если нужно сохранить пустые строки: http://forum.ru-board.com/topic.cgi?forum=5&topic=50615&start=1080#4 (см. также пару сообщений ниже).

Не, тот способ не помог. У меня все в одну кучу лепит, удаляя пустые стррки.

Всего записей: 149 | Зарегистр. 12-10-2012 | Отправлено: 21:08 16-11-2021 | Исправлено: Silver Raven, 21:08 16-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 186 187 188 189 190 191 192 193 194

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