Powłoka poleceń (CMD) - problem ze zmienną

0

Używając funkcji CreateProcess(...) :

LPCTSTR lpApplicationName = _tcsdup(TEXT("C:\\Windows\\system32\\cmd.exe"));
LPTSTR szCmdline = _tcsdup(TEXT("/c set GODZINA=%time:~0,2%  && copy C:\\Temp\\test.txt C:\\Temp\\%GODZINA%.txt")

CreateProcess(lpApplicationName, szCmdline, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi))

do tworzenia nazw plików wg. aktualnej godziny, okazało sie, że zamiast nazwy 17.txt tworzy mi kopie pliku o nazwie %GODZINA%.txt".

Zmienna GODZINA jest dobrze inicjowana. Poza tym gdy urachamiam batcha lub wpisuje bezposrednio w cmd.exe to jest ok.

Zakładam , że brakuje jakiegoś znaku przed %GODZINA% , tylko nie wiem jakiego. Probowałem z ^ przed znakiem specjalnym % , czyli :

LPTSTR szCmdline = _tcsdup(TEXT("/c set GODZINA=%time:~0,2%  && copy C:\\Temp\\test.txt C:\\Temp\\^%GODZINA^%.txt") 

ale nie pomaga.
Czy ktos wie jak poradzic sobie z tym problemem?

0

robisz pliki przez CrerateProcess??
dziwne troche...
mozesz brac czas dzieki winapi (GetSystemTime).
albo jak juz masz czas w %godzina% to rob pliki echem
echo.>%godzina%

0

jest bardzo mozliwe ze CreateProcess w ogole nie przetwarza %zmienna% i nie rozwija ich wg. zawrtosci environmentu.
tak swoja droga, nie idziesz za barzdo na okolo? nie mozesz po prostu z poziomu kodu odebrac daty, dokleic jej do stringa ".txt" i odpalic CreateFile?

0

To jest tylko przykład :-/ . Przechodze ze scryptów na PE i chcialem sobie ułatwic prace...
A swoją drogą zaciekawiło mnie, dlaczego własnie podstawienie wartości (%GODZINA%) nie działa. Nie pomaga znak esc ("%GODZINA%") jak i anulowania (^) z UNIXA.
Niestey nadal nie znam odpowiedzi, dlatego tak jak sugerowaliscie ,pobrałem czas do stringa i "doczepiłem" do nazwy pliku.

0

a mi się wydaje, że to nie createprocess a przełącznik /c nie interpretuje (albo wręcz "escapuje", czy jak to się nazywa) %zmienna%. Wydaje mi się, że da się bezpośrednio wydawać polecenia do shella, tak jakby normalnie w konsoli się było - kiedyś podobne rozwiązanie widziałem w jakimś windowsowym serwerze telnetu. Nie sprawdzę tego teraz, bo windowsa pod ręką nie mam

1 użytkowników online, w tym zalogowanych: 0, gości: 1