Консоль в Windows — никому не нужна?

    Очень часто приходилось слышать такое от людей, которые много времени проводят за администрированием и другими IT-забавами.

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

    Совсем недавно где-то на Хабре промелькнуло высказывание из серии «Не думал, что консоль в Виндах что-то может. Хотелось бы узнать об этом побольше».

    Вот так и возникло желание написать небольшую статью про основные возможности консоли.

    Про самые стандартные команды консоли можно узнать тривиальным способом:
    заходим в cmd и пишем:

    help

    В сообщении я не буду подробно рассматривать команды типа copy (т.е. совсем тривиальные) так как о них можно прочитать введя команду типа

    copy /?

    1. Ввод-вывод



    Рассмотреть же я попытаюсь команды, которые в основном хэлпе не написаны или описаны недостаточно подробно.
    Для начала хотелось бы написать про операторы перенаправления ввода-вывода.
    Таковыми операторами являются >, >>, <.
    Они нам могут пригодиться как минимум в трех ситуациях:
    • Просмотр логов бат-файла
    • Чтение длинных хелпов по консольным утилитам
    • Подхватывание каких-либо переменных из лежащего рядом файла

    При желании примеров можно придумать сколько угодно.

    Из командной строки эти возможности реализуются следующим образом. Для того, чтобы перенаправить текстовые сообщения, выводимые какой-либо командой, в текстовый файл, нужно использовать конструкцию

    команда > имя_файла

    Если при этом заданный для вывода файл уже существовал, то он перезаписывается (старое содержимое теряется), если не существовал — создается. Можно также не создавать файл заново, а дописывать информацию, выводимую командой, в конец существующего файла. Для этого команда перенаправления вывода должна быть задана так:

    команда >> имя_файла

    С помощью символа < можно прочитать входные данные для заданной команды не с клавиатуры, а из определенного (заранее подготовленного) файла:

    команда < имя_файла

    Приведем несколько примеров перенаправления ввода/вывода.

    1. Вывод встроенной справки для команды COPY в файл copy.txt:

    COPY /? > copy.txt

    2. Добавление текста справки для команды XCOPY в файл copy.txt:

    XCOPY /? >> copy.txt

    3. Ввод новой даты из файла date.txt (DATE — это команда для просмотра и изменения системной даты):

    DATE < date.txt

    2. FOR… DO



    Второй командой, которую бы хотелось рассмотреть является FOR ... DO
    Эта команда, так же как и многие другие достаточно подробно описана на сайте WindowsFAQ.
    Я же хочу остановиться на двух наиболее важных пунктах

    2.1 Переменные


    1. %~I
      Расширение %I, которое удаляет окружающие кавычки ("").
    2. %~fI
      Расширение %I до полного имени пути.
    3. %~dI
      Замена %I именем диска.
    4. %~pI
      Замена %I на путь.
    5. %~nI
      Замена %I одним именем файла.
    6. %~xI
      Замена %I расширением имени файла.
    7. %~sI
      Замена путем, содержащим только короткие имена.
    8. %~aI
      Замена %I атрибутами файла.
    9. %~tI
      Замена %I временем модификации файла.
    10. %~zI
      Замена %I размером файла.
    11. %~$PATH:I
      Поиск в каталогах, перечисленных в переменной среды PATH, и замена %I полным именем первого найденного файла. Если переменная среды не определена или поиск не обнаружил файлов, модификатор выдает пустую строку.


    Очевидно, что с помощью такого широкого набора переменных мы можем практически полностью отвязаться от индивидуальных особенностей конкретного экземпляра операционной системы и => избежать проблем например из-за того, что система встала на диск E:, а не на C:.

    2.2 Работа с файлами


    Чтобы произвести разбор файла, игнорируя комментарии, можно использовать следующую команду:

    for /F "eol=; tokens=2,3* delims=," %i in (myfile.txt) do @echo %i %j %k

    Данная команда производит разбор каждой строки в файле Myfile.txt, игнорируя строки, начинающиеся с точки с запятой, и передает второй и третий элементы из каждой строки в тело цикла команды FOR. Элементы разделяются запятыми и/или пробелами. Тело инструкции FOR использует %i для получения второго элемента, %j для получения третьего элемента и %k для получения оставшихся элементов в строке. Если имена файлов содержат пробелы, их следует заключать в кавычки (например, «ИмяФайла»). Для использования кавычек необходима команда usebackq. В противном случае кавычки рассматриваются как определение символьной строки для разбора.

    Переменная %i объявлена явно в инструкции FOR, а %j и %k объявлены неявно с помощью tokens=. С помощью tokens= можно указать до 26 элементов, если это не вызовет попытки объявить переменную с именем, большим буквы «z» или «Z».

    Для разбора вывода команды с помощью помещения параметра МножествоИменФайлов в скобки можно использовать следующую команду:
    for /F "usebackq delims==" %i IN (`set`) DO @echo %i

    В данном примере перечисляются имена переменных среды в текущем окружении.

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



    Итак, что нам дают всего эти две команды?

    Ну вот возьмем для примера утилиту, которая лежит на сайте Microsoft и называется psexec. Она позволяет нам, зная логин и пароль машины, подключиться к ней и выполнить произвольные действия в консольном режиме
    Допустим, что у нас есть домен Windows и пароль доменного администратора.
    Нам нужно подключиться ко всем машинам и удалить все файлы с маской *.mp3 с диска C:.

    Для начала — как получить список всех компьютеров сети.
    Я это делаю так:

    FOR /F "skip=3 delims=\ " %%A IN ('NET VIEW') DO ECHO %%A>>c:\comps.txt

    Имеем список всех компов в сети в столбик — как раз в том формате, который принимает psexec.
    Правда, будут проблемы с русскими названиями компов, но это ведь не актуальная проблема, да?

    Теперь про PsExec. Скачать его можно тут.
    Синтаксис описан там же.

    Нас интересует вот какая команда
    c:\psexec.exe @c:\comps.txt -u username -p password -c MP3DELETE.bat

    Содержимое .bat — файла:
    cd /d c:\
    for /r %%p in (*.mp3) do del %%p


    Само собой, задача чисто абстрактная. Мне просто хотелось показать, что консоль в Windows на самом деле весьма могуча и позволяет красиво и удобно решать многие задачи.

    А уж как здорово одним нажатием на bat-ник устанавливать пользователям софт в unattended-режиме…

    Спасибо за внимание! Жду критики и предложений…

    UPD.1 Спасибо большое maxshopen за инвайт и первую карму!
    Благодаря ему и всем плюсующим с радостью перенес свою первую статью в свой первый блог — Windows.

    UPD.2 Спасибо, Hint

    copy con file.txt
    Перенаправляет вывод с клавиатуры в файл (CTRL+Z — завершение ввода).
    type file.txt >prn
    Печает на принтере file.txt

    UPD.3 Дамы и Господа!
    Осознал, что можно на эту тему еще писать и писать.
    У кого-нибудь есть какие-нибудь конкретные пожелания?
    Или мне самому тему придумать?
    Если пожелания есть, то пишите в кАментах.
    Share post
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More
    Ads

    Comments 241

      +2
      спасибо. полезно, что-то не знал
        +21
        Вопрос — стоит ли продолжать?
          +6
          Было бы очень интересно
            +3
            конечно стоит
            тут конечно могу много кричать, что винда — г… но и т.д., но она есть и ей можно\нужно\приходится пользоваться
              +7
              откройте для себя PowerShell и продолжайте, было бы интересно почитать
              +1
              Стоит.
                +1
                Мой комент к статье habrahabr.ru/blogs/i_am_insane/60084/ подвиг вас написать такую прекрасную статью, а его (и меня) так нещадно заминусовали ((

                А вообще конечно продолжайте.

                По поводу того коммента беру свои слова обратно.
                  0
                  Очень интересно! Хотелось бы узнать еще!
                    0
                    Огромное спасибо. Очень много в 'nux работаю с консолью. Даже и не подозревал, что в Windows'е можно сделать хоть какую-то часть.
                    Еще раз спасибо за статью.
                      0
                      типичное заблуждение юниксоидов уже лет десять не актуально
                      0
                      Скажите, было ли продолжение?
                        0
                        Так и не дошли руки, к сожалению. Я как-то с админством завязал и пересел на линукс. Но если есть пожелания — вы пишите, а я попробую либо ответить либо написать…
                    +16
                    Все равно люблю свой bash =)
                      0
                      так кто же против, я вот тоже люблю баш, когда пишу скрипты на хостинге, и cmd, когда на своей машине )
                        0
                        Не спорб, bash — это отлично.
                        Просто так сложилось, что я работал под виндами.
                        И очень многие виндовые админы считают, что консоль никак не поможет в работе.
                        А я убедился в обратном.
                        А вот про bash все знают, что в линуксе консоль — самое главное :))
                          0
                          зато начинавшие с юниксов легко и быстро осваивают виндовую консоль
                          +4
                          win-bash.sourceforge.net/ ;p
                          +1
                          интересно конечно, но я бы оторвал руки тем кто придумал имена переменных. неужели нельзя было придумать что-то более читабельное и запоминающиеся? (вопрос риторический)
                            0
                            Подозреваю, что тут просто вопрос в уровне и развитости языка…
                            Все-таки это не C, не Руби, и не Питон ))
                              +2
                              и даже не баш, ога :)
                              0
                              нам недавно препод по ОС байку рассказал… как раз про имена.

                              Были годы бородатые. И тут законники придумали создать свою ОСь на основе DOS.
                              В итоге, название получилось «Альфа-ДОС».
                              Все было переведено на русский. и вот сюрприз — даже команды!
                              Захотели ввести первую команду. Вводят dir — ничего. Вводят дир — ничего.
                              Думают, малоли они знают про unix и вводят лс — ничего.

                              открыли ПОМОЩЬ.
                              нашли эту команду — КАТ.

                              но, как оказалось это пол беды.
                              Захотели преподы подсоединить мышь советскую. Воткнули и начали искать драйвер mouse.sys.
                              Аналогов типа мышь.сис, мышь.sys, крыса, манипулятор — ничего нет.

                              в итоге еще немного почитав маны — обнаружили — КОЛОБОК.sys!

                              так что то что оно хотя бы на англицком — это уже хорошо )
                              0
                              Для SQL скриптов, которые хранятся в SVN'e раньше пользовался командой, которая хранится в .bat файле:
                              for %%i in (*.sql) do @sqlcmd.exe -E -b -S «ServerName» -i "%%i" -d «DBName»

                              Использовать её перестал, когда понял что for… do… берет файлы не известно в каком порядке…
                              Собственно мой вопрос: есть ли возможность получить список файлов отсортированным по дате? от самого старого к новому…
                                +1
                                Можно получить список файлов и папок, упорядоченный по дате
                                dir /od /b

                                Потом, уже известным образом, его можно распарсить, вытащив строки с *.sql, например в отдельный файл.
                                а потом просто для кажой строки выполнить описанное вами действие.
                                +1
                                а мне сама виндовая консоль не нравится, очень много неудобств по сравнению с bash и terminal.
                                не вставляет и не копирует по {shift,ctrl}+Ins, и практически неудобное рудиментарное автодополнение и неправильная логика истории.
                                я искал нормальную консоль для винды, но все-таки цугвин поудобнее будет.
                                  0
                                  Ну копировать очень удобно просто по Enter… А вот вставлять — да, согласен.
                                  Но! Я в основном писал про пакетные файлы, которые пишутся в основном в блокноте, Notepad++ и иже с ними. в которые можно копировать и вставлять без всяких проблем.

                                  А еще на виндовую консоль, так же как и на линуховую, можно перетаскивать файлы. Что устраняет большую работу по впечатыванию путей и имен ))
                                    0
                                    вставлять можно правым кликом, у меня по крайней мере так в WinXP.
                                    +12
                                    откройте для себя PowerShell ISE

                                    +2
                                    А потом _они_ узнали о PowerShell….
                                      0
                                      да где этот чертов тэг????
                                        0
                                        Подождите, еще не узнали, судя по всему.
                                        +7
                                        Для любителей еще можно в качестве командного интерпретатора для Windows попробовать Python.
                                        Еще бы терминал получше.
                                          +2
                                          Под python'ом заплюсуемся. Сколь нибудь сложные скриптики уже на порядки удобнее писать на питончике. Универсальнее (чем PowerShell, все-таки кроссплатформенность, не говоря о cmd), привычно, доки хорошие (читать питоновский мануал в .chm на порядок удобнее чем читать вывод command /?).
                                            0
                                            command /? >> file.txt
                                              +1
                                              и что это меняет? ) впрочем это не главная причина, а главное, то что bat-скрипты очень неудобно отлаживать и сообщения об ошибках не такие информативные ну и т.д.
                                              0
                                              он не совсем под то заточен.

                                              например попробуйте написать аналог PSh

                                              ls -rec | sort LastWriteTime

                                              кстати, интересно было бф увидеть аналог на ipython
                                                0
                                                Я же написал «Сколь нибудь сложные» ) для простых да, хватит и cmd. Впрочем, PowerShell я не использую почти принципиально ) Использую порты unix utils, bash, etc… когда бывает необходимо, но чаще python.
                                                  0
                                                  Ну с принципами не поспоришь, а все-таки интересно, как бы это выглядело на ipython.
                                                    +2
                                                    да хоть как-то так:

                                                    import os, glob

                                                    print '\n'.join(sorted(glob.glob('*'), key=lambda f: os.stat(f).st_size))


                                                    хотя предупреждаю: python не создан для написания таких вот one-liner'ов! Этот пример скорее показывает очень плохой стиль кодирования на питоне )
                                                      0
                                                      1. не вижу рекурсивного обхода вложенных папок ( параметр -recurse в ls)

                                                      2. Меня тут убедляли что в ipython передаются объекты — а тут работа со строчками — это чистый питон а не АйПитон.

                                                      3. Шелл в отличии от скриптового языка как раз для ванлайнеров
                                                        +1
                                                        ipython тоже не использую (по крайней мере, как-то не надобилось)… и oneliner-ы предпочитаю не писать… если нужна некоторая функция проще и правильнее 1 раз написать скриптик и его использовать…
                                                          0
                                                          почему это проще и правильнее?
                                                            0
                                                            1) проще, потому что вы потом просто его используя не напрягая мозг на вспоминание аргументов комманд и самих комманд, етц, а 2) правильноее, потому что минимизирует ошибки связанные с п. 1
                                                              +1
                                                              а если дествие нужно ровно один раз?
                                                              я, например, не напрягался для указанного ванлайнера совсем. А у вас пока рекурсии нет даже.

                                                              Я думаю, есть класс задач для которых шелл лучше, чем скриптовый язык.
                                                                0
                                                                ну в вашем случае я бы использовал что-то вроде написанного тут

                                                                habrahabr.ru/blogs/windows/60604/#comment_1655069

                                                                просто мне, как прикладному программисту (а не системщику) весьма не часто выпадает работать в консоле, в основном же во всяких IDE, и прочих средах разработки. И, да, все написанное мною выше, по большей части мое имхо.
                                                                Но подчеркиваю, работай я плотно с консолью — выбрал бы баш&co чисто из идеологических соображений.
                                                                  0
                                                                  у dir нет параметра для рекурсивного обхода.
                                                                    +1
                                                                    вообще-то есть )
                                                                      0
                                                                      а, нашел
                                                          0
                                                          iPython не разрабатывался как конкурент PowerShell, там sh режим больше для галочки. Посмотрите лучше на geophile.com/osh/ он более PowerShell-подобный. А ещё что-то в моей Убунтекогда-то бегало HotWire называлось.
                                                0
                                                Как раз насчёт питона. Написал насколько консольных скриптов для настройки среды питона под окошками.
                                                В основном настройка путей потому что стоит паралельно 2.5 и 2.6.
                                                wiki.sasnyk.name/Home/кулінарна-книжка-починаючого-пітонера/python-26-install-and-setup
                                                Но вот с чем столкнулся. Эта гадина камандный интерпритатор по разному обрабатывает команду
                                                Setlocal Disabledelayedexpansion на разных версиях виндовз. Более того при разных настройках (ключи в рэестре) винды она отрабатывает по разному. По этому как написано в статье совсем отвязаться не удалось, потому что писать совсем универсальный скрипт это плодить монстрика строчек на 50.
                                                +2
                                                Предпочитаю Cygwin и не заморачиваться особенностями виндовой консоли.
                                                  +3
                                                  Можно развернуть: предпочитаю Powershell и не заморачиваться особенностями линуховой консоли — кто с какой стороны смотрит.
                                                    –1
                                                    Не видел реализаций powershell под linux.

                                                    Еще не наталкивался, чтобы на информационных ресурсах выкладывали powershell скрипты, в отличии хотя бы от bash.

                                                    Так что смысла в powershell не вижу. Лично мне безразлично какой скриптовый язык изучать, но я хочу иметь возможность пользоваться написанными скриптами под максимальным количеством платформ + хотя бы для одной из них этот язык должен быть родным.
                                                      0
                                                      Powershell — штука пока ещё новая, будут выкладывать — никуда не денутся. Дайте сроку хотя бы ещё два года. На сишарпе тоже не сразу всё появилось, а время летит быстро — теперь один из самых распространённых языков.

                                                      По поводу кроссплатформенности — согласен. Но здесь тоже может всё измениться (есть же Моно), да и не всем актуально.
                                                        0
                                                    +5
                                                    Когда писали про перенаправления, могли бы упомянуть про «устройства».
                                                    copy con file.txt
                                                    Перенаправляет вывод с клавиатуры в файл (CTRL+Z — завершение ввода).
                                                    type file.txt >prn
                                                    Печает на принтере file.txt

                                                    А TAB, может кто не знал, умеет дополнять имена файлов и папок.
                                                      0
                                                      > А TAB, может кто не знал, умеет дополнять имена файлов и папок.
                                                      не TAB, а Ctrl+F по-умолчанию?
                                                    • UFO just landed and posted this here
                                                        0
                                                        Да, файлы устройств стоило упомянуть. Кстати, именно из-за файла устройства «con» Винда не даёт создать файл с таким именем (хотя бытует ошибочное мнение, что это якобы из-за того, что у Гейтса было прозвище «Con» — «зубрила, ботаник»).

                                                        >А TAB, может кто не знал, умеет дополнять имена файлов и папок.

                                                        Вот только делает это через такую задницу, что порой хочется взвыть. К примеру, если автодополняем имя каталога, содержащее пробел (типа Program files, Documents and Settings, ...), весь путь будет взят в кавычки. А курсор, разумеется, будет стоять после закрывающей кавычки.
                                                        Плюс ещё слэш после автодополнения каталога не ставится — приходится ставить вручную.
                                                        Ну и так далее…
                                                        –1
                                                        Cygwin+bash+puttycyg и вы навсегда забываете об этом кошмарном cmd.exe.
                                                          –2
                                                          а потом format c: и устанавливаем linux… :)

                                                          нет cmd.exe есть cmd.exe!!! (PowerShell тоже ОК)
                                                          сам пользовался во времена RPC експлоита (kaht II), шелл способен на многое!!!
                                                            –1
                                                            я прокомментировал человека, говоря о том, что cmd.exe забывать нельзя!!!
                                                            т.к. это универсальное средство + не продукт третьих лиц, присутствует в любой установке (если не запрещено)
                                                            и подтвердил, что пригодно для использования в административных целях и не только!

                                                            PS в связке с VBS очень мощно.
                                                            –1
                                                            «Спасибоа внимание» — у Вас здесь опечатка.
                                                              0
                                                              Исправил, спасибо.
                                                              +1
                                                              Не нужна-ну нужна была. А пару дней назад появилась необходимость с удаленного компьютера регулярно сбрасывать данные ipconfig себе на почту. Почесал в затылке и не нашел ничего лучшего, как батничек написать для консоли.
                                                              Так что рано консоль со счетов сбрасывать. Спасибо за статью.
                                                                –17
                                                                Винда говно, но с ней приходится работать.
                                                                Пишите еще — до тех пор пока bash не портируют на винду ваши посты будут актуальны.
                                                                  –10
                                                                  bash.org.ru?
                                                                    –10
                                                                    уморительно смешная шутка
                                                                    0
                                                                    >Пишите еще — до тех пор пока bash не портируют на винду ваши посты будут актуальны.

                                                                    Вас в каком году заморозили? Баш на винду портирован хренадцать лет назад, причём со всеми основными утилитами типа grep, find и т.д.
                                                                    –3
                                                                    Поправьте 2 ачипятки в предложении, плз: "… А уж как (з)дорово одним нажатием на bat-ник уст(а)навливать ..."
                                                                      0
                                                                      Не пойму что-то минусующих, сообщать об ошибках в посте уже не модно?
                                                                        0
                                                                        Ну как я успел вникнуть, о них модно писать на почту.
                                                                        Но все равно спасибо. Все давно поправлено :))
                                                                          0
                                                                          Ок, буду знать.
                                                                          Просто, когда постил, они ещё были. :)
                                                                      +1
                                                                      В свое время проходили по информатике. Весьма полезные между прочим знания. Пригодились мне не раз. Жаль, что сейчас на уроках информатики больше изучают ворд. )-:
                                                                        0
                                                                        Спасибо за статью.
                                                                        Не подскажете ли как можно запустить из командной строки некий исполняемый файл и узнать pid созданного процесса?
                                                                          0
                                                                          pslist.exe из SysInternals Suite вам в помощь.
                                                                            +1
                                                                            psexec.exe с ключом -d как раз то что нужно. Благодарю!
                                                                              0
                                                                              Классная вещь, позволяет запускать что попало даже на удаленных компах
                                                                              (при наличии прав конечно же)
                                                                            –1
                                                                            Через командную строку никак, мона на C и WinAPI набрать программку короткую которая создает процесс и выводит его pid и потом запускать через cmd.exe.
                                                                              +1
                                                                              смотрите мой комментарий чуть ниже :))
                                                                              Вы ошибаетесь.
                                                                              +2
                                                                              а можно и встроенными средствами.
                                                                              Есть такая замечательная команда tasklist во всех виндах начиная с ХР.

                                                                              Работает так.
                                                                              Запускаете программу bla.exe
                                                                              start bla.exe
                                                                              tasklist /fi "imagename eq bla*"
                                                                                0
                                                                                и собственно tasklist /s computername :) +taskkill — творят чудеса.
                                                                                  0
                                                                                  К сожалению если запущено уже несколько bla.exe мы не сможем отличить один от другого ;)
                                                                                    0
                                                                                    Отсортировать по PID и выбрать с наибольшим? :)
                                                                                    Хотя это будет гадание, и можно ошибиться.
                                                                                      0
                                                                                      Ну можно поступить зверски:
                                                                                      taskkill /im bla* /f
                                                                                      bla.exe
                                                                                      ...
                                                                                    0
                                                                                    в psh

                                                                                    (start notepad.exe -passth).id
                                                                                    –8
                                                                                    ставим cygwin & bash и не тратим время на изучение всяких дурацких мастдайных PowerShell'oв
                                                                                      –1
                                                                                      Ну сколько ж таких умников! Уже третий в посте — я не понимаю, почему мне стоит потратить время на баш и цигвин, а не на повершелл? Чем один лучше другого? По-моему, исключительно вопрос вкуса; а в перспективе Повершелл даже интереснее.
                                                                                      • UFO just landed and posted this here
                                                                                          0
                                                                                          Оболочка должна быть простой, как молоток

                                                                                          Почему?
                                                                                          • UFO just landed and posted this here
                                                                                              0
                                                                                              проще в использовании или проще по устройству?

                                                                                              что проще — взять готовый поток объектов или распарсить текст и выделить структуру в нем?
                                                                                              • UFO just landed and posted this here
                                                                                                  0
                                                                                                  по мне PSh проще по использованию — комадлеты проще комбинируются чем то, что выдает и парсит текст
                                                                                                –1
                                                                                                Возьмите тогда лучше молоток. Компьютер в принципе сложен и неинтуитивен.
                                                                                                • UFO just landed and posted this here
                                                                                                    0
                                                                                                    Ну это уже выпендрёж. Я пользовался повершеллом и не один раз. Очень удобно. Если думаете, что неудобно — можете пояснить, в чём именно.
                                                                                                    • UFO just landed and posted this here
                                                                                                        0
                                                                                                        Нет, погодите, я не хочу устраивать разборки, но всё началось с вашей реплики «powershell в данном случае — микроскоп с пластмассовыми линзами».

                                                                                                        Эта реплика абсолютно ничем не подкреплена и ничуть не меньше моих реплик зашкаливает по уровню чего угодно. Мне идеология PowerShell кажется вполне разумной. И если вам конкретно не нравится что-то в её архитектуре — говорите предметно, а не абстрактными нападками.
                                                                                                        • UFO just landed and posted this here
                                                                                                            0
                                                                                                            Стоп!
                                                                                                            А Вы уверены, что эти команды идентичны?
                                                                                                            Пропускаются ли у Вас строки пр парсинге? итд…
                                                                                                            • UFO just landed and posted this here
                                                                                                              0
                                                                                                              Верно. Только одна закавыка: эта жуть «for /F» и т.п. — это cmd.exe, а никакой не Powershell. Такие вот дела :)
                                                                                                              Повершелл больше похож на язык высокого уровня а-ля PHP.
                                                                                                              • UFO just landed and posted this here
                                                                                                                  0
                                                                                                                  А вы попробуйте.
                                                                                                                  Краткость — необязательно бонус. Кроме того, Powershell _позволяет_ использовать объекты, а не _заставляет_.
                                                                                                                  • UFO just landed and posted this here
                                                                                                                0
                                                                                                                Кроме того не забывайте, что
                                                                                                                For /f итд — это ВСТРОЕННЫЕ воозможности. А повершелл, пхп и даже пито совсем не обязательно встроены!
                                                                                              0
                                                                                              тогда-уж лучше Microsoft SFU:
                                                                                              ru.wikipedia.org/wiki/Сервисы_Microsoft_Windows_для_UNIX
                                                                                              от cygwin у меня мурашки…

                                                                                              а лучше юзать cmd.exe или powershell
                                                                                              + SysInternals
                                                                                              0
                                                                                              в топку, используй павершел, там все тоже + можно запрограмить ваще все что хочешь, есть доступ к комам + дот нет!
                                                                                                –2
                                                                                                Да, цЫгвину тяжко придется с .net ))
                                                                                                  –1
                                                                                                  ну, а что делать) надо же развиваться!)
                                                                                                    –1
                                                                                                    +))
                                                                                                0
                                                                                                type file.txt >prn = copy file.txt prn

                                                                                                еще забавно copy con prn печатать с клавиатуры на принтер. Печатает после нажатия Enter
                                                                                                  +1
                                                                                                  До кучи к UPD2:

                                                                                                  Можно вводимый с клавиатуры текст сразу в значение переменной положить:

                                                                                                  SET /P variable=[promptString]

                                                                                                  А также извлекать подстроки и проводить вычисление нехитрых операций:
                                                                                                  SET /A выражение

                                                                                                  В общем, добро пожаловать в «SET /?».

                                                                                                    +1
                                                                                                    Мне вот что кажется:
                                                                                                    1) cmd.exe всё же слабоват. Умеет не слишком много, да и удобство (тех же FOR-циклов) сомнительное.
                                                                                                    2) Будущее за Powershell, но, увы, ждать ещё долго, пока он будет в качестве официальной части системы стоять везде, на любом компьютере.
                                                                                                    3) Пока в качестве альтернативы пишу скрипты на VBscript — не так модно, конечно, но исполняется на любом Windows-компьютере.
                                                                                                      +2
                                                                                                      Насчет «ждать долго» — 2008 сервер уже как бы реальность, и если вы будете использовать server core — то Powershell у вас не будет выключаться на компьютере )))
                                                                                                      Во всус он уже добавлен. Я потихоньку в нем разбираюсь — рулю некотороые вещи в офисе через него. cmdlet`ов уже куча для PS.

                                                                                                      Вывод: PowerShell — настоящее, а не будущее.
                                                                                                        0
                                                                                                        А вы посмотрите, что мне выше пишут:

                                                                                                        «Не видел реализаций powershell под linux. Еще не наталкивался, чтобы на информационных ресурсах выкладывали powershell скрипты, в отличии хотя бы от bash. Так что смысла в powershell не вижу.»

                                                                                                        Моя позиция ближе к вашей, но пока не всё так быстро. Действительно нет порта под линукс. Да и до ситуации, когда я смогу послать любому товарищу cmdlet и надеяться, что с вероятностью 99% на его Windows-машине всё заработает без лишних вопросов, ещё надо дожить. :)
                                                                                                          0
                                                                                                          Порт под линукс думаю появиться когда в нем надобность появиться))
                                                                                                          Насчет товарища да, но напоминаю что у некоторых товарищей и w2k до сих пор стоит, мы же ориентируемся на будущее ;). А наше настоящее — PS нужно учить!
                                                                                                            0
                                                                                                            >> Еще не наталкивался, чтобы на информационных ресурсах выкладывали powershell скрипты, в отличии хотя бы от bash. Так что смысла в powershell не вижу.»

                                                                                                            На майкрософте цэлый портал им отведён Technet script Center www.microsoft.com/technet/scriptcenter/default.mspx.
                                                                                                            да и poshcode.org/
                                                                                                            Информационные ресурсы ресурсам рознь, не ожидаете ведь вы увидеть powershell скрипты на ЛОРе?

                                                                                                            P.S. Сам лично я скриптую на Python под форточками.
                                                                                                          0
                                                                                                          Уже в качестве опционального апдэйта в Windows Update.
                                                                                                            0
                                                                                                            А я люблю консольку винды.
                                                                                                            Для себя написал несколько скриптов на VBS, такие как whois чекалку и Парсер Gismeteo.
                                                                                                            И в принципе время от времени пользуюсь стандартными командами.
                                                                                                            • UFO just landed and posted this here
                                                                                                                0
                                                                                                                Одна из самых используеммых мной команд виндовой консоли sc

                                                                                                                SC is a command line program used for communicating with the Service Control Manager and services.

                                                                                                                Позволяет работать в том числе и с удалёнными серверами…
                                                                                                                • UFO just landed and posted this here
                                                                                                                0
                                                                                                                А я для выполения некотрых задач использую nnCron, который тоже способен на очень многое.
                                                                                                                  +2
                                                                                                                  Я несколько недель жил в квартире, где не было нормального интернета. В итоге от скуки пришел к тому, что стал читать стандартную справку в windows. Так вот, в этой справке есть очень много интересных вещей. В итоге я пришел к выводу, что консоль в винде очень даже ничего, и ей вполне можно пользоваться. Писать вполне себе функциональные скрипты и делать много чего еще. Так, например, благодаря справке я узнал, что в винде есть свой планировщик заданий, аналог кронтаба (AT.exe), есть своё sudo (runas), есть даже система гибкая система назначения прав.

                                                                                                                  Так что люди, читайте справку!
                                                                                                                    –1
                                                                                                                    с правами как-раз все очень не гибко
                                                                                                                    +7
                                                                                                                    Я несколько недель жил в квартире, где не было нормального интернета. В итоге от скуки пришел к тому, что стал читать стандартную справку в windows. Так вот, в этой справке есть очень много интересных вещей. В итоге я пришел к выводу, что консоль в винде очень даже ничего, и ей вполне можно пользоваться. Писать вполне себе функциональные скрипты и делать много чего еще. Так, например, благодаря справке я узнал, что в винде есть свой планировщик заданий, аналог кронтаба (AT.exe), есть своё sudo (runas), есть даже система гибкая система назначения прав.

                                                                                                                    Так что люди, читайте справку!
                                                                                                                      0
                                                                                                                      Вобще команда at взята из *nix систем я бы назвал это некий аналог кронтаба. Спасибо что подсказали о ее существовании в Windows.
                                                                                                                      0
                                                                                                                      Если что-то есть, и до сих пор обсуждается и на одном известном форуме все еще обновляется тема «Задачи на bat-файлах», значит оно где-то да нужно. Консоль в Windows пусть и далека по функциональности от bash или PowerShell, но иногда ничего другого больше нет, да в принципе и не нужно. У меня много где работают мелкие bat файлы, которые получают некие данные, а потом кладут их в сетевую папку, где их забирают скрипты на bash. Я использую и то и другое, причем так, как удобнее мне, и не страдаю убеждениями всякими, что что-то лучше, а что-то хуже. Главное, чтобы работало, причем надежно.

                                                                                                                      А еще интересно, как ненавистники консоли в Windows будут узнавать mac адрес, пинговать? Не всегда будет время и возможность поставить PowerShell, а работу надо будет делать и быстро, причем не всегда такую тривиальную. Чем дальше я расту как системный администратор, тем больше понимаю, что ругать что-то очень просто, особенно то, что в силу ”религиозных” предпочтений изучать не хочется. А хороший специалист просто умеет и пользуется всем, как ему удобно, а не лезет узнать mac адрес в свойства сетевой карточки, так как отвергает всякую консоль в windows и о команде ipconfig даже слышать не хочет.
                                                                                                                        +1
                                                                                                                        вы не путайте консоль и программы, которые из нее можно просто запустить и прочесть их вывод.
                                                                                                                        Консоль в винде не предназначена для программирования, даже для сисадминов (а программисты способны писать например на perl\python....) Для программирования есть WSH, VBS, Jscript и т.д. встроенные в ОСь средства…
                                                                                                                        –1
                                                                                                                        Я пользуюсь консолью часто, но bash а не cmd.exe так как там даже исории команд нормальной нет и мелочей вроже ^R или ^L. Правда. надо признать cygwin довольно тормозной (вроде из за того что плохо эмулирует форк), такое ощущение что за 286 сидишь, но все равно удобно.
                                                                                                                          0
                                                                                                                          в примере из раздела «Пофантазируем» можно ли организовать какую-то обработку исключительных ситуаций (выделил, чтобы было более заметно про что речь в потоке комментариев). например, если одна из машин недоступна — сеть отвалилась, что произойдёт? возможно ли как-то сделать так, чтобы скрипт отработал до конца не вываливаясь с ошибкой, и в каком-нибудь виде проинформировал, что, во-первых, были косяки, а во-вторых, что конкретно это были за косяки.
                                                                                                                          спасибо.
                                                                                                                          –2
                                                                                                                          Я периодически пользуюсь этим в административных целях (именно cmd.exe), и, надо сказать я ненавижу этот хлам всем сердцем
                                                                                                                            0
                                                                                                                            Пользуйтесь bash или PS. Не нужно есть кактус ;)
                                                                                                                              0
                                                                                                                              нужно, под 2k PS плохо работает :)
                                                                                                                              Просто когда нужно выполнить какую-нибудь хитрую настройку стаи компьютеров, выхода не остается…
                                                                                                                            0
                                                                                                                            такие штуки вроде «if exist… move» достаточно неплохо
                                                                                                                            автоматизируют рутинные процессы переносов файлов по маски почти как фильтр
                                                                                                                              0
                                                                                                                              Думаю, не стоит продолжать.

                                                                                                                              Лучше пойти на следущее поколение — Windows script Host или его развитие — Power Shell.
                                                                                                                                0
                                                                                                                                а вот вопрос на засыпку, из студенческого детства.
                                                                                                                                может кто-то ещё помнит как в одноранговой сети повесить удаленный win98, используя консоль и знания о расшаренных на ней папках? :)
                                                                                                                                • UFO just landed and posted this here
                                                                                                                                  • UFO just landed and posted this here
                                                                                                                                      0
                                                                                                                                      с одной стороны громоздкий как рантайм
                                                                                                                                      с другой стороны легкий как синтаксис

                                                                                                                                      ls *.paсk | %{ unpaсk.exe $_ -$_}
                                                                                                                                      0
                                                                                                                                      Кстати, по поводу перенаправлений. Почему-то многих удивляет, что cmd понимает конструкции типа 'foo.exe >log 2>&1' или 'bar.exe 2>errlog'. Кстати, для логов батника может оказаться полезным 'echo some text >&2'. Ну, и про пайп, думаю, стоило сказать.
                                                                                                                                        0
                                                                                                                                        вот кстати в тему, полезный топик на только что открывшемся ресурсе для сисадминов serverfault.com

                                                                                                                                        Useful Commandline Commands on Windows
                                                                                                                                        serverfault.com/questions/3780/useful-commandline-commands-on-windows
                                                                                                                                          0
                                                                                                                                          Под DOS работало echo. |format a: > nul
                                                                                                                                          Форматировало дискетки без предупреждения.
                                                                                                                                            +1
                                                                                                                                            Хорошо было бы еще и источник указывать. Очень много текста взято отсюда, например.
                                                                                                                                            www.intuit.ru/department/os/compromtwin/2/
                                                                                                                                              +1
                                                                                                                                              Рекомендую к прочтению статьи с RSDN:
                                                                                                                                              Урок bat-аники
                                                                                                                                              Особенности реализации командного процессора cmd.exe операционных систем WinNT AKA Урок bat-аники 2-ой
                                                                                                                                                0
                                                                                                                                                Эти статьи на rsnd.ru помогли мне в своё время в универе, когда мы это проходили. Отличный ресурс.
                                                                                                                                                0
                                                                                                                                                Это не критично, но .bat по определению — «Пакетный файл MS-DOS». Вы же написали статью про администрирование Windows, поэтому считаю, что и файлы нужно называть соответствующим образом — .cmd, что обзывается как «Командный сценарий Windows NT». Исполняются оба типа скриптов одинаково, .cmd только под DOS/Win9x не запустятся.
                                                                                                                                                П.С.: на rsdn.ru тоже неплохо написано, большая статья, рекомендую ознакомиться.
                                                                                                                                                  0
                                                                                                                                                  Как я понимаю, разницы по сути нету, зато bat-ники запускаются в win 9x тоже?
                                                                                                                                                    0
                                                                                                                                                    Да, Вы правильно понимаете. Но почему-то написали, что пользуетесь cmd.exe, а не command.com. Просто cmd.exe «понимает» bat-файлы написанные для command.com, но родными для cmd.exe всё же есть cmd-файлы.
                                                                                                                                                    Я не то, чтобы цепляюсь, это так, для общего развития :)
                                                                                                                                                  0
                                                                                                                                                  Удобно .cmd-шки делать для управления группой задач, я себе так делал запуск MySql, Apache, ApacheMonitor и mysqlmonitor.
                                                                                                                                                  Гораздо удобнее чем все запускать по очереди.
                                                                                                                                                    0
                                                                                                                                                    for /F «eol=; tokens=2,3* delims=,» %i in (myfile.txt) do @echo %i %j %k

                                                                                                                                                    О_о нифига не unix way
                                                                                                                                                      0
                                                                                                                                                      А *nix-like это как будет выглядеть?
                                                                                                                                                        0
                                                                                                                                                        если я правильно понимаю то, что там происходит, что как-то так
                                                                                                                                                        cat myfile.txt | awk -F, '{print $2 $3}'
                                                                                                                                                        насчет комментариев не понял, но если они обозначаются каким-нить символом, то между cat и авкой вставить grep -v
                                                                                                                                                        Хотя, я повторяю, я не совсем понимаю что там происходит, а проверить негде — везде линукс
                                                                                                                                                          0
                                                                                                                                                          Да, вы правы — там тема в том, что закомментированная строка начинается с;
                                                                                                                                                            0
                                                                                                                                                            Ну да, делается через grep -v
                                                                                                                                                            то есть получается
                                                                                                                                                            cat myfile.txt | grep -v '^\s+;' | awk -F, '{print $2 $3}'
                                                                                                                                                            по-моему намного нагляднее того, что в топике. очень много спец символов. хотя человека, не знающего регэкспы, строка '^\s+;' заставит запаниковать =)
                                                                                                                                                              0
                                                                                                                                                              это bash или что-то выше уровнем?
                                                                                                                                                                0
                                                                                                                                                                Команда grep фильтрует свой ввод с помощью регулярных выражений
                                                                                                                                                                ^\s+; означает
                                                                                                                                                                ^ — начало строки
                                                                                                                                                                \s — пробельный символ(пробел, таб, \n)
                                                                                                                                                                + — 1 или больше предыдущих символов(в нашем случае пробельных)
                                                                                                                                                                ; — точка с запятой =)

                                                                                                                                                                Вообще, если вы еще не знакомы с регэкспами — настоятельно рекомендую. Реализация их есть, наверное, везде.
                                                                                                                                                                Самая популярная имплементация — PCRE(Perl Compatible Regular Expressions) — они умеют делать все и даже чуть более.
                                                                                                                                                                Хорошо описаны в манах по перлу, например вот тут (http://perldoc.perl.org/perlretut.html)
                                                                                                                                                                  0
                                                                                                                                                                  Нет, вы меня не поняли. С регэкспами я знаком еще по перлу. Вопрос заключался вот в чем:
                                                                                                                                                                  cat myfile.txt | grep -v '^\s+;' | awk -F, '{print $2 $3}' — это bash? или какой-то язык?
                                                                                                                                                                    0
                                                                                                                                                                    ну да, он, родной. правда от баша тут используется только пайпы, остальное делают отдельные команды
                                                                                                                                                                    /bin/cat, /bin/grep и /usr/bin/awk
                                                                                                                                                                    но ведь это и есть unix way =)
                                                                                                                                                                      0
                                                                                                                                                                      Ну, собсна, и классно. Я про это уже писал выше, что консоль в линухах — это мегакруто. Просто многие не верят, что она что-то дает в виндах.

                                                                                                                                                                      И еще важно, не задействован ли в вашей клманде какой-нить перл…
                                                                                                                                                                      То есть я правильно понял, что программы, встроенные в никсы по умолчанию поддерживают регэкспы?
                                                                                                                                                                      Ну это правда очень здорово.
                                                                                                                                                                        0
                                                                                                                                                                        Нет, не правильно. навскидку я знаю 3 программы с регэкспами: grep, sed и перл.
                                                                                                                                                                          0
                                                                                                                                                                          Тогда не совсем честно, ибо перл может быть и не встроен в ось ))
                                                                                                                                                                            0
                                                                                                                                                                            Да при чем тут перл?
                                                                                                                                                                            Эти программы либо сами имеют имплементацию регэкспов, либо используют libpcre.
                                                                                                                                                                            Да, сейчас вот смотрю на исходники grep — там есть код регулярных выражений.

                                                                                                                                                                            Все 3 программы входят в base system, так что они есть всегда везде. Да и перл всегда везде есть =)
                                                                                                                                                                              +1
                                                                                                                                                                              Ну что я могу сказать?
                                                                                                                                                                              Да славится линух, великий и прекрасный!
                                                                                                                                                                                0
                                                                                                                                                                                Вы правильно уловили мою мысль =)
                                                                                                                                                                                  0
                                                                                                                                                                                  Я ж и не спорил.
                                                                                                                                                                                  Просто надо понимать осознавать, что и в виндах кое-что можно )))
                                                                                                                                                                                    0
                                                                                                                                                                                    Ну я не спорил, что что-то можно. Я к чему это все говорю — в винде-из-коробки очень мало утилит всяких разных и писать полноценные скрипты довольно сложно.
                                                                                                                                                                            0
                                                                                                                                                                            >навскидку я знаю 3 программы с регэкспами: grep, sed и перл.

                                                                                                                                                                            Ещё как минимум find
                                                                                                                                                                              0
                                                                                                                                                                              Ну да, конечно же
                                                                                                                                                        0
                                                                                                                                                        Можно еще рассказать про проект console и использование MiwGW-утилит. Ну, это для фанатов =)
                                                                                                                                                          0
                                                                                                                                                          Я долго искал эскейп символ в cmd т.к. мне нужно было использовать > символ, кавычки к сожалению тут не работают. И о чудо когда после пару часов поиска я узнал что эскейп символ это — ^. Ниже пример
                                                                                                                                                          @echo ^<example@example.com^>
                                                                                                                                                          выведет нам
                                                                                                                                                          <example@example.com>
                                                                                                                                                            +1
                                                                                                                                                            как это не нужна??? да без нее в винде вообще никуда.
                                                                                                                                                              0
                                                                                                                                                              А вот как решить такую задачу:
                                                                                                                                                              При подключении к беспроводной сети А, винда должна подключать сетевые диски по указанному пути. А при подключении к сети Б, отключать эти и подключать другие.
                                                                                                                                                              Точнее при отключении от любой сети, сетевые диски чтобы автоматом также отключались.

                                                                                                                                                              Что для этого нужно? PowerShell?
                                                                                                                                                                0
                                                                                                                                                                Вполне вероятно, что это может и Kixtart, если уж речь идет о скриптовых языках.
                                                                                                                                                                как вариант можно в at.exe задать по расписанию пинговать некий комп, и, в зависимости от того, пингуется ли, пробовать подключитсетевые ошибки.
                                                                                                                                                                  0
                                                                                                                                                                  Да, забыл написать.
                                                                                                                                                                  стевые диски подключаются командой
                                                                                                                                                                  net use U: \\comp\share
                                                                                                                                                                  а удаляются
                                                                                                                                                                  net use u: /delete

                                                                                                                                                                  Как вариан можно парсить ipconfig и в зависимости от того, какой айпишник у компа совершать определенные действия.
                                                                                                                                                                    0
                                                                                                                                                                    И правда. Известно как загнать ipconfig в текстовый файл. Осталось из него прочитать инфу, и в зависимости от неё выполнить нужные команды. А скрипт необходимо запускать автоматически с помощью планировщика заданий. Вероятно там можно настроить зависимость от подключения/отключения к сети.
                                                                                                                                                                      0
                                                                                                                                                                      Я правильно понял, что проблема решена?
                                                                                                                                                                  0
                                                                                                                                                                  Очень интересная статья, с удовольствие почитал,
                                                                                                                                                                  Но вот в Windows XP Пример:
                                                                                                                                                                  FOR /F «skip=3 delims=\ » %%A IN ('NET VIEW') DO ECHO %%A>>c:\comps.txt
                                                                                                                                                                  Почему-то выдает:
                                                                                                                                                                  Непредвиденое появление %%А.
                                                                                                                                                                  Что я делаю не верно?
                                                                                                                                                                    +1
                                                                                                                                                                    Потому что если работаете из коммандной строки, а не из bat-ника, то нужно писать с одним %:
                                                                                                                                                                    FOR /F «skip=3 delims=\ » %A IN ('NET VIEW') DO ECHO %A>>c:\comps.txt
                                                                                                                                                                      0
                                                                                                                                                                      Благодарю, заработало.
                                                                                                                                                                    0
                                                                                                                                                                    Мне тоже нравиться консоль винды. Единственное, что мне не нравиться, это отсутствие конвеера. Непривычно и не удобно.
                                                                                                                                                                      0
                                                                                                                                                                      Я пршу прощения за свою необразованность, но конвеер — это что?
                                                                                                                                                                        0
                                                                                                                                                                        Ну, например, я линуксе я часто пользуюсь конвейером:
                                                                                                                                                                        cat squid.conf | grep -v "^#" | grep -v "^$" ну или как то так)
                                                                                                                                                                        В винд консоли я подобия не нашел.
                                                                                                                                                                        Точного определения не подскажу, не знаю)
                                                                                                                                                                          0
                                                                                                                                                                          на, как я понимаю, в винд консоли то же самое можн реализовать просто вкладывая одну команду в другую. а еще в винд консоли тоже есть &, && и ||
                                                                                                                                                                            0
                                                                                                                                                                            Хорошо. Задача. Посмотреть файл hosts в винде.
                                                                                                                                                                            Некоторые строчки закомментированы символом # в начале.
                                                                                                                                                                            Выведи консолью винды содержимое файла без комментированых строчек.
                                                                                                                                                                              0
                                                                                                                                                                              echo off
                                                                                                                                                                              for /F "eol=# tokens=1,2,3*" %i in (C:\Windows\System32\drivers\etc\hosts) do echo %i %j %k %l


                                                                                                                                                                              так много параметро на случай, если у тебя в файле hosts может быть много записей на один айпишник…
                                                                                                                                                                                0
                                                                                                                                                                                Хм. Спасибо. Буду еще раз хелпы читать.
                                                                                                                                                                                  0
                                                                                                                                                                                  Как вы можете заметить, это практически идентично тому, что написано в самой статье )) только парсится файл хостс и добавлен лишний аргумент ))

                                                                                                                                                                                  А, еще поменял eol.
                                                                                                                                                                                +2
                                                                                                                                                                                Например вот так:
                                                                                                                                                                                findstr /B /V # C:\WINDOWS\system32\drivers\etc\hosts

                                                                                                                                                                                или так:
                                                                                                                                                                                type C:\WINDOWS\system32\drivers\etc\hosts | findstr /B /V #

                                                                                                                                                                                Переопределение вывода с помощью | работает в консоли еще со времен dos-а практически так же как в юниксе, разве что нет команды tee.
                                                                                                                                                                                Называется это pipes, не знаю как оно будет по-русски, наверное потоки.
                                                                                                                                                                                  0
                                                                                                                                                                                  Круто! этого не знал уже я )))
                                                                                                                                                                                  Но в том случае, если нужно не только вывести, а потом еще с этим как-то работать, то у меня вариант в чем-то лучше. ибо все по переменным раскладывается ))
                                                                                                                                                                                    0
                                                                                                                                                                                    Сегодня уровень моего опыта подрос :) Спасибо :)
                                                                                                                                                                          +2
                                                                                                                                                                          чуть менее чем полностью вся эта информация содержится в стандартной справке
                                                                                                                                                                            +1
                                                                                                                                                                            Вы правы, но чтобы почитать справку, надо знать что искать :)))
                                                                                                                                                                            я же здесь не все команда рассказал, даже не про все возможности for.
                                                                                                                                                                            Зато теперь люди зайдут в консоль и наберут for /?
                                                                                                                                                                            И, вероятно, узнают многое.
                                                                                                                                                                              0
                                                                                                                                                                              > Зато теперь люди зайдут в консоль и наберут for /?
                                                                                                                                                                              ИМХО с этого как раз и надо начинать, а потом уже читать подробные руководства с примерами
                                                                                                                                                                                0
                                                                                                                                                                                Так это написано :))
                                                                                                                                                                                Практически в самом начале…
                                                                                                                                                                                Только не про For, нокакая разница?
                                                                                                                                                                            0
                                                                                                                                                                            в виндовой консоли есть много чего… мно что умеет… стоит ещё цигвин, но его пришлось поставить из-за того что e-texteditor его просил…
                                                                                                                                                                            под винду есть обёртка для cmd называется Console2 копировать вставлять умеет… растягивать можно… вопщем я пользуюсь и не жалуюсь… мне нравится…
                                                                                                                                                                              0
                                                                                                                                                                              Где брать?
                                                                                                                                                                                0
                                                                                                                                                                                Я рекомендую хотя бы посмотреть в сторону ConEmu. Несколько отзывов на StackOverflow. На мой взгляд (как разработчика) эта обертка намного более гибкая в плане настроек и богаче возможностями. Например для фанатов есть «искаробочный» Quake/Tilde режим, умеет ANSI X3.64, позволяет выделять мышкой как «текстовые» так и прямоугольные блоки, можно задать различные настройки в зависимости от активного консольного приложения, запуск новой консоли из командной строки ранее открытой, и т.д. и т.п.
                                                                                                                                                                                  +1
                                                                                                                                                                                  Ухтыжблин. Мой первый и самый крутой пост. )
                                                                                                                                                                                0
                                                                                                                                                                                Рождается потом такая шизофрения:
                                                                                                                                                                                clear.cmd
                                                                                                                                                                                — :dirs
                                                                                                                                                                                for /F «usebackq delims==» %%a in (`blacklst.cmd dir`) do rd /s /q "%%a"

                                                                                                                                                                                :files
                                                                                                                                                                                for /F «usebackq delims==» %%a in (`blacklst.cmd file`) do del /f /s /q "%%a"
                                                                                                                                                                                — blacklst.cmd
                                                                                                                                                                                — @if "%1"=="" goto end
                                                                                                                                                                                @if "%1"==«dir» set param=/ad
                                                                                                                                                                                for /F «eol=; tokens=1*» %%a in ('type blacklst.txt ^| find «path „') do ^
                                                                                                                                                                                for /F “eol=; tokens=1*» %%d in ('type blacklst.txt ^| find "%1 "') do ^
                                                                                                                                                                                call dir /b /s %param% "%%b"\"%%e"
                                                                                                                                                                                :end
                                                                                                                                                                                — blacklst.txt
                                                                                                                                                                                — dir VShell*
                                                                                                                                                                                dir LizardTech*
                                                                                                                                                                                dir WinRAR*

                                                                                                                                                                                path %USERPROFILE%
                                                                                                                                                                                path %ALLUSERSPROFILE%
                                                                                                                                                                                path %windir%\system32\config\systemprofile

                                                                                                                                                                                file secure*.lnk
                                                                                                                                                                                file adobe*.lnk
                                                                                                                                                                                file Windows Update.lnk
                                                                                                                                                                                — Оно работает *)
                                                                                                                                                                                  0
                                                                                                                                                                                  Испортилось чуть.

                                                                                                                                                                                  clear.cmd
                                                                                                                                                                                  :dirs
                                                                                                                                                                                  for /F «usebackq delims==» %%a in (`blacklst.cmd dir`) do rd /s /q "%%a"
                                                                                                                                                                                  :files
                                                                                                                                                                                  for /F «usebackq delims==» %%a in (`blacklst.cmd file`) do del /f /s /q "%%a"

                                                                                                                                                                                  blacklst.cmd
                                                                                                                                                                                  @if "%1"=="" goto end
                                                                                                                                                                                  @if "%1"==«dir» set param=/ad
                                                                                                                                                                                  for /F «eol=; tokens=1*» %%a in ('type blacklst.txt ^| find «path „') do ^
                                                                                                                                                                                  for /F “eol=; tokens=1*» %%d in ('type blacklst.txt ^| find "%1 "') do ^
                                                                                                                                                                                  call dir /b /s %param% "%%b"\"%%e"
                                                                                                                                                                                  :end

                                                                                                                                                                                  blacklst.txt
                                                                                                                                                                                  dir VShell*
                                                                                                                                                                                  dir LizardTech*
                                                                                                                                                                                  dir WinRAR*

                                                                                                                                                                                  path %USERPROFILE%
                                                                                                                                                                                  path %ALLUSERSPROFILE%
                                                                                                                                                                                  path %windir%\system32\config\systemprofile

                                                                                                                                                                                  file secure*.lnk
                                                                                                                                                                                  file adobe*.lnk
                                                                                                                                                                                  file Windows Update.lnk
                                                                                                                                                                                    0
                                                                                                                                                                                    Ну а что, все просто и понятно.
                                                                                                                                                                                    Писал я и такие логон скрипты, только еще и работу служб обрабатывал ))
                                                                                                                                                                                      0
                                                                                                                                                                                      Тут самое веселое было сделать вложенный цикл *)
                                                                                                                                                                                      0
                                                                                                                                                                                      тлько мне непонятно зачем стоят ссылки :dirs и :files

                                                                                                                                                                                      и зачем вот этот кусок:

                                                                                                                                                                                      blacklst.txt
                                                                                                                                                                                      dir VShell*
                                                                                                                                                                                      dir LizardTech*
                                                                                                                                                                                      dir WinRAR*
                                                                                                                                                                                        0
                                                                                                                                                                                        Из файла blacklst.txt берутся пути, где зачищать и список файлов и каталогов на удаление. Ну, удаляются как файлы так и каталоги с содержимым.

                                                                                                                                                                                        Зачистка качественная, тестировать только опасно *)

                                                                                                                                                                                    0
                                                                                                                                                                                    А как выключить компьютер через консоль по таймеру в Висте. В XP я использовал shutdown /s /t время_в_секундах. Но в Висте не могу разобраться. И можно ли вместо выключения переводить компьютер в спящий режим или делать гибернацию?
                                                                                                                                                                                      0
                                                                                                                                                                                      Выключение — ровно так же! shutdown /s /f /t 455
                                                                                                                                                                                      Режим хибернации — shutdown /h /f /t 455
                                                                                                                                                                                        0
                                                                                                                                                                                        без параметра /t все работает, а с ним просто выводится справка о shutdown
                                                                                                                                                                                          0
                                                                                                                                                                                          Либо у Вас проблемы с виндами, либо с синтаксисом. У меня все прекрасно работает. попробуйте зайти в командную строку и там набрать shutdown /?
                                                                                                                                                                                            0
                                                                                                                                                                                            Спасибо! разобрался. Время максимум 600 секунд оказывается, а я вводил больше (в XP несколько часов). Буду использовать at + shutdown.
                                                                                                                                                                                              0
                                                                                                                                                                                              Учту. Спасибо за информацию ))
                                                                                                                                                                                                0
                                                                                                                                                                                                timeout.exe /t 6789 & shutdown.exe -s -t 0
                                                                                                                                                                                        0
                                                                                                                                                                                        Хы. Из забавностей.
                                                                                                                                                                                        Сколько лет прошло с создания этого скриптового языка, а паузы в bat/cmd файлах так и делаются только пингом на локалхост. Ноу эни эназа вэй, к сожалению :)
                                                                                                                                                                                          0
                                                                                                                                                                                          Могу сходу предложить три варианта. Надо?
                                                                                                                                                                                            0
                                                                                                                                                                                            Мой самый любимый, в том смысле что «чистый» способ, без использования сторонних утилит
                                                                                                                                                                                            @echo off
                                                                                                                                                                                            :: Пример использования
                                                                                                                                                                                            :: Некоторые действия
                                                                                                                                                                                            echo Сейчас %time:~0,-3%
                                                                                                                                                                                            :: пауза на 15 секунд
                                                                                                                                                                                            call :sleep 15
                                                                                                                                                                                            :: Другие действия
                                                                                                                                                                                            echo Сейчас %time:~0,-3%
                                                                                                                                                                                            goto :EOF

                                                                                                                                                                                            :sleep
                                                                                                                                                                                            echo Пауза на %1 секунд...
                                                                                                                                                                                            set /a ftime=%time:~6,-3%+%1
                                                                                                                                                                                            if %ftime% GEQ 60 set /a ftime-=60
                                                                                                                                                                                            :loop
                                                                                                                                                                                            set ctime=%time:~6,-3%
                                                                                                                                                                                            if /i %ftime% NEQ %ctime% goto :loop
                                                                                                                                                                                            goto :EOF
                                                                                                                                                                                              0
                                                                                                                                                                                              Круто. Вы повергли в прах моё представление, что чуть-чуть умею писать батники :)
                                                                                                                                                                                                0
                                                                                                                                                                                                Проблема этого батника в том, что он не работает на больше чем 60 секунд. чоответственно, чтобы использоват его на большее количество времени приходится создавать переменные итд…
                                                                                                                                                                                                  0
                                                                                                                                                                                                  К проблемам ещё и то, что он процессор «кушает» циклом. Так что резонно задуматься всё же в сторону сторонних choice & sleep, с помощью которых delay делается на ура.
                                                                                                                                                                                                    0
                                                                                                                                                                                                    Ну все современные процессоры обладают механизмом обнаружения циклов, это +
                                                                                                                                                                                                    А у чойса или слипа тот недостаток, что рядом с батником нужно держать «лишний» файл…
                                                                                                                                                                                                0
                                                                                                                                                                                                Померьте, насколько он жрет процессор и сравните с затратами сразу 100 пингов:
                                                                                                                                                                                                set process_count=100
                                                                                                                                                                                                set comm=start ping -n 20 127.0.0.1
                                                                                                                                                                                                for /L %%I IN (1,1,%process_count%) DO %comm%

                                                                                                                                                                                                … и скорее всего ваши пристрастия изменятся. :)
                                                                                                                                                                                                  0
                                                                                                                                                                                                  Проблема в том, что мы на самом деле не знаем точно, сколько времени идет пинг ))
                                                                                                                                                                                                    0
                                                                                                                                                                                                    Если это проблема (т.е. важен точный тайминг), наверное логично решать ее, используя соответствующие способы/утилиты, но не добавлять другую. ))

                                                                                                                                                                                                    Как выше уже заметили, на платформе
                                                                                                                                                                                                    Для программирования есть WSH, VBS, Jscript ...
                                                                                                                                                                                                    Это не сторонние файлы и там есть Sleep(милисекунды).

                                                                                                                                                                                                    Пакетные файлы знать в целом конечно хорошо, но после знакомства с WSH становится жалко времени, потраченного на изучение тонкостей cmd и отладку батников с условиями и циклами. :(
                                                                                                                                                                                                      0
                                                                                                                                                                                                      Да, согласен, есть утилита слип. Но веди можно и по секундам ориентироваться ))
                                                                                                                                                                                                      Вот меня на WSH не хватило, нормального редактора для него нету, сам он устроен неинтуитивно…
                                                                                                                                                                                                        0
                                                                                                                                                                                                        нормального редактора для него нету

                                                                                                                                                                                                        пожалуй, но все-таки кое-что можно найти
                                                                                                                                                                                                        сам он устроен неинтуитивно

                                                                                                                                                                                                        Может просто мануалов нормальных не попадалось? ресурсы и форум, ссылки, оригинальная документация (en).
                                                                                                                                                                                                        Ну а на мой взгляд мало что сравнится в неинтуитивности с представлением условий-циклов-расширений языка пакетных файлов. :)
                                                                                                                                                                                                          0
                                                                                                                                                                                                          Ну, насчет того, что что-то есть, до уровня NetBeans не доходит ))
                                                                                                                                                                                                          С чем действительно согласен — так это с неинтуитивностью языка пакетных файлов ))
                                                                                                                                                                                                          Просто он иногда был нужен даже еще до того, как я узнал, что такое программирование ))
                                                                                                                                                                                                0
                                                                                                                                                                                                >timeout.exe /?

                                                                                                                                                                                                TIMEOUT [/T] timeout [/NOBREAK]

                                                                                                                                                                                                Description:
                                                                                                                                                                                                This utility accepts a timeout parameter to wait for the specified
                                                                                                                                                                                                time period (in seconds) or until any key is pressed. It also
                                                                                                                                                                                                accepts a parameter to ignore the key press.

                                                                                                                                                                                              Only users with full accounts can post comments. Log in, please.