MiniKPLayer 0 Napisano 16 Grudnia 2016 Udostępnij Napisano 16 Grudnia 2016 (edytowane) 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 16 Grudnia 2016 przez MiniKPLayer Cytuj Link to post Share on other sites
lockman 11 Napisano 17 Grudnia 2016 Udostępnij Napisano 17 Grudnia 2016 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). Cytuj Link to post Share on other sites
MiniKPLayer 0 Napisano 18 Grudnia 2016 Autor Udostępnij Napisano 18 Grudnia 2016 (edytowane) 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 18 Grudnia 2016 przez MiniKPLayer Cytuj Link to post Share on other sites
lockman 11 Napisano 18 Grudnia 2016 Udostępnij Napisano 18 Grudnia 2016 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ć? Cytuj Link to post Share on other sites
MiniKPLayer 0 Napisano 19 Grudnia 2016 Autor Udostępnij Napisano 19 Grudnia 2016 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: Cytuj Link to post Share on other sites
Rozwiązanie lockman 11 Napisano 19 Grudnia 2016 Rozwiązanie Udostępnij Napisano 19 Grudnia 2016 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 Cytuj Link to post Share on other sites
MiniKPLayer 0 Napisano 20 Grudnia 2016 Autor Udostępnij Napisano 20 Grudnia 2016 (edytowane) 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 20 Grudnia 2016 przez MiniKPLayer Cytuj Link to post Share on other sites
lockman 11 Napisano 20 Grudnia 2016 Udostępnij Napisano 20 Grudnia 2016 No to komenda Get-Content np. $text = Get-Content -Path c:\tmp\plik.txt 1 Cytuj Link to post Share on other sites
MiniKPLayer 0 Napisano 20 Grudnia 2016 Autor Udostępnij Napisano 20 Grudnia 2016 Może jak skończę to podeślę ci efekt mojej pracy. Serdecznie dziękuję za pomoc! Cytuj Link to post Share on other sites
lockman 11 Napisano 20 Grudnia 2016 Udostępnij Napisano 20 Grudnia 2016 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. Cytuj Link to post Share on other sites
MiniKPLayer 0 Napisano 21 Grudnia 2016 Autor Udostępnij Napisano 21 Grudnia 2016 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. Cytuj Link to post Share on other sites
lockman 11 Napisano 22 Grudnia 2016 Udostępnij Napisano 22 Grudnia 2016 (edytowane) tak na szybko może być coś takiego? $zm="word123" $zmE = [System.Globalization.StringInfo]::GetTextElementEnumerator($zm) foreach($i in $zmE) { Write-Host -NoNewline "$i " } Edytowane 22 Grudnia 2016 przez lockman 1 Cytuj Link to post Share on other sites
MiniKPLayer 0 Napisano 22 Grudnia 2016 Autor Udostępnij Napisano 22 Grudnia 2016 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? Cytuj Link to post Share on other sites
lockman 11 Napisano 22 Grudnia 2016 Udostępnij Napisano 22 Grudnia 2016 (edytowane) $filename = "C:\tmp\wynik.txt" $zm="word123" $zmE = [System.Globalization.StringInfo]::GetTextElementEnumerator($zm) foreach($i in $zmE) { "$i " | Add-Content $filename -NoNewline } Edytowane 22 Grudnia 2016 przez lockman Cytuj Link to post Share on other sites
MiniKPLayer 0 Napisano 15 Września 2017 Autor Udostępnij Napisano 15 Września 2017 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.mediafire.com/file/20x5g7ed57ucs39/Szyfrowanie%20V4.bat.zip Cytuj Link to post Share on other sites
Recommended Posts
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ą.