Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум на Исходниках.RU > Пакетные файлы CMD, BAT > Лужу, паяю, ЭВМ починяю ...


Автор: JoeUser 29.09.16, 21:38
Доброго времени суток, камарады!

Раздел, а если быть точнее, тематика - нужна и важна. Но ... имхо, как раздел, она слишком "завышена по ценности/общности". Есть предложения по некоторой модификации рубрик в сторону компактности, я озвучил это в этом сообщении.

Антиоффтопик: вывод результатов в консоль и лог-файл одновременно

Для *nix систем:

<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    $ ./blablabla-script.sh 2>&1 | tee logfile.log

Для Виндовс:
Сперва создаем скрипт, например, C:\Windows\system32\pipe.js

<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    while (!WScript.StdIn.AtEndOfStream) {
      var str = WScript.StdIn.ReadLine();
      WScript.StdOut.WriteLine(str);
      WScript.StdErr.WriteLine(str);
    }

Потом запускаем нужное:
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    cmd.exe /c blablabla-cmd.cmd | cscript //B C:\Windows\system32\pipe.js 2 >> logfile.log

Автор: Dark Side 30.09.16, 03:28
Ну не умеют здесь админы ни во что кроме создания разделов. Ну нет в админке кнопок кроме "Создать раздел", что поделаешь? :-? Спасибо и на этом.

Цитата JoeUser @
Для Виндовс:
:facepalm:
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    Get-FooBar | Tee-Object logfile.log

Автор: JoeUser 01.10.16, 04:49
Цитата Dark Side @
Цитата JoeUser @
Для Виндовс:
:facepalm:
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    Get-FooBar | Tee-Object logfile.log

Чет не понял, чё за Tee-Object? :-?

Автор: Dark Side 01.10.16, 14:23
https://technet.microsoft.com/en-us/library...ror=-2147217396

Автор: JoeUser 01.10.16, 16:44
аааа, это с повер-шела

Автор: Mr.Delphist 11.10.16, 12:48
Да, это идея ещё с юниксовой консоли (tee), которая работала на манер тройника для клонирования стрима. T - слева приходит, справа уходит, и "вниз" перехватывается копия для локальной обработки (тупой лог, интеллектуальный мониторинг по рулам/регекспам и т.п.).

Автор: Dark Side 15.10.16, 03:43
3 прогрессбара одновременно на PS:
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    for($i = 0; $i -lt 5; $i++) {
        Write-Progress -Id 1 -Activity "Цикл по `$i" -Status "`$i=$i" -PercentComplete ($i / 5 * 100)
        for($j = 0; $j -lt 5; $j++) {
            Write-Progress -Id 2 -Activity "Цикл по `$j" -Status "`$j=$j" -PercentComplete ($j / 5 * 100)
            for($k = 0; $k -lt 5; $k++) {
                Write-Progress -Id 3 -Activity "Цикл по `$k" -Status "`$k=$k" -PercentComplete ($k / 5 * 100) -SecondsRemaining (5 - $k)
                Start-Sleep 1
            }
        }
    }

ps.PNG (, : 1747)
Как вы говорите это на CMD реализуется?

Автор: ter_nk_ 15.10.16, 04:41
Цитата Dark Side @
3 прогрессбара одновременно на PS:


А можно тоже самое на каком-нибудь STM32 для дисплея LCD 1602?

Автор: Dark Side 15.10.16, 04:51
ниипу. Да и тут Виндовые языки как-бы.

Добавлено
Хотя называть такой набор костылей как CMD языком, язык не поворачивается.

Автор: ter_nk_ 15.10.16, 05:40
Цитата Dark Side @
ниипу. Да и тут Виндовые языки как-бы.


Почему только виндовые, для юниксов-линуксов тоже.

Цитата Dark Side @
Хотя называть такой набор костылей как CMD языком, язык не поворачивается.


Ну почему, кстати под этот дисплей вывод shell-ом сделать можно в линуксе. Там вроде просто управляешь пинами с какой-нибудь raspberry. Но вот для той же raspberry была 10-ка выложена. У меня она не пошла, ну и хрен с ней, мне винда была и не нужна. Но вывести на дисплей с помощью скрипта в винде может и можно. А с STM32 это уже сложнее, это уже надо методичку курить :)

Автор: Dark Side 15.10.16, 06:24
Ну потому что это тупо надстройка над командной оболочкой мсдоса в винде для нежелавших трахаться с WSH. Доработок там за всё время - по пальцам пересчитать, и, вроде как, вообще больше не будет - тупо потому что есть Power Shell, который гораздо более продвинут во все стороны. CMD в винде осталась как атавизм специально для тех, кто не хочет/не может переписать свои уже давно работающие скрипты.

Глядя на эту тему хочется рыдать - люди придумывают решения проблем, которых уже много лет как не существует.

Автор: ter_nk_ 15.10.16, 06:33
cmd по сравнению иксовым шелл ни о чем. Надо посмотреть чего там в PowerShell.

Автор: Dark Side 15.10.16, 07:02
На вскидку:
ООП - например, читая директорию, ты получаешь не текст, а массив объектов FileInfo. Преобразование объектов в читабельный текст выделено в отдельный набор функций, которые в свою очередь отделены от функций самого вывода куда-либо (на консоль, в сеть и т.п.)
Возможность описывать функции как в нормальных языках
Возможность полноценно использовать пайпы с функциями.
Куча синтаксического сахара
Полноценный базовый набор функций (for, switch и т.д.)
Куча самых разнообразных доп. функций, в том числе для работы с сетью, WMI, виндовым планировщиком, да и всем остальным.
Низкоуровневые вещи вроде fopen, seek и т.п. если сильно хочется.

Выдрал из своих наработок пару примеров:

Чтение xml файла внутри zip архива без стороннего софта и создания лишних файлов - всё на потоках. На выходе - распарсенный(!) XML.
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    try {
        Add-Type -assembly "system.io.compression.filesystem"
        $zip = [io.compression.zipfile]::OpenRead($filename)
        $xml= New-Object xml
        $stream = $zip.GetEntry($xmlfilename).Open()
        $xml.Load($stream);
        Write-Output $xml.Data #result is here
    }catch [Exception] {
        Write-Error $_.Exception.Message
    }finally{
        $stream.Close()
        $zip.Dispose()
    }


Функция, которая принимает magnet-ссылку и добавляет её в uTorrent через его веб-интерфейс (запароленный), может принимать данные через пайп (т.е. magnets | Out-uTorrent() ). Тоже никаких вызовов сторонних программ.
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    #.Synopsis
    #Sent magnet urls to uTorrent via it's admin web-interface
    function Out-uTorrent() {
        param(
            [parameter(Mandatory=$true, ValueFromPipeline=$true)]
            [String]$Magnet
        )
        Begin {
            #Gather uTorrent Web-Interface token
            $webHost = Get-Settings "uTorrentHost"
            $webUser = Get-Settings "uTorrentUser"
            $webPass = Get-Settings "uTorrentPass"
            $response = Invoke-WebRequest `
                -Uri "http://$webHost/gui/token.html" `
                -Headers @{
                    "Authorization" = "Basic "+[System.Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes($webUser+":"+$webPass ))
                } `
                -SessionVariable "session"
     
            Remove-Variable 'webUser', 'webPass' #not needed in the process block
     
            if ($response.statusCode -eq 200) {
                $token = $response.ParsedHtml.getElementById("token").innerHtml
                Remove-Variable 'response'
            }else {
                Write-Error "Gathering uTorrent token failed"
                $false #return false before break
                break
            }
        }
        Process {
            #catch errors and return true/false
            try {
                (Invoke-WebRequest "http://$webHost/gui/?token=$token&action=add-url&s=$Magnet&download_dir=1&path=" -WebSession $session).StatusCode -eq 200
            }catch {
                $false
            }
        }
    }


Кто мне скажет как это сделать в CMD?

Автор: amk 20.10.16, 12:40
Цитата Dark Side @
ООП - например, читая директорию, ты получаешь не текст, а массив объектов FileInfo. Преобразование объектов в читабельный текст выделено в отдельный набор функций, которые в свою очередь отделены от функций самого вывода куда-либо (на консоль, в сеть и т.п.)
Можно поспорить, что в данном случае это достаточно часто скорее недостаток, чем преимущество.
Цитата Dark Side @
Возможность описывать функции как в нормальных языках
Возможность полноценно использовать пайпы с функциями.
Куча синтаксического сахара
Полноценный базовый набор функций (for, switch и т.д.)
Куча самых разнообразных доп. функций, в том числе для работы с сетью, WMI, виндовым планировщиком, да и всем остальным.
Низкоуровневые вещи вроде fopen, seek и т.п. если сильно хочется.
Ну большую часть этого ещё sh из первых UNIX'ов умел.
Цитата Dark Side @
Кто мне скажет как это сделать в CMD?
Ты ещё попроси это в SUB'е CP/M-ском сделать.

Автор: Dark Side 20.10.16, 13:36
Цитата amk @
Можно поспорить, что в данном случае это достаточно часто скорее недостаток, чем преимущество.
В каком месте возможность получить какие-то данные путём просто обращения к полям объекта вместо полового акта с grep, awk и регулярками является недостатком?

Цитата amk @
Ну большую часть этого ещё sh из первых UNIX'ов умел.
Что умел? Описания функций там на зачаточном уровне; пайпы с ними вообще никак; for/if/etc там есть, но пользоваться им без ежеминутного залезания в маны нереально, а в PS ты за одни секции begin/process/end в foreach запросто душу продашь; доп. функционал может быть, а может и не быть - сейчас там даже posix не всегда соблюдается, а про то, что ты без установки/написания чего-то тяжелого банально не сможешь свободно лазить внутри xml или html (как в 23-й строке второго примера выше); низкоуровневых вещей и в помине нет.

Цитата amk @
Ты ещё попроси это в SUB'е CP/M-ском сделать.
Опять-же мы тут за стандартные возможности винды и данный раздел говорим. Извини, но CP/M никак не относится ни к тому ни к другому.

Автор: amk 20.10.16, 14:01
Цитата Dark Side @
В каком месте возможность получить какие-то данные путём просто обращения к полям объекта вместо полового акта с grep, awk и регулярками является недостатком?
Уже обсуждалось. И убедить кого-либо в полезности этой возможности сторонникам PS не удалось. Хочешь сделать ещё одну попытку? Возможно в случае с чтением папки это даёт преимущество, но в других-то случаях этого нет. В awk это спокойно делается без использования регулярок. И без половых извращений.

Автор: Dark Side 20.10.16, 15:44
Цитата amk @
В awk это спокойно делается без использования регулярок
не смеши, а. Если хотя-бы тот же ls чего-то просто не выводит или выводит не так, никакой awk тебе не поможет. И не важно - ls это, или списки процессов, или ответ от удалённого сервера. Да и само использование awk и прочих уже можно считать ущербностью - ты получил данные, но тебе нужно ещё и разобраться в том, что ты получил. Я уже напарывался раз на то, что мои скрипты перестали работать из-за ifconfig, который однажды просто взял и поменял формат своего вывода.

Цитата amk @
Хочешь сделать ещё одну попытку?
Вот уж чего не надо. Я прекрасно знаю аргументацию линуксоидов: если ты хочешь что-то что в линуксе сделать сложно, значит это ты дебил и хочешь что-то не то. Проходили, спасибо.

Автор: JoeUser 20.10.16, 19:14
Цитата Dark Side @
Да и само использование awk и прочих уже можно считать ущербностью

Простите, но это уже "ступид уйндофс стайл" :lool: В "девственно-чистом" униксе полно (over 9000+) полезных утилит. Но, боюсь огорчить, практически во всех современных дистрибутах *nix'ов на 99.9% априори ставится Perl. Это не влажные фантазии - это ... случай таки де факто!!!

А на Перле я смогу тебе дважды моск отформатировать, пока ты осознаешь факт начала моей попытки :lol:

ЗЫ: Если слышал за *nix пару нотЪ - нефик тут симфонию пробовать начинать, ноты выучи сперва!!!

Добавлено
Цитата Dark Side @
если ты хочешь что-то что в линуксе сделать сложно, значит это ты дебил и хочешь что-то не то. Проходили, спасибо.

И это правильно! (Линупс - не единственный уникс! кстати) Все что можно сделать просто, нужно делать просто.

Автор: Mr.Delphist 20.10.16, 19:49
Цитата JoeUser @
Но, боюсь огорчить, практически во всех современных дистрибутах *nix'ов на 99.9% априори ставится Perl

Ну, у многих есть и TCL "из коробки" - тоже своеобразный язычок, и люблю я его тоже своеобразно :)

Хотя сейчас на это место упорно проталкивают Питон. Хотя из-за разрывания его в разные стороны он имеет все шансы стать "JavaScript командной строки": где-то код вообще не запустится, где-то - запустится, но отработает не так как ожидалось и т.п.

Автор: JoeUser 20.10.16, 20:15
В пень Питон и TCL - на парят они девелперов не разу! Кстати, Ruby на подходе... начинаю знакомиться, адово упоротый ООП.

Ах да ... ваши tcl/tk ... найдите 100 актуальных пакетов на нем, из over 9000+ существующих, поговорим ...
Питон-узеры в гневе? Бывает. Вы главное отступы соблюдайте! Остальное - херня.

Автор: Dark Side 21.10.16, 01:21
Цитата JoeUser @
Но, боюсь огорчить, практически во всех современных дистрибутах *nix'ов на 99.9% априори ставится Perl. Это не влажные фантазии - это ... случай таки де факто!!!
Ага, давайте расскажите гентущнику и маководу со стажем что там ставится, а что нет и сколько. Тут уже натыкался натыкался на debian-based дистрибутивы без vi в комплекте, про менее популярные вещи даже думать не хочу.

Цитата JoeUser @
И это правильно! (Линупс - не единственный уникс! кстати) Все что можно сделать просто, нужно делать просто.
Вот только сфигали лишний парсинг текста вы называете "просто"? Получается, зачем нам сразу брать данные нужного поля у объекта, когда можно просто добавить ещё 3 команды с невнятными аббревиатурами и 2 регулярки сверху! Ну и да, регулярку в каждом дистрибутиве надо перепроверять - нельзя ж заранее угадать что нам простые команды напишут. Вдруг они по-русски, например, кумекают, а мы тут... ну в общем простота у вас тут зашкаливает, я смотрю.

ЗЫ:
Цитата JoeUser @
В "девственно-чистом" униксе полно (over 9000+) полезных утилит
Цитата Бритва Оккама, на которую сослались там же
Не следует множить сущее без необходимости
Тут уже просто нечего добавлять.

Автор: JoeUser 21.10.16, 05:03
Цитата Dark Side @
Ага, давайте расскажите гентущнику и маководу

Звучит не менее угрожающе, нежели: еврей-сталевар! :lool:

Автор: JoeUser 21.10.16, 05:13
Цитата JoeUser @
Цитата Бритва Оккама, на которую сослались там же
Не следует множить сущее без необходимости

Бритва ДжоЮзера: Не следует строить из себе Рахметова без необходимости! :lool:

Добавлено
Цитата Mr.Delphist @
Хотя сейчас на это место упорно проталкивают Питон.

Есть такое дело. Тем не менее, наличие в системе Перла, Руби, Питона, практически с момента старта *nix системы, подчеркиваю, априори - дает не просто бонус, а просто загоняет обратно в детский сад "все ваши виндовсы". Это я вам, как сталевар-юниксовод гарантирую :lol:

Автор: Dark Side 22.10.16, 06:05
Цитата JoeUser @
Тем не менее, наличие в системе Перла, Руби, Питона, практически с момента старта *nix системы
Да, да. Просто надо поставить весь софт из интернета сразу вместе с системой - и всё будет работать. Наверное. Если не забывать где там питон, где руби, а где Си с препроцессами на PHP. Юникс-вэй, согласен. Но спасибо - уж лучше детский сад.

Добавлено
Жаль только что если вам уж так приспичил руби, то под виндами внезапно он тоже есть. Только вот винда вполне нормально и без него может работать.

Автор: Mr.Delphist 22.10.16, 19:15
Цитата JoeUser @
Ах да ... ваши tcl/tk ... найдите 100 актуальных пакетов на нем, из over 9000+ существующих, поговорим ...

Дык я ж почему и говорю:
Цитата Mr.Delphist @
своеобразный язычок, и люблю я его тоже своеобразно


А так - да, и ООП в нём есть (два разных несовместимых пакета), и поддержка COM, и сокеты - целый автоматизатор большой legacy-софтины мы на нём запилили... Правда, tk-часть я кроме хелло-ворлдов не щупал и сказать про это что-либо не могу (кроме того что выглядит оно как героиновая манекенщица без макияжа).

Powered by Invision Power Board (https://www.invisionboard.com)
© Invision Power Services (https://www.invisionpower.com)