utak3r's virtual shelter

?>

Miesiąc: kwiecień 2013

Wojny wsadowe

…czyli próba napisania skryptu w Windowsowym batchu…

Confused

Sprawa nie jest prosta, jak wszyscy wiedzą, ale… możliwa, o czym już nie wszyscy wiedzą. O wyszukiwaniu stringów już kiedyś pisałem, dzisiaj porcja malutkich hintów, przydatnych w każdym chyba dużym skrypcie.

Wczytanie zawartości pliku do zmiennej.

Mam sobie plik o nazwie build_branch, a w nim zapisaną nazwę brancha, który będę budował. Chcę tę nazwę wpisać do zmiennej:

set /p BUILD_BRANCH= < build_branch

i… już Smile można używać zmiennej %BUILD_BRANCH%.

Zmiana znaków w stringu.

Okazuje się to również banalnie proste! Np. usunięcie cudzysłowiów:

set STRING2=%STRING:"=%

albo zamiana spacji na zera (np. w godzinie):

set TIMESTAMP=%TIMESTAMP_TEMP: =0%

prawda, że proste?

 

Plik z timestampem w nazwie.

Tu z pomocą przyjdzie nam wybieranie subłańcuchów ze zmiennych systemowych %DATE% i %TIME%:

set TIMESTAMP_TEMP=%date:~0,4%%date:~5,2%%date:~8,2%-%time:~0,2%%time:~3,2%
set TIMESTAMP=%TIMESTAMP_TEMP: =0%

Druga linia potrzebna jest, bo możemy otrzymać spacje w godzinach 1-9.

 

Odwołanie się do ścieżki, skąd był wywołany skrypt.

W skryptach często zmieniamy katalog bieżący, stąd, aby wywołać jakiś inny skrypt, bądź użyć pliku, musimy zrobić to tak:

set BUILD_LOG=%~dp0\build_MVP_log-%TIMESTAMP%.txt

Sformułowanie %~dp0 wskazuje na katalog, w którym znajduje się oryginalnie wołany skrypt.

 

Odczyt wartości z bardziej złożonego pliku.

Mam na dysku plik build_ID.hpp o treści:

#define DG_BUILD_NUMBER /*CFGMGMT_BUILD_NUMBER*/ 1300
#define DG_BUILD_STAMP /*CFGMGMT_BUILD_STAMP*/ "Tvrc315_2013_0403_084553"

Potrzebuję wyciągnąć wartości 1300Tvrc315_2013_0403_084553 do zmiennych.

findstr DG_BUILD_NUMBER %sandbox%\buildID\build_ID.hpp > DG_BUILD_NUMBER.tmp
set /p STRING= < DG_BUILD_NUMBER.tmp
del DG_BUILD_NUMBER.tmp
findstr DG_BUILD_STAMP %sandbox%\buildID\build_ID.hpp > DG_BUILD_STAMP.tmp
set /p STRING= < DG_BUILD_STAMP.tmp
del DG_BUILD_STAMP.tmp

To daje nam pojedyncze pożądane linie (załóżmy, że w pliku były jeszcze inne treści). Pozostaje nam odczytać same wartości. Tu skorzystamy z faktu, że to, co nas interesuje, jest zawsze na końcu linii:

for %%I in (%STRING%) do set BUILD_NUMER=%%I
for %%J in (%STRING2%) do set BUILD_TAG=%%J

i już mamy zmienne %BUILD_NUMER% i %BUILD_TAG%, wczytane z pliku Smile

 

Reasumując: nie jest to oczywiście Bash, ale da się coś tam w tym zrobić… jest to co prawda upierdliwe – ale się da.

Big Boss

Przenosiny – po raz nty…

Po raz kolejny zmiana serwera… zobaczymy, na jak długo tym razem.

Stara treść powoli się przenosi, jeżeli czegoś szukacie, sprawdzajcie od czasu do czasu.

Oparte na WordPress & Theme by Anders Norén

Aby kontynuować przeglądanie tej witryny, wyraź zgodę na przechowywanie plików cookie. więcej informacji

Ta witryna używa plików cookie dla największej wygody użytkowania. Kliknij "Zaakceptuj", aby wyrazić zgodę na przechowywanie plików cookie.

Zamknij