Skocz do zawartości

Jak przenieść zmienną z Powershell do cmd?


Idź do rozwiązania Problem ogarnięty przez lockman,

Recommended Posts

Witam,

Mam problem z moim skryptem. Otóż, wymyśliłem skrypt, który musi w locie przechodzić z Powershella do CMD i na odwrót. Niestety przenosić musi się też jedna zmienna. Ustaliłem więc, że dobrze byłoby dodać jakiś plik tymczasowy, w którym znajdowałoby się np. set zmienna=10. Tak więc w Powershell wrzuciłem polecenie Write-Output "set zmienna=10" > G:\test\pk.bat. Niestety z niewiadomych mi przyczyn po uruchomieniu poleceniem call g:\test\pk.bat w cmd wyświetla się tylko błąd: Nazwa '■s' nie jest rozpoznawana jako polecenie wewnętrzne lub zewnętrzne, program wykonywalny lub plik wsadowy. Zawartość pliku to: set zmienna=10 , a mimo to program interpretuje to jako ■s. Czy mógłby mi ktoś wytłumaczyć dlaczego tak się dzieje, albo co możnaby z tym zrobić?

Z góry dziękuję za pomoc.

 

EDIT.

Na prawdę nie wiem co mam robić, a jest to bardzo ambitny skrypt szyfrujący.

Edytowane przez MiniKPLayer
Link to post
Share on other sites

tak na szybko, może spróbuj wywołać bat tak:

& 'G:\test\pk.bat'

Swoją drogą, coś mi się wydaje przekombinowane. Jak to nie zadziała, fajnie jak bys szerzej opisał skąd tą wartość zmiennej bierzesz i jakiemu skryptowi przekazujesz. Szczerze mówiąc, jeśli zapisujesz do pliku, to czy jest sens ustawiać to jako zmienną środowiskową? (równie dobrze możesz czytać samą wartość z pliku). No ale nie wiem dokładnie o co chodzi ,  więc trudno mi ocenić (chociaż coś podejrzewam, biorąc pod uwagę poprzedni wątek).

Link to post
Share on other sites

Ujmę to w ten sposób:

Gdy powstaje ta zmiena, co mi ją opisałeś w poprzednim temacie. Czyli np. $zmienna=24

Wtedy chciałem zapisać Write-Output set zmienna=$zmienna > g:\test\pk.bat. W CMD odczytałbym to jako: call g:\test\pk.bat, a potem np. echo %zmienna%. Powinno dać wartość 24

Edytowane przez MiniKPLayer
Link to post
Share on other sites

Zrobiłem u siebie na koputezrze szybko taki test, próbując zaimitować to co napisałeś.

1 W konsoli wywołałem komendę:

c:\> echo set zmienna=2 > c:\tmp\test.bat

Stworzył mi się plik c:\tmp\test.bat z zawartością set zmienna=2, czyli wsio zadziałało.

2. Wywołałem, komendę

c:\>call c:\tmp\test.bat

3. Wykonałem komendę

c:\>%zmienna%

Dostałem wynik:

2

Czyli wszystko powinno w teorii zadziałać. Jednak, podejrzewam, iż w pliku g:\test\pk.bat, zapisujesz taką linijkę 

set zmienna=$zmienna 

 zamiast np.

set zmienna=24

Możesz to zweryfikować?

Link to post
Share on other sites
  • Rozwiązanie

Przepraszam, że nie zajarzyłem od razu, chodzi tylko o kodowanie. Po prostu PowerShell zapisuje w utf8, a cmd domyślnie ma kodowanie 852 (chcp komenda do sprawdzenia).

Po prostu zapisz plik w PS w inny sposób:

zamiast

Write-Output "set zmienna=$zmienna" > G:\test\pk.bat

zrób tak:

sc g:\test\pk.bat  "set zmienna=$zmienna" -en ASCII
  • Popieram 1
Link to post
Share on other sites

Wszystko jest fajnie, ale czy jesteś w stanie mi napsiać jak zrobić to w drugą stronę? Tzn. zmienną z CMD przenieść do Powershell? Chodzi mi o samo odczytanie pliku w PS i co się w nim powinno znajdować.

Edytowane przez MiniKPLayer
Link to post
Share on other sites

Mam jeszcze jeden problem, a mianowicie potrzebuje jakiegoś skryptu, co by rozdzielał litery/cyfry w wyrazie. Tzn. np. w wyraze monitor wynikiem byłoby m o n i t o r. Czy potrafiłbyś powiedzieć jak miałbym coś takiego napisać? Byłbym bardzo wdzięczny.

Link to post
Share on other sites

Niestety mam problem z przeniesieniem wynikowej tej wartości do pliku aby przenieść je z powrotem do cmd. Nie potrafię tego zrobić, gdyż jeżeli próbuję wpisać po prostu ​Write-Host -NoNewLine "$i " >> .\cache.bat ​ to plik jest pusty i waży jakieś 3 bajty. Umiałbyś mi pomóc?

Link to post
Share on other sites
  • 8 miesięcy temu...

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.

Gość
Odpowiedz w tym wątku...

×   Wklejono zawartość z formatowaniem.   Usuń formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.

  • Ostatnio przeglądający   0 użytkowników

    Brak zarejestrowanych użytkowników przeglądających tę stronę.

×
×
  • Dodaj nową pozycję...