Jak używać polecenia powershell w potoku cmd?

2

Chcę użyć 'replace' w niektórych długich potokach cmd.exe; jak mogę przekierować z cmd na wejście powershell? Poniższa linia nie działa, daje puste wyjście:

c:\>(echo foo && echo bar) | powershell -Command "%{$_ -replace \"f\",\"x\"}"
akavel
źródło

Odpowiedzi:

2

Oparte na kilka dalszych wyników wyszukiwania Google , dodając $input | wydaje się, że polecenie powershell działa, tj .:

C:\>(echo foo && echo bar) | powershell -Command "$input | %{$_ -replace \"f\",\"x\"}"
xoo
bar

(uwaga: w pliku .bat % powyżej należy zastąpić %%, widocznie)

akavel
źródło
1) W CMD powinieneś użyć & amp; do ciągnięcia wykonywania wielu instrukcji lub do używania zwrotów karetki, jeśli instrukcje są zawinięte w nawias. & amp; i spowoduje, że CMD wykona niepotrzebną (w tym przykładzie) ocenę pierwszej instrukcji i wykona następującą instrukcję, jeśli pierwsza zakończy się pomyślnie.
Ben Personick
2.a) W CMD chcemy wykorzystywać pętle tam, gdzie to możliwe, ponieważ język skryptowy nie jest zorientowany obiektowo, jednak w PS lepiej jest działać bezpośrednio na obiekcie, gdzie tylko jest to możliwe, ponieważ językiem jest OO.
Ben Personick
2.b) W twoim przykładzie pętla nie zapewnia żadnej funkcji i powinna zostać usunięta.
Ben Personick
1
3) Wynikowy kod może być po prostu: (echo foo & echo barf) | powershell -Command "$input -replace \"f\",\"x\""
Ben Personick