Muszę przypisać wyjście programu do zmiennej przy użyciu pliku wsadowego MS.
Więc w powłoce GNU Bash użyłbym VAR=$(application arg0 arg1)
. Potrzebuję podobnego zachowania w systemie Windows przy użyciu pliku wsadowego.
Coś jak set VAR=application arg0 arg1
.
batch-file
cmd
variable-assignment
windows-console
initialZero
źródło
źródło
for /f "tokens=3" %%i in ('route print ^| findstr "\<0.0.0.0\>"') do set "myVar=%%i"
Jako uzupełnienie do poprzedniej odpowiedzi , potoki mogą być używane wewnątrz instrukcji for, poprzedzone znakiem karetki:
źródło
for /f "tokens=*" %i in ('tasklist ^| findstr explorer') do @echo %i
Ogólnie jednakusebackq
należy jej używać do obsługi złożonych poleceń.for /f "tokens=*" %%i in ('"tasklist | grep explorer"') do set VAR=%%i
. Łatwiej dla mnie, jeśli w samym poleceniu nie ma cudzysłowów.@OP, możesz użyć pętli do przechwycenia statusu zwracanego przez twój program, jeśli wyświetla on coś innego niż liczby
źródło
zakładając, że dane wyjściowe aplikacji są numerycznym kodem powrotu, możesz wykonać następujące czynności
źródło
Podczas wykonywania:
for /f %%i in ('application arg0 arg1') do set VAR=%%i
otrzymywałem błąd: %% byłem w tej chwili nieoczekiwany. Jako poprawkę musiałem wykonać powyżej jakofor /f %i in ('application arg0 arg1') do set VAR=%i
źródło
%%
i poza plikiem wsadowym w wierszu polecenia, którego potrzebujesz%
Oprócz odpowiedzi nie można bezpośrednio używać operatorów przekierowywania danych wyjściowych w ustalonej części
for
pętli (np. Jeśli chcesz ukryć dane wyjściowe stderror przed użytkownikiem i podać ładniejszy komunikat o błędzie). Zamiast tego musisz uciec przed nimi za pomocą znaku karetki (^
):Odwołanie: Przekieruj wyjście polecenia w pętli skryptu wsadowego
źródło
źródło
Możesz użyć makra wsadowego do prostego przechwytywania danych wyjściowych poleceń, trochę jak zachowanie powłoki bash.
Użycie makra jest proste i wygląda jak
I działa nawet z rurami
Makro używa zmiennej jak tablicy i przechowuje każdą linię w osobnym indeksie.
W próbce
%$set% allDrives="wmic logicaldisk
zostaną utworzone następujące zmienne:Aby go użyć, nie jest ważne, aby zrozumieć, jak działa samo makro.
Pełny przykład
źródło
Napisałem skrypt, który pinguje google.com co 5 sekund i rejestruje wyniki na bieżąco. Tutaj możesz znaleźć dane wyjściowe do zmiennych „commandLineStr” (z indeksami)
źródło