Podczas pracy z Bash'em mogę umieścić wynik jednego polecenia w innym poleceniu:
my_command `echo Test`
byłoby to samo co
my_command Test
(Oczywiście jest to tylko niepraktyczny przykład).
Zastanawiam się tylko, czy możesz zrobić to samo w usłudze Batch.
bash
batch-file
backticks
MiffTheFox
źródło
źródło
Odpowiedzi:
Możesz to zrobić, przekierowując najpierw dane wyjściowe do pliku. Na przykład:
źródło
for /f
wariant jest znacznie lepszy.%random%
Możesz uzyskać podobną funkcjonalność za pomocą skryptów cmd.exe za pomocą
for /f
polecenia:Tak, to trochę nieoczywiste (delikatnie mówiąc), ale tak jest.
Zobacz
for /?
krwawe szczegóły.Na marginesie: Pomyślałem, że użycie znaku „
echo
” wewnątrz grawisów wfor /f
poleceniu „ ” będzie musiało być wykonane przy użyciu polecenia „cmd.exe /c echo Test
”, ponieważecho
jest to polecenie wewnętrznecmd.exe
, ale działa w bardziej naturalny sposób. Skrypty wsadowe Windows zawsze jakoś mnie zaskakują (ale zwykle nie w dobry sposób).źródło
system()
znaczy, C było w porządku, iirc, ponieważ uruchamia powłokę w każdym przypadku, ale .NETProcess.Start
musi jawnie wywołać powłokę. Coś w tym stylu, iirc. W każdym razie uważam, że to lepsza odpowiedź niż zaakceptowana :-)for
nie zaszkodzić, ale zmylić problem. A co z tym:for /f %%a in ('"echo Test"') do my_command %%a
tokens=*
jest ważny. W przeciwnym razie, jeśli wynik polecenia zawiera spacje, wyprowadzane jest tylko pierwsze słowo. Uruchomić to w wierszu:for /f %a in ('"echo foo bar"') do echo "%a"
. To się wydrukuje"foo"
.Przeczytaj dokumentację polecenia „for”:
for /?
Niestety nie jestem zalogowany do systemu Windows, aby samemu to sprawdzić, ale myślę, że coś takiego może przybliżyć to, czego chcesz:
źródło
Zawsze możesz uruchomić Bash w systemie Windows. Robię to cały czas z MSYS (dużo wydajniejszy niż Cygwin ).
źródło
Może psuję składnię
for /f
metody standardowej , ale kiedy umieszczam bardzo złożone polecenie obejmujące && i | w obrębie kresek w granicyfor /f
, powoduje to problemy. Możliwa jest niewielka modyfikacja w stosunku do zwykłego, aby obsłużyć dowolne polecenie złożoności:Umieszczając najpierw pełne i złożone polecenie w zmiennej, a następnie umieszczając odwołanie do zmiennej w limicie, zamiast umieszczać złożone polecenie bezpośrednio w granicy pętli for, można uniknąć problemów z interpretacją składni. Obecnie, jeśli skopiuję dokładne polecenie, które ustawiłem dla
VV
zmiennej w powyższym przykładzie, do miejsca, w którym jest używane,%VV%
powoduje to błędy składniowe.źródło