Pull to refresh

Comments 241

Вопрос — стоит ли продолжать?
Было бы очень интересно
конечно стоит
тут конечно могу много кричать, что винда — г… но и т.д., но она есть и ей можно\нужно\приходится пользоваться
откройте для себя PowerShell и продолжайте, было бы интересно почитать
Ну вообще-то говоря я и про cmd могу еще как минимум пару статей написать )
А PowerShell — мне казалось, что это уже серьезное программирование… или я не прав?
power shell серьезен ровно на столько на сколько захотите :) можно использовать как аналог cmd, можно писать сложные скрипты
С радостью почитаю что-нибудь.
Что можете предложить?
UFO just landed and posted this here
powershell — это ебанацтво а не программирования. вы издеваетесь.

wmi вам в зубы и программируйте хоть запрограммируйтесь.
Мой комент к статье habrahabr.ru/blogs/i_am_insane/60084/ подвиг вас написать такую прекрасную статью, а его (и меня) так нещадно заминусовали ((

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

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

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

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

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

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

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

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

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

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

UFO just landed and posted this here
UFO just landed and posted this here
UFO just landed and posted this here
Для любителей еще можно в качестве командного интерпретатора для Windows попробовать Python.
Еще бы терминал получше.
Под python'ом заплюсуемся. Сколь нибудь сложные скриптики уже на порядки удобнее писать на питончике. Универсальнее (чем PowerShell, все-таки кроссплатформенность, не говоря о cmd), привычно, доки хорошие (читать питоновский мануал в .chm на порядок удобнее чем читать вывод command /?).
и что это меняет? ) впрочем это не главная причина, а главное, то что bat-скрипты очень неудобно отлаживать и сообщения об ошибках не такие информативные ну и т.д.
он не совсем под то заточен.

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

ls -rec | sort LastWriteTime

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

import os, glob

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


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

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

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

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

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

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

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

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

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

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

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

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

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

PS в связке с VBS очень мощно.
«Спасибоа внимание» — у Вас здесь опечатка.
Не нужна-ну нужна была. А пару дней назад появилась необходимость с удаленного компьютера регулярно сбрасывать данные ipconfig себе на почту. Почесал в затылке и не нашел ничего лучшего, как батничек написать для консоли.
Так что рано консоль со счетов сбрасывать. Спасибо за статью.
Винда говно, но с ней приходится работать.
Пишите еще — до тех пор пока bash не портируют на винду ваши посты будут актуальны.
UFO just landed and posted this here
уморительно смешная шутка
>Пишите еще — до тех пор пока bash не портируют на винду ваши посты будут актуальны.

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

Работает так.
Запускаете программу bla.exe
start bla.exe
tasklist /fi "imagename eq bla*"
и собственно tasklist /s computername :) +taskkill — творят чудеса.
К сожалению если запущено уже несколько bla.exe мы не сможем отличить один от другого ;)
Отсортировать по PID и выбрать с наибольшим? :)
Хотя это будет гадание, и можно ошибиться.
Ну можно поступить зверски:
taskkill /im bla* /f
bla.exe
...
ставим cygwin & bash и не тратим время на изучение всяких дурацких мастдайных PowerShell'oв
Ну сколько ж таких умников! Уже третий в посте — я не понимаю, почему мне стоит потратить время на баш и цигвин, а не на повершелл? Чем один лучше другого? По-моему, исключительно вопрос вкуса; а в перспективе Повершелл даже интереснее.
UFO just landed and posted this here
Оболочка должна быть простой, как молоток

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

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

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

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

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

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

SET /P variable=[promptString]

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ls *.paсk | %{ unpaсk.exe $_ -$_}
Кстати, по поводу перенаправлений. Почему-то многих удивляет, что cmd понимает конструкции типа 'foo.exe >log 2>&1' или 'bar.exe 2>errlog'. Кстати, для логов батника может оказаться полезным 'echo some text >&2'. Ну, и про пайп, думаю, стоило сказать.
Под DOS работало echo. |format a: > nul
Форматировало дискетки без предупреждения.
Эти статьи на rsnd.ru помогли мне в своё время в универе, когда мы это проходили. Отличный ресурс.
Это не критично, но .bat по определению — «Пакетный файл MS-DOS». Вы же написали статью про администрирование Windows, поэтому считаю, что и файлы нужно называть соответствующим образом — .cmd, что обзывается как «Командный сценарий Windows NT». Исполняются оба типа скриптов одинаково, .cmd только под DOS/Win9x не запустятся.
П.С.: на rsdn.ru тоже неплохо написано, большая статья, рекомендую ознакомиться.
Как я понимаю, разницы по сути нету, зато bat-ники запускаются в win 9x тоже?
Да, Вы правильно понимаете. Но почему-то написали, что пользуетесь cmd.exe, а не command.com. Просто cmd.exe «понимает» bat-файлы написанные для command.com, но родными для cmd.exe всё же есть cmd-файлы.
Я не то, чтобы цепляюсь, это так, для общего развития :)
Удобно .cmd-шки делать для управления группой задач, я себе так делал запуск MySql, Apache, ApacheMonitor и mysqlmonitor.
Гораздо удобнее чем все запускать по очереди.
for /F «eol=; tokens=2,3* delims=,» %i in (myfile.txt) do @echo %i %j %k

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

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

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

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

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

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

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


так много параметро на случай, если у тебя в файле hosts может быть много записей на один айпишник…
UFO just landed and posted this here
Как вы можете заметить, это практически идентично тому, что написано в самой статье )) только парсится файл хостс и добавлен лишний аргумент ))

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

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

Переопределение вывода с помощью | работает в консоли еще со времен dos-а практически так же как в юниксе, разве что нет команды tee.
Называется это pipes, не знаю как оно будет по-русски, наверное потоки.
Круто! этого не знал уже я )))
Но в том случае, если нужно не только вывести, а потом еще с этим как-то работать, то у меня вариант в чем-то лучше. ибо все по переменным раскладывается ))
UFO just landed and posted this here
чуть менее чем полностью вся эта информация содержится в стандартной справке
Вы правы, но чтобы почитать справку, надо знать что искать :)))
я же здесь не все команда рассказал, даже не про все возможности for.
Зато теперь люди зайдут в консоль и наберут for /?
И, вероятно, узнают многое.
> Зато теперь люди зайдут в консоль и наберут for /?
ИМХО с этого как раз и надо начинать, а потом уже читать подробные руководства с примерами
Так это написано :))
Практически в самом начале…
Только не про For, нокакая разница?
в виндовой консоли есть много чего… мно что умеет… стоит ещё цигвин, но его пришлось поставить из-за того что e-texteditor его просил…
под винду есть обёртка для cmd называется Console2 копировать вставлять умеет… растягивать можно… вопщем я пользуюсь и не жалуюсь… мне нравится…
Я рекомендую хотя бы посмотреть в сторону ConEmu. Несколько отзывов на StackOverflow. На мой взгляд (как разработчика) эта обертка намного более гибкая в плане настроек и богаче возможностями. Например для фанатов есть «искаробочный» Quake/Tilde режим, умеет ANSI X3.64, позволяет выделять мышкой как «текстовые» так и прямоугольные блоки, можно задать различные настройки в зависимости от активного консольного приложения, запуск новой консоли из командной строки ранее открытой, и т.д. и т.п.
Ухтыжблин. Мой первый и самый крутой пост. )
Рождается потом такая шизофрения:
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
— Оно работает *)
Испортилось чуть.

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
Ну а что, все просто и понятно.
Писал я и такие логон скрипты, только еще и работу служб обрабатывал ))
Тут самое веселое было сделать вложенный цикл *)
тлько мне непонятно зачем стоят ссылки :dirs и :files

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

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

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

А как выключить компьютер через консоль по таймеру в Висте. В XP я использовал shutdown /s /t время_в_секундах. Но в Висте не могу разобраться. И можно ли вместо выключения переводить компьютер в спящий режим или делать гибернацию?
Выключение — ровно так же! shutdown /s /f /t 455
Режим хибернации — shutdown /h /f /t 455
без параметра /t все работает, а с ним просто выводится справка о shutdown
Либо у Вас проблемы с виндами, либо с синтаксисом. У меня все прекрасно работает. попробуйте зайти в командную строку и там набрать shutdown /?
Спасибо! разобрался. Время максимум 600 секунд оказывается, а я вводил больше (в XP несколько часов). Буду использовать at + shutdown.
Учту. Спасибо за информацию ))
timeout.exe /t 6789 & shutdown.exe -s -t 0
Хы. Из забавностей.
Сколько лет прошло с создания этого скриптового языка, а паузы в bat/cmd файлах так и делаются только пингом на локалхост. Ноу эни эназа вэй, к сожалению :)
Могу сходу предложить три варианта. Надо?
Мой самый любимый, в том смысле что «чистый» способ, без использования сторонних утилит
@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
Круто. Вы повергли в прах моё представление, что чуть-чуть умею писать батники :)
Проблема этого батника в том, что он не работает на больше чем 60 секунд. чоответственно, чтобы использоват его на большее количество времени приходится создавать переменные итд…
К проблемам ещё и то, что он процессор «кушает» циклом. Так что резонно задуматься всё же в сторону сторонних choice & sleep, с помощью которых delay делается на ура.
Ну все современные процессоры обладают механизмом обнаружения циклов, это +
А у чойса или слипа тот недостаток, что рядом с батником нужно держать «лишний» файл…
Померьте, насколько он жрет процессор и сравните с затратами сразу 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%

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

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

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

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

Может просто мануалов нормальных не попадалось? ресурсы и форум, ссылки, оригинальная документация (en).
Ну а на мой взгляд мало что сравнится в неинтуитивности с представлением условий-циклов-расширений языка пакетных файлов. :)
Ну, насчет того, что что-то есть, до уровня NetBeans не доходит ))
С чем действительно согласен — так это с неинтуитивностью языка пакетных файлов ))
Просто он иногда был нужен даже еще до того, как я узнал, что такое программирование ))
>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.
Sign up to leave a comment.

Articles