Skocz do zawartości


Uwaga, ta strona używa Cookies
Stosujemy je, aby ułatwić Tobie korzystanie z naszego serwisu. Pamiętaj, że w każdej chwili możesz zmienić ustawienia dotyczące Cookies w ustawieniach swojej przeglądarki internetowej.
Dowiedz się więcej    
Akceptuję
Zdjęcie

Jak przenieść zmienną z Powershell do cmd?

cmd Powershell przenieść problem pomocy jak zmienna variable Variable Powershell

Najlepsza odpowiedź lockman, 19 grudzień 2016 - 19:26

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
Przejdź do postu


  • Zaloguj się, aby dodać odpowiedź
14 odpowiedzi w tym temacie

#1 MiniKPLayer

MiniKPLayer
  • Zapalony gracz

  • 29 postów
  • Miejscowość:Mikołów

Napisano 16 grudzień 2016 - 19:17

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.


Użytkownik MiniKPLayer edytował ten post 16 grudzień 2016 - 19:23

  • 0

I3 4170, GTX 660 Ti 3GB, MSI B85-G43, 2x4GB HyperX, Thermaltake SE530W, LG 24GM77-B 144hz


#2 lockman

lockman
  • Nowicjusz

  • 20 postów

Napisano 17 grudzień 2016 - 22:12

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).


  • 0

#3 MiniKPLayer

MiniKPLayer
  • Autor tematu
  • Zapalony gracz

  • 29 postów
  • Miejscowość:Mikołów

Napisano 18 grudzień 2016 - 21:46

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


Użytkownik MiniKPLayer edytował ten post 18 grudzień 2016 - 21:46

  • 0

I3 4170, GTX 660 Ti 3GB, MSI B85-G43, 2x4GB HyperX, Thermaltake SE530W, LG 24GM77-B 144hz


#4 lockman

lockman
  • Nowicjusz

  • 20 postów

Napisano 18 grudzień 2016 - 23:48

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ć?


  • 0

#5 MiniKPLayer

MiniKPLayer
  • Autor tematu
  • Zapalony gracz

  • 29 postów
  • Miejscowość:Mikołów

Napisano 19 grudzień 2016 - 16:43

W pliku jest set zmienna=10, ale plik zajmuje ok. 2x więcej niż gdybym to normalnie napisał w Notatniku.

Załączam filmik z ukazaniem co dokładnie się dzieje: 


  • 0

I3 4170, GTX 660 Ti 3GB, MSI B85-G43, 2x4GB HyperX, Thermaltake SE530W, LG 24GM77-B 144hz


#6 lockman

lockman
  • Nowicjusz

  • 20 postów

Napisano 19 grudzień 2016 - 19:26   Najlepsza odpowiedź

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

  • 1

#7 MiniKPLayer

MiniKPLayer
  • Autor tematu
  • Zapalony gracz

  • 29 postów
  • Miejscowość:Mikołów

Napisano 20 grudzień 2016 - 16:43

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ć.


Użytkownik MiniKPLayer edytował ten post 20 grudzień 2016 - 16:43

  • 0

I3 4170, GTX 660 Ti 3GB, MSI B85-G43, 2x4GB HyperX, Thermaltake SE530W, LG 24GM77-B 144hz


#8 lockman

lockman
  • Nowicjusz

  • 20 postów

Napisano 20 grudzień 2016 - 17:58

No to komenda Get-Content

np.

$text = Get-Content -Path c:\tmp\plik.txt

  • 1

#9 MiniKPLayer

MiniKPLayer
  • Autor tematu
  • Zapalony gracz

  • 29 postów
  • Miejscowość:Mikołów

Napisano 20 grudzień 2016 - 18:06

Może jak skończę to podeślę ci efekt mojej pracy. Serdecznie dziękuję za pomoc!


  • 0

I3 4170, GTX 660 Ti 3GB, MSI B85-G43, 2x4GB HyperX, Thermaltake SE530W, LG 24GM77-B 144hz


#10 lockman

lockman
  • Nowicjusz

  • 20 postów

Napisano 20 grudzień 2016 - 19:08

Ciesze się, że mogę pomóc. 

Jak chcesz, żebym na to rzucił ok, możesz podsyłać. Najważniejsze jednak, byś Ty był zadowolony ze swojej pracy.


  • 0

#11 MiniKPLayer

MiniKPLayer
  • Autor tematu
  • Zapalony gracz

  • 29 postów
  • Miejscowość:Mikołów

Napisano 21 grudzień 2016 - 23:53

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.


  • 0

I3 4170, GTX 660 Ti 3GB, MSI B85-G43, 2x4GB HyperX, Thermaltake SE530W, LG 24GM77-B 144hz


#12 lockman

lockman
  • Nowicjusz

  • 20 postów

Napisano 22 grudzień 2016 - 01:13

tak na szybko może być coś takiego?

$zm="word123"
$zmE = [System.Globalization.StringInfo]::GetTextElementEnumerator($zm)

foreach($i in $zmE)
{
Write-Host -NoNewline "$i "
}

Użytkownik lockman edytował ten post 22 grudzień 2016 - 01:13

  • 1

#13 MiniKPLayer

MiniKPLayer
  • Autor tematu
  • Zapalony gracz

  • 29 postów
  • Miejscowość:Mikołów

Napisano 22 grudzień 2016 - 17:26

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?


  • 0

I3 4170, GTX 660 Ti 3GB, MSI B85-G43, 2x4GB HyperX, Thermaltake SE530W, LG 24GM77-B 144hz


#14 lockman

lockman
  • Nowicjusz

  • 20 postów

Napisano 22 grudzień 2016 - 17:57

$filename = "C:\tmp\wynik.txt"
$zm="word123"
$zmE = [System.Globalization.StringInfo]::GetTextElementEnumerator($zm)


foreach($i in $zmE)
{
 "$i " | Add-Content $filename -NoNewline
}

Użytkownik lockman edytował ten post 22 grudzień 2016 - 17:57

  • 0

#15 MiniKPLayer

MiniKPLayer
  • Autor tematu
  • Zapalony gracz

  • 29 postów
  • Miejscowość:Mikołów

Napisano 15 wrzesień 2017 - 19:48

Dzięki wielkie za pomoc. Dzisiaj ze względu na chorobę usiadłem i nareszcie ukończyłem ten ,,program". Jeżeli chciałbyś wglądnąć w to jak wygląda kod źródłowy to podaję link do pobrania: https://www.mediafir...anie V4.bat.zip


  • 0

I3 4170, GTX 660 Ti 3GB, MSI B85-G43, 2x4GB HyperX, Thermaltake SE530W, LG 24GM77-B 144hz






Również z jednym lub większą ilością słów kluczowych: cmd, Powershell, przenieść, problem, pomocy, jak, zmienna, variable, Variable Powershell

Użytkownicy przeglądający ten temat: 0

0 użytkowników, 0 gości, 0 anonimowych