?

Log in

No account? Create an account
   Journal    Friends    Archive    Profile    Memories
 

Windows радует прогрессом - morfizm


Nov. 16th, 2016 03:04 pm Windows радует прогрессом

Оказывается в Win 7 можно написать прикольный one-liner цикл, и без всякого powershell'а.
Например, вот так:

for /d %i in (*) do (cd %i & git pull & cd ..)

Хочется отметить:
- возможность писать * вместо *.*, т.е. точки матчатся в звёздочку.
- синтаксис для упаковки нескольких команд в one-liner, ( ... & ... & ... )

13 comments - Leave a commentPrevious Entry Share Next Entry

Comments:

From:birdwatcher
Date:November 16th, 2016 11:17 pm (UTC)
(Link)
быстрее поставить cygwin, чем разбираться, что делает /d
From:morfizm
Date:November 16th, 2016 11:57 pm (UTC)
(Link)
cygwin под виндой это костыли. Как минимум потому, что формат пути к файлам совсем другой.

У него флагман юс-кейс - это скопилировать линуксовые приложения и заставить некоторые из них работать.

И вообще, у вас больше нет этого аргумента, потому что /d ходит в цикле по директориям, а без /d будет по файлам. (Попробуйте-ка теперь это забыть! :)))
From:birdwatcher
Date:November 17th, 2016 12:01 am (UTC)
(Link)
Какой еще другой формат?
boris@LENINGRAD $ ls /cygdrive/c/windows/notepad.exe
/cygdrive/c/windows/notepad.exe
From:morfizm
Date:November 17th, 2016 12:06 am (UTC)
(Link)
Ну да, какой-то /cygdrive/c вместо "c:", слеши не в ту сторону и т.п.
From:birdwatcher
Date:November 17th, 2016 12:10 am (UTC)
(Link)
А, для вас как раз это "другой формат". Я бы как раз сказал, что всё идеально транспарентно работает.
From:archaicos
Date:November 17th, 2016 01:30 am (UTC)
(Link)
Win32 API пофиг куда слэши наклонены. Это народ не умеет парсить командные строки!
From:morfizm
Date:November 17th, 2016 02:06 am (UTC)
(Link)
Windows это не только system API, это ещё и экосистема всевозможных application level библиотек - как от Microsoft'а, так и от third parties, COM объектов, приложений и прочего.
From:archaicos
Date:November 17th, 2016 02:37 am (UTC)
(Link)
Зоопарк, да.
From:dennyrolling
Date:November 17th, 2016 04:39 am (UTC)
(Link)
Дима, это ты радуешь прогрессом, а виндовз застрял в прошлом веке!

for так работал, например, в хр (пруфлинк: https://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/for.mspx?mfr=true)

command chaining вообще древний (еще и в вин 2000, а то поди и раньше: https://support.microsoft.com/en-us/kb/279253)

одинокая звездочка я не знаю когда начала матчить, поди в NT (Реймонд пишет что в FCB алгоритме *.* == * тут https://blogs.msdn.microsoft.com/oldnewthing/20071217-00/?p=24143)

в общем, когда дойдешь до usebackq, пиши!
From:_m_e_
Date:November 17th, 2016 08:25 am (UTC)
(Link)
уверен, что в NT 3.51 все работало точно так же :)
From:dennyrolling
Date:November 17th, 2016 01:51 pm (UTC)
(Link)
я тоже так думаю, но поскольку интернета тогда не было, а документация писалась левой задней то ссылок за пять минут найти не удалось.
From:soloviewoff
Date:November 17th, 2016 04:53 am (UTC)
(Link)

В bat языке вообще много интересного.  Давным давно написал вот это - https://rsdn.org/article/winshell/batanyca.xml, сам периодически перечитываю.  Сейчас реже, ибо все Линукс и Мак.

From:_m_e_
Date:November 17th, 2016 08:37 am (UTC)
(Link)
профессионалы наверное используют ~f для надежности, вместо cd ..
что-то вроде
for /d %i in (*) do (cd %~fi & git pull)

тогда действительно фичи появившиеся наверное в этом веке.
твой код и в прошлом бы работал. хотя я бы и его написал
for /d %i in (*) do (pushd %i & git pull & popd)


Edited at 2016-11-17 08:39 am (UTC)