На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: Jin X
  
> Задержка , или... может, лучше в PowerShell?
    Цитата Jin X @
    Проверку поддержки расширенной обработки команд и включение этой расширенной обработки, а также отложенного расширения переменных среды я делаю следующим образом:
    У меня один вопрос: учитывая что эти вещи появились лет этак 14 назад, где ты находишь системы, которые могут не поддерживать данные опции?

    Добавлено
    Цитата Jin X @
    В моём примере точность 10 мс (1/100 сек).
    Твой пример грузит Core i7 3770 на 10%. Не многовато-ли для ожидания?

    Это сообщение было перенесено сюда или объединено из темы "Трюки в CMD"
    Сообщение отредактировано: Jin X -
      Цитата Dark Side @
      Твой пример грузит Core i7 3770 на 10%. Не многовато-ли для ожидания?
      Много. Предложи другой вариант.

      Это сообщение было перенесено сюда или объединено из темы "Трюки в CMD"
        Я не специалист по скриптам, но думаю что переход на powershell решит все проблемы

        Добавлено
        ExpandedWrap disabled
          PS C:\Users\administrator> help Start-Sleep
           
          ИМЯ
              Start-Sleep
           
          ОПИСАНИЕ
              Приостанавливает выполнение скрипта или сеанса на указанный период времени.
           
           
          СИНТАКСИС
              Start-Sleep -Milliseconds <int> [<CommonParameters>]
           
              Start-Sleep [-Seconds] <int> [<CommonParameters>]
           
           
          ОПИСАНИЕ
              Командлет Start-Sleep приостанавливает выполнение скрипта или сеанса на указанный период времени. Его можно использ
              овать для решения различных задач, например чтобы дождаться завершения операции или приостановить работу перед повт
              ором операции.
           
           
          ССЫЛКИ ПО ТЕМЕ
              Online version: http://go.microsoft.com/fwlink/?LinkID=113407
           
          ЗАМЕЧАНИЯ
              Для просмотра примеров введите: "get-help Start-Sleep -examples".
              Для получения дополнительных сведений введите: "get-help Start-Sleep -detailed".
              Для получения технических сведений введите: "get-help Start-Sleep -full".


        Это сообщение было перенесено сюда или объединено из темы "Трюки в CMD"
        Сообщение отредактировано: Jin X -
          ^D^ima, а если написать программу на C++, Delphi или использовать JS/VBS, то много чего ещё сделать можно.
          Здесь (в этой ветке) речь идёт о cmd! :offtop:

          Это сообщение было перенесено сюда или объединено из темы "Трюки в CMD"
            так powershell используется повсеместно, начиная с висты, кому нужен этот cmd?

            Это сообщение было перенесено сюда или объединено из темы "Трюки в CMD"
              использоваться он начал чуть раньше, а с висты (или таки с семёрки?) начал идти сразу вместе с виндой уже как полноценная замена устаревшему CMD.

              Это сообщение было перенесено сюда или объединено из темы "Трюки в CMD"
                Цитата ^D^ima @
                так powershell используется повсеместно, начиная с висты, кому нужен этот cmd?

                По совету выше ... что-то пошло не так :)
                ExpandedWrap disabled
                  D:\Swap>help Start-Sleep
                  Данная команда не поддерживается. Воспользуйтесь параметром "Start-Sleep /?".
                   
                  D:\Swap>Start-Sleep /?
                  "Start-Sleep" не является внутренней или внешней
                  командой, исполняемой программой или пакетным файлом.

                ЗЫ: Win10-x64

                Это сообщение было перенесено сюда или объединено из темы "Трюки в CMD"
                  JoeUser
                  ты ее из cmd что-ли запускал? :D

                  найди powershell в пуске

                  Добавлено
                  Откроешь для себя новый мир по управлению виндой

                  Добавлено
                  Узнал что можно даже с outlook взаимодействовать через PS, фантастика

                  Это сообщение было перенесено сюда или объединено из темы "Трюки в CMD"
                    Цитата ^D^ima @
                    найди powershell в пуске
                    Найди Powershell ISE в пуске, хватит уже сидеть в консоли
                    Цитата ^D^ima @
                    Узнал что можно даже с outlook взаимодействовать через PS, фантастика
                    я по базе sqlite гулял обычными cd и ls. Правда тормозило оно адово.

                    Это сообщение было перенесено сюда или объединено из темы "Трюки в CMD"
                    Сообщение отредактировано: Dark Side -
                      Цитата ^D^ima @
                      найди powershell в пуске

                      Цитата Dark Side @
                      Правда тормозило оно адово.

                      Тормозная хрень)
                      Цитата Dark Side @
                      хватит уже сидеть в консоли

                      Far - мое все)

                      Это сообщение было перенесено сюда или объединено из темы "Трюки в CMD"
                        Цитата JoeUser @
                        Тормозная хрень)
                        ну да, садо-мазо из первого сообщения - наше всё

                        Это сообщение было перенесено сюда или объединено из темы "Трюки в CMD"
                          В общем, так бы написал сразу:
                          ExpandedWrap disabled
                            powershell -command start-sleep -milliseconds 100
                          :)

                          Добавлено
                          Только реальная задержка получается на 0.4 сек дольше почему-то. Хоть 1 мсек ставь, хоть 1000...

                          Это сообщение было перенесено сюда или объединено из темы "Трюки в CMD"
                            powershell сама запускается долго - ей .NET надо подтягивать, да и безопасность всю проверить - вдруг у тебя нет права запускать команды?

                            Это сообщение было перенесено сюда или объединено из темы "Трюки в CMD"
                              Тогда как использовать задержку из .CMD с помощью powershell?
                              Написать код полностью в отдельный файл на powershell и вызвать его из .CMD?

                              Это сообщение было перенесено сюда или объединено из темы "Трюки в CMD"
                                Выкинуть CMD и писать сразу на powershell и выполнять этот файл на powershell.

                                Это сообщение было перенесено сюда или объединено из темы "Трюки в CMD"
                                  Цитата Kray74 @
                                  Выкинуть CMD и писать сразу на powershell и выполнять этот файл на powershell.
                                  Да, только для запуска скрипта нужно выполнить:
                                  ExpandedWrap disabled
                                    powershell -Command Set-ExecutionPolicy RemoteSigned
                                    powershell -File MyScript.ps1
                                  Потому что по умолчанию ps1-файлы не ассоциированы с powershell (у меня, по крайней мере, так), а если не выполнить первую команду, то PowerShell выдаст ошибку, что запуск скриптов запрещён системой...
                                    Цитата Jin X @
                                    Потому что по умолчанию ps1-файлы не ассоциированы с powershell
                                    ты реально не знаешь как это лечится?
                                    Цитата Jin X @
                                    а если не выполнить первую команду, то PowerShell выдаст ошибку, что запуск скриптов запрещён системой...
                                    Запусти её один раз от имени админа.
                                      Dark Side, а ты когда пишешь программы, тоже снабжаешь их инструкциями для юзера о том, "как сделать, чтобы программа запустилась"?
                                      Я понимаю, что CMD или PS1 пишется, как правило, для себя, но раз уж мы затеяли такую пьянку, то давай сделаем вариант без костылей :)
                                        Jin X, если ты про безопасность, то извини - только админ имеет право менять подобные настройки на всю систему, а по дефолту майкрософт не доверяет пользователям запускать что попало и я думаю не надо объяснять почему.
                                        Если про ассоциации - то я (да и не только я - это одна из основных жалоб на PS) действительно не знаю почему по дефолту стоит именно редактирование файла, а запуск - вторым пунктом контекстного меню, но что есть - то есть. Да и мне реально никогда это не мешало - я всегда работаю из ISE, давно закинул что мне надо в Microsoft.PowerShellISE_profile.ps1, а потому и не пытался узнавать менее костыльных способов.
                                          Цитата Jin X @
                                          Только реальная задержка получается на 0.4 сек дольше почему-то. Хоть 1 мсек ставь, хоть 1000...

                                          Встречалось упоминание, что поскольку для командных файлов не нужна такая точность (ибо интерпретатор может дать сопоставимую погрешность), таймер реализован через кратное ожидание интервалов по 500 миллисекунд.

                                          У себя в командных файлах юзаю "timeout X", где X - число секунд. Оно ещё прикольно отсчитывает время на экране, плюс можно прервать/проскочить.
                                          Сообщение отредактировано: Mr.Delphist -
                                            Цитата Mr.Delphist @
                                            Встречалось упоминание, что поскольку для командных файлов не нужна такая точность (ибо интерпретатор может дать сопоставимую погрешность), таймер реализован через кратное ожидание интервалов по 500 миллисекунд.
                                            Pltcm дело именно в загрузке. Потому как 1 мс в реальности ≈ 400 мс, 100 мс ≈ 500 мс, а 1000 мс ≈ 1400 мс.
                                              Цитата Kray74 @
                                              Выкинуть CMD и писать сразу на powershell и выполнять этот файл на powershell.

                                              Выкинуть powershell и написать на Си. А теперь встаёт вопрос, если я мог писать на Си изначально, зачем мне CMD?

                                              Пример Jin X-а работает в дефолтной среде на любом cmd, без каких либо предустановленных вещей и условностей, имхо, суть именно в этом. Тоесть, я могу запустить это на Win95 и на Win10 не задумываясь, есть ли на них что-то предустановленное или нет?

                                              Именно по этому, в контексте с темой "Трюки в CMD" данный вопрос вообще не имеет смысла.

                                              Это как на мой вопрос "Как найти файл в VB6.0" отвечать "Используй Delphi7".
                                              Сообщение отредактировано: VisualProg -
                                                Цитата VisualProg @
                                                Тоесть, я могу запустить это на Win95 и на Win10 не задумываясь, есть ли на них что-то предустановленное или нет?
                                                На win95 ты это не запустишь, cmd - это не юниксовые консольные тулзы, которые с 80-х годов не обновлялись, он с каждой версией винды чуть-чуть изменяется. По минимуму, но всё-равно говорить "могу запустить это на Win95" - крайне самонадеянно.
                                                  Цитата Dark Side @
                                                  cmd - это не юниксовые консольные тулзы, которые с 80-х годов не обновлялись
                                                  О, UNIX'овые тулзы уже в 80 году работали, как надо. А виндовые раз в пять лет заново приходится переписывать. А до завершения так же далеко, как в начале.

                                                  Существует общее подмножество у разных версий CMD и BAT. BAT-файлы конечно сильно ограничены в возможностях даже по сравнению с CMD, зато будут выполняться начиная с DOS (Хотя некоторыми возможностями DOS в винде воспользоваться не получится, испортили)
                                                    Цитата VisualProg @

                                                    Именно по этому, в контексте с темой "Трюки в CMD" данный вопрос вообще не имеет смысла.

                                                    Я бы сказал так что "Трюки в CMD" вообще не имеют смысла т.к. все системы ниже Vista сняты с техподдержки со всемы вытекающими. Тоже самое что показывать "Трюки в Turbo pascal 7.0" на Windows 10.

                                                    Цитата amk @
                                                    А виндовые раз в пять лет заново приходится переписывать. А до завершения так же далеко, как в начале.

                                                    о чем именно речь?

                                                    Цитата VisualProg @
                                                    Выкинуть powershell и написать на Си. А теперь встаёт вопрос, если я мог писать на Си изначально, зачем мне CMD?

                                                    Для написания на си нужен компилятор как минимум, которого нет в винде и готовая программа на выходе не тоже самое что код для интерпритатора на входе. PowerShell позиционируется как прямая замена cmd с массой плюшек, зачем ездить на паровой машине если можно на реактивном самолете?
                                                      Цитата ^D^ima @
                                                      Я бы сказал так что "Трюки в CMD" вообще не имеют смысла т.к. все системы ниже Vista сняты с техподдержки со всемы вытекающими. Тоже самое что показывать "Трюки в Turbo pascal 7.0" на Windows 10.
                                                      Системы с техподдержки, может, и сняты, но CMD всё равно прекрасно работают. В отличие от Turbo Pascal 7.0...

                                                      Добавлено
                                                      У каждой работающей системы (подсистемы, языка и т.д.) есть своё применение. И зачастую использование CMD/BAT более оправдано, чем написание собственного приложения на ЯВУ, даже простого.
                                                        Цитата ^D^ima @
                                                        PowerShell позиционируется как прямая замена cmd с массой плюшек, зачем ездить на паровой машине если можно на реактивном самолете?
                                                        Наверно по той же, по которой не везде летают реактивные самолёты.
                                                          Цитата amk @
                                                          О, UNIX'овые тулзы уже в 80 году работали, как надо
                                                          :lool: т.е. через задний проход? Или вы именно это называете unix-way'ем?
                                                          Цитата amk @
                                                          А виндовые раз в пять лет заново приходится переписывать.
                                                          Это называется "развитие", все языки, все программы со временем доделываются и переделываются. Кроме посикса.
                                                          Цитата amk @
                                                          Наверно по той же, по которой не везде летают реактивные самолёты.
                                                          Паровые машины вообще не летают, так что вопрос остаётся в силе
                                                            Господа, мы начинаем сраться отклоняемся от темы.
                                                              имхо, мы к ней приближаемся, просто в названии раздела trollface забыли поставить.
                                                                M

                                                                Давайте реально Holy Wars в соответствующем разделе!
                                                                  Вот ещё один пример.
                                                                  У меня на сервере был написанный до меня cscript файл который очищал папку со старыми файлами определенного возраста и удалял пустые папки.
                                                                  Вот такой:
                                                                  ExpandedWrap disabled
                                                                    var StartFolder="c:\\Обмен"; // Scanning Start Folder
                                                                    var Interval=45; // Days
                                                                    //folders and files in StartFolder not deleted
                                                                     
                                                                    var fso, f, fc;
                                                                    var deep=0;
                                                                     
                                                                    if(WScript.Arguments.length==0)
                                                                     WScript.Quit();
                                                                    if(WScript.Arguments(0)!="GO")
                                                                     WScript.Quit();
                                                                    Interval = Interval * 1000 * 60 * 60 * 24;
                                                                    fso = new ActiveXObject("Scripting.FileSystemObject");
                                                                    cd = new Date().valueOf();
                                                                    ScanFolder(StartFolder);
                                                                     
                                                                    function ScanFolder(fldr)
                                                                    {
                                                                     var fl, fc, f
                                                                     var fcd, fmd
                                                                     
                                                                     fl = fso.GetFolder(fldr); // Subfolder
                                                                     fc = new Enumerator(fl.SubFolders);
                                                                     for (;!fc.atEnd(); fc.moveNext()){
                                                                      deep++;
                                                                      ScanFolder(fc.item());
                                                                      deep--;
                                                                      }
                                                                     delete fc;
                                                                     delete f;
                                                                     var fcount=0;
                                                                     fc = new Enumerator(fl.Files); // Files
                                                                     for (;!fc.atEnd(); fc.moveNext()){
                                                                      f = fso.GetFile(fc.item());
                                                                      fcd = new Date(f.DateCreated);
                                                                      fmd = new Date(f.DateLastModified);
                                                                      if(cd - fmd.valueOf()>Interval && cd - fcd.valueOf()>Interval && deep>0){ // Last Modification
                                                                       fso.DeleteFile(fc.item(), true);
                                                                       }
                                                                      else{
                                                                       fcount++;
                                                                       }
                                                                      }
                                                                     delete fc;
                                                                     delete f;
                                                                     if(fcount==0 && deep>1) // Delete Empty Folders
                                                                      fso.DeleteFolder(fldr, true);
                                                                    }


                                                                  Я его переписал на PS так:
                                                                  ExpandedWrap disabled
                                                                    #Удялем файлы дата создания и дата изменения которых меньше чем 30 дней
                                                                    Get-ChildItem "E:\Обмен"|Get-ChildItem -Recurse -force|? { $_.LastWriteTime -lt (Get-Date).AddDays(-30) -and $_.CreationTime -lt (Get-Date).AddDays(-30) } | Where-Object {$_.mode -notmatch "d"}|Remove-Item -Force
                                                                    #
                                                                    #
                                                                    #Удаляем пустые папки в которых нет дочерних файлов и папок
                                                                    Get-ChildItem "E:\Обмен"|Get-ChildItem -Recurse -force|Where-Object {$_.mode -match "d"} | Where-Object {$_.GetFiles().Count -eq 0 -and $_.GetDirectories().Count -eq 0}| Remove-Item -Force


                                                                  Как говориться почувствуй разницу
                                                                  0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                                                  0 пользователей:


                                                                  Рейтинг@Mail.ru
                                                                  [ Script execution time: 0,2472 ]   [ 17 queries used ]   [ Generated: 19.03.24, 07:56 GMT ]