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