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

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

Всего записей: 2279 | Зарегистр. 16-10-2015 | Отправлено: 09:22 29-04-2016 | Исправлено: Maz, 08:47 26-03-2020
YuS_2



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

Цитата:
Не получается понять, почему результат выполнения этих строк одинаков?!

Просвещайтесь:
Использование операторов перенаправления команд

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

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

Цитата:
Просвещайтесь:
Использование операторов перенаправления команд

 
Там просто скопирован текст, который я уже не раз читал на ряде сайтов.
Вот, в моем примере в первом варианте строки команды дескриптор 1 перенаправляется в файл "result.txt", а дескриптор 2 перенаправляется в дескриптор 1, который ранее был перенаправлен в файл, здесь получаемый итог понятен. Но во втором варианте строки команды продублированный дескриптор 1 перенаправляется в дескриптор 2, почему сообщение об ошибке (которое, по идее, пишется в дескриптор 2) записывается в файл, хотя в файл был перенаправлен дескриптор 1 ?!

Всего записей: 29 | Зарегистр. 22-02-2009 | Отправлено: 05:25 03-03-2019
toshanNEW



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Не подскажите по jq, имеется такой .json:

Код:
 
{
    "1": {
        "2": {
            "abc": "test"
            }
        }
}
 

необходимо заменить "test" на "new test"

Всего записей: 65 | Зарегистр. 20-09-2005 | Отправлено: 10:02 20-03-2019
Alex_Piggy

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Доброе время, toshanNEW
Зависит от того, что Вы хотите:
jq ".\"1\".\"2\".abc = \"new test\"" in.json
jq "(.\"1\".\"2\" | select (.abc==\"test\"))|= (.abc=\"new test\")" in.json
jq "(.\"1\".\"2\" | select (try .abc |  startswith(\"test\")))|= (.abc=\"new test\")" in.json

Всего записей: 1891 | Зарегистр. 07-08-2002 | Отправлено: 11:24 20-03-2019
Pasha_ZZZ



Platinum Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
toshanNEW
Если на самом деле там не 1 и 2, а что-то с буквами - то можно еще так
Цитата:
jq ".x1.x2.abc=""new test"""""

Всего записей: 12410 | Зарегистр. 11-03-2002 | Отправлено: 11:31 20-03-2019
toshanNEW



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Pasha_ZZZ
Спасибо. У меня на самом деле примерно такой json:

Код:
 
{"Printer Settings":{"elements":{"Directory Settings":{"elements":{"DIRECTORY":{"default":"c:\\test\\"}}}}},"params":{"DIRECTORY": "c:\\test\\"}}
 

Как в одну команду объединить внесение двух изменений:

Код:
 
jq-win32.exe --compact-output ".\"params\".\"DIRECTORY\"=\"c:\\new test\\\\"" m.json>mE.json
jq-win32.exe --compact-output ".\"Printer Settings\".\"elements\".\"Directory Settings\".\"elements\".\"DIRECTORY\".\"default\"=\"c:\\new test\\\\"" mE.json>mEE.json
 

 
Ещё обнаружил, но не знаю, на сколько это существенно, что после выполнения в конце файла дописывается перевод строки (0x0D 0x0A)...

Всего записей: 65 | Зарегистр. 20-09-2005 | Отправлено: 13:18 21-03-2019
Alex_Piggy

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Доброе время, toshanNEW
jq -jc "(.params.DIRECTORY, .\"Printer Settings\".elements.\"Directory Settings\".elements.DIRECTORY.default)|= \"c:\\new test\\\\\"" m.json

Всего записей: 1891 | Зарегистр. 07-08-2002 | Отправлено: 13:49 21-03-2019 | Исправлено: Alex_Piggy, 13:52 21-03-2019
toshanNEW



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alex_Piggy
Спасибо.  
 
Теперь обнаружил, если встречается кириллический текст - он коверкается...

Всего записей: 65 | Зарегистр. 20-09-2005 | Отправлено: 15:01 21-03-2019
Alex_Piggy

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

Цитата:
Теперь обнаружил, если встречается кириллический текст - он коверкается...

Как именно? Чем открываете? Самый простой способ проверить -  
jq . input.json
При выводе в файл кодировка должна стать UTF-8.
Ксатти, еще вариант -  
jq "((.params.DIRECTORY=\"c:\\new test\\\\\") | (.\"Printer Settings\".elements.\"Directory Settings\".elements.DIRECTORY.default=\"c:\\абра\\\\\"))"

Всего записей: 1891 | Зарегистр. 07-08-2002 | Отправлено: 15:06 21-03-2019
toshanNEW



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

Цитата:
Как именно? Чем открываете?

В изначальном файле кодировка Windows1251 (Судя по Lister'у в TotalCMD и Блокноту Windows).
После jq становится UTF-8 и Кириллица становится не читаемой.

Всего записей: 65 | Зарегистр. 20-09-2005 | Отправлено: 17:19 21-03-2019
Alex_Piggy

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
toshanNEW
jq принимает только JSON в UTF-8. Если у Вас в CP1251 - то воспользуйтесь iconv, winiconv. Собранный мной бинарник win_iconv
Тогда получается так:
win_iconv -f CP1251 -t UTF-8 m.json | jq "." | win_iconv -f UTF-8 -t CP1251 > me.json

Всего записей: 1891 | Зарегистр. 07-08-2002 | Отправлено: 18:09 21-03-2019
YuS_2



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

Цитата:
Теперь обнаружил, если встречается кириллический текст - он коверкается...


Цитата:
В изначальном файле кодировка Windows1251 (Судя по Lister'у в TotalCMD и Блокноту Windows).  
После jq становится UTF-8 и Кириллица становится не читаемой.

Попробуйте powershell:
 
script.ps1 - кодировка файла utf8 with BOM, либо 1251

Код:
$filein = '.\in.json'
$fileout = '.\out.json'
$newstring = 'c:\new_test'
 
function set-param {
    process {
        $_.'printer settings'.elements.'Directory Settings'.elements.directory.default = $newstring
        $_.params.directory = $newstring
        write-output $_
    }
}
gc $filein  -enc default| convertfrom-json|set-param|convertto-json -dep 10 -comp| sc $fileout -enc default

 
батник для запуска:
run.bat

Код:
@powershell -ex bypass .\script.ps1
pause&exit /b

Всего записей: 3218 | Зарегистр. 03-02-2009 | Отправлено: 18:28 21-03-2019
toshanNEW



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

Код:
Не удается найти свойство "default" для данного объекта. Убедитесь, что оно существует и его можно задать.
E:\_jq\script.ps1:7 знак:9
+         $_.'printer settings'.elements.'Directory Settings'.elements. ...
+         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: ( [], RuntimeException
    + FullyQualifiedErrorId : PropertyNotFound

Alex_Piggy
Спасибо, так работает.  
Но если в файле не было данного параметра - он создаётся.  
Можно вообще просто найти в .json файле все вхождения с путём и заменить на другой путь?

Всего записей: 65 | Зарегистр. 20-09-2005 | Отправлено: 10:36 26-03-2019
Alex_Piggy

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Доброе  время, toshanNEW
jq "( .. | strings| select (. == \"test\"))|= \"new test\"" in.json
Заменит все строки, равные "test" на "new test"
А внутри select уже ставьте, что нужно - '. == "test"', 'startswith("test")', 'test("te[s]*t","i")'.

Всего записей: 1891 | Зарегистр. 07-08-2002 | Отправлено: 12:46 26-03-2019 | Исправлено: Alex_Piggy, 12:55 26-03-2019
Inoz2000



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


Код:
wmic os get OSArchitecture | find /i "64-bit"
if %ERRORLEVEL% NEQ 0 set 1C_PATH="C:\program files\1cv8\"
if %ERRORLEVEL% EQU 0 set 1C_PATH="C:\program files (x86)\1cv8\"
set 1C_NEWPATH="dir /S %1C_PATH%" | find /i "bin"

  • не слишком удачная идея использовать название переменной, начинающееся с цифры
    %1 это — аргумент командной строки.
  • чтобы записать вывод команды в переменную, воспользуйтесь командой for /f
    например
    wmic os get OSArchitecture | find /i "64-"
    if %ERRORLEVEL% NEQ 0 set C_PATH="C:\program files\1cv8\"
    if %ERRORLEVEL% EQU 0 set C_PATH="C:\program files (x86)\1cv8\"  
    for /f "delims=" %%c in ('dir /S %C_PATH% ^| find /i "bin"') do set 1C_NEWPATH=%%c
     
    и зачем заключать в кавычки dir, если переменную уже задали в кавычках.
    и ещё, ещё… …

  • Всего записей: 4917 | Зарегистр. 23-04-2009 | Отправлено: 18:14 28-03-2019
    newhk



    BANNED
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Это после многих неудачных попыток не убрал...
     

    Код:
     
    for /f "delims=" %%c in ('dir /S %C_PATH% ^| find /i "bin"') do set C_NEWPATH=%%c
     

    Выдает:
    Непредвиденное появление: %%c

    Всего записей: 400 | Зарегистр. 02-02-2009 | Отправлено: 19:09 28-03-2019 | Исправлено: newhk, 19:16 28-03-2019
    unreal666



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    newhk
    %%имя_переменной_в_батнике
    %имя_переменной_в_консоли
     
    В батнике имена переменной для for пишутся с двумя %%, а в консоли с одной.

    Всего записей: 6637 | Зарегистр. 14-02-2005 | Отправлено: 19:21 28-03-2019 | Исправлено: unreal666, 19:23 28-03-2019
    newhk



    BANNED
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Спасибо, понял, учту.
    Но, задачу решить пока не смог.
    Можно конечно через вывод в файл, а потом поиск в файле, но это грабли.
    А вообще, идея такая.
    Проверяем, какая разрядность у системы (нужно для дальнейшего определения пути)
    Когда определились, в какой из папок "Program files" лежит 1С-ка, идем дальше.
    Конечная идея, определить версию платформы до папки "bin" и развернуть в полный путь, который запишется в переменную (вот здесь и затыкаюсь).
    Эту задачу в другой ситуации решил с помощью PowerShell.
    Здесь надо через CMD.

    Всего записей: 400 | Зарегистр. 02-02-2009 | Отправлено: 20:01 28-03-2019
    Inoz2000



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

    Цитата:
    Здесь надо через CMD.

    Цитата:
    Проверяем, какая разрядность у системы
    Вызов wmic - это долго
    но сам bat-файл может быть запущен из 64-битной версии cmd.exe или 32-битной,
    поэтому, определить наверняка можно хотя бы так:
    If Defined PROCESSOR_ARCHITEW6432 (Set xOS= (x86^)) Else If "%PROCESSOR_ARCHITECTURE%"=="AMD64" Set xOS= (x86)
    set C_PATH="C:\program files%xOS%\1cv8\"

    Цитата:
    определить версию платформы до папки "bin"
    это - не ко мне, я этих ваших 1С не знаю
    ps видеть dir без /b как-то даже непривычно в таких задачах.

    Всего записей: 4917 | Зарегистр. 23-04-2009 | Отправлено: 20:31 28-03-2019
    newhk



    BANNED
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Если кому понадобиться...

    Код:
     
    wmic os get OSArchitecture | find /i "64-bit"
    if %ERRORLEVEL% NEQ 0 set C_PATH="C:\program files\1cv8\"
    if %ERRORLEVEL% EQU 0 set C_PATH="C:\program files (x86)\1cv8\"  
    for for /f "delims=" %%c in ('dir /B %C_PATH% ^| find /i "8.3."') do set C_NEWPATH=%%c
     

    Собственно, это часть одного достаточно большого кода для установки софта, выполнения операций над локальными пользователями и т.д.
    Конкретно этот участок нужен был для того, чтобы проверять, установлена ли 1с-ка определенной версии, а если установлена то пропускать установку.
    Спасибо.
     
    Добавлено:

    Цитата:
    ps видеть dir без /b как-то даже непривычно в таких задачах.

    Да, я это уже понял, иначе получается белиберда...

    Всего записей: 400 | Зарегистр. 02-02-2009 | Отправлено: 20:35 28-03-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.B0ard
    © Ru.B0ard 2000-2024

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru