Wsadowy odpowiednik Bash backticks

Podczas pracy z Bashem, mogę umieścić wyjście jednego polecenia w innym poleceniu w następujący sposób:

my_command `echo Test`

Byłoby tym samym co

my_command Test

(Oczywiście, jest to tylko niepraktyczny przykład.)

Zastanawiam się, czy możesz zrobić to samo w partii.
Author: Pascal Cuoq, 2010-05-05

5 answers

Możesz to zrobić, przekierowując najpierw wyjście do pliku. Na przykład:

echo zz > bla.txt
set /p VV=<bla.txt
echo %VV%
 50
Author: zvrba,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-05-04 21:32:55

Możesz uzyskać podobną funkcjonalność używając cmd.Skrypty exe z poleceniem for /f:

for /f "usebackq tokens=*" %%a in (`echo Test`) do my_command %%a

Tak, to trochę nieoczywiste (co najmniej), ale to, co tam jest.

Zobacz for /? aby uzyskać szczegółowe informacje.

Uwaga boczna: myślałem, że użycie" echo "wewnątrz backsticków w poleceniu" for /f "będzie wymagało użycia" cmd.exe /c echo Test", ponieważ echo jest wewnętrznym poleceniem cmd.exe, ale działa w bardziej naturalny sposób. Skrypty wsadowe Windows zawsze mnie jakoś zaskakują (ale nie zazwyczaj w dobry sposób).

 88
Author: Michael Burr,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-05-04 20:15:23

Przeczytaj dokumentację dla polecenia "for": for /?

Niestety nie jestem zalogowany do Windowsa, żeby sam to sprawdzić, ale myślę, że coś takiego może być podobne do tego co chcesz:

for /F %i in ('echo Test') do my_command %i
 26
Author: Weeble,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-05-04 20:15:34

Zawsze możesz uruchomić Bash w systemie Windows. Robię to cały czas z MSYS (znacznie bardziej wydajny niż Cygwin ).

 3
Author: davr,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-06-19 19:28:25

Być może psuję składnię standardowej metody for /f, ale kiedy umieszczam bardzo złożone polecenie z & & i / wewnątrz backsticków w granicach for /f, powoduje to problemy. Niewielka modyfikacja od zwykłej jest możliwa do obsługi dowolnego polecenia złożoności:

SET VV=some_command -many -arguments && another_command -requiring -the-other -command | handling_of_output | more_handling
for /f "usebackq tokens=*" %%a in (`%VV%`) do mycommand %%a

Umieszczając najpierw pełne i złożone polecenie w zmiennej, a następnie umieszczając odniesienie do zmiennej w limicie, a nie umieszczając złożonego polecenia bezpośrednio w limicie for pętli, można uniknąć problemów z interpretacją składni. Obecnie, jeśli skopiuję dokładne polecenie, które ustawiłem na zmienną VV w powyższym przykładzie do miejsca, w którym jest używana, %VV%, spowoduje to Błędy składniowe.

 3
Author: mtalexan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-08-21 12:12:27