Czy można ustawić wyjście instrukcji wsadowej pliku wsadowego na zmienną, na przykład:
findstr testing > %VARIABLE%
echo %VARIABLE%
windows
batch-file
Dennis
źródło
źródło
Odpowiedzi:
Zawsze używam USEBACKQ, więc jeśli masz ciąg do wstawienia lub długą nazwę pliku, możesz użyć podwójnych cudzysłowów bez spieprzenia polecenia.
Teraz, jeśli twój wynik będzie zawierał wiele wierszy, możesz to zrobić
źródło
ENABLEDELAYEDEXPANSION
|
w którym to przypadku nie działa.^|
zamiast|
, jak opisano tutajcommand
? Jestem pewien, że zwraca niezerowy kod, ale%ERRORLEVEL%
zawsze zawiera 0, bez względu na to, gdzie próbuję go użyć (nawet wewnątrzdo
bloku). Więc chyba część tegofor
konstruktu go nadpisuje. BTW To niewiarygodne, jak szalenie wyglądający kod jest potrzebny do czegoś tak podstawowego.Znalazłem ten wątek na tamtej stronie Interweb. Sprowadza się do:
Możesz także przekierować dane wyjściowe polecenia do pliku tymczasowego, a następnie umieścić zawartość tego pliku tymczasowego w zmiennej, tak jak to ma miejsce. Jednak nie działa z wejściem wieloliniowym.
Podziękowania dla wątku na sprzęcie Toma.
źródło
w jednym wierszu:
wynik polecenia zostanie ustawiony w% g, a następnie w VAR.
Więcej informacji: https://ss64.com/nt/for_cmd.html
źródło
Aby odczytać plik ...
Aby zapisać plik
Uwaga; spacje przed znakiem <> powodują także dodanie spacji na końcu zmiennej
Aby dodać do pliku, podobnie jak program rejestrujący, najpierw utwórz plik z jednym klawiszem Enter o nazwie e.txt
Twój dziennik będzie wyglądał tak
i tak dalej
W każdym razie kilka przydatnych rzeczy
źródło
Wszystkie te odpowiedzi były tak bliskie odpowiedzi, której potrzebowałem. To jest próba rozwinięcia się na nich.
W pliku wsadowym
Jeśli uruchamiasz się z
.bat
pliku i potrzebujesz jednej linii, która pozwala wyeksportować skomplikowane polecenie, np.jq -r ".Credentials.AccessKeyId" c:\temp\mfa-getCreds.json
Do zmiennej o nazwie,AWS_ACCESS_KEY
to chcesz:W wierszu poleceń
Jeśli pojawi się
C:\
monit, potrzebujesz pojedynczej linii, która pozwala na uruchomienie skomplikowanego polecenia, takiego jakjq -r ".Credentials.AccessKeyId" c:\temp\mfa-getCreds.json
zmienna o nazwie,AWS_ACCESS_KEY
to chcesz:Wyjaśnienie
Jedyna różnica między dwiema powyższymi odpowiedziami polega na tym, że w wierszu poleceń używasz jednego% w zmiennej. W pliku wsadowym należy podwoić znaki procentowe (%%).
Ponieważ polecenie zawiera dwukropki, cudzysłowy i nawiasy, należy włączyć
USEBACKQ
wiersz w opcjach, aby można było użyć cudzysłowów w celu określenia polecenia do uruchomienia, a następnie wszelkiego rodzaju zabawnych znaków w nim zawartych.źródło
Jeśli nie chcesz wyprowadzać danych do pliku tymczasowego, a następnie wczytywać do zmiennej, ten kod przechowuje wynik polecenia bezpośrednio w zmiennej:
Jeśli chcesz zawrzeć szukany ciąg w podwójnych cudzysłowach:
Jeśli chcesz zapisać ten kod w pliku wsadowym, dodaj dodatkowy symbol%:
Przydatny przykład zliczania liczby plików w katalogu i przechowywania w zmiennej: (ilustruje potokowanie)
Zauważ użycie pojedynczych cudzysłowów zamiast cudzysłowach "lub akcentem` w nawiasach poleceń. To jest czystsze alternatywa
delims
,tokens
lubusebackq
wfor
pętli.Testowany na Win 10 CMD.
źródło
źródło
appcmd
nie jest standardowym programem i nie widzę, gdzie przypisujesz wyjście programu do zmiennej. W końcu potrzebujesz więcej wyjaśnieńPrzetestowałem to w ten sposób i zadziałało:
Przesyłając polecenie do zmiennej, monit wstawi wynik polecenia „
Cmd
” do zmiennej „Var
”.Aktualizacja:
To nie działa, mój zły, skrypt, który napisałem był następujący:
Właściwie pokazywał, powiedzmy „
test.txt
”, ale w rzeczywistości pokazywał wynikdir /b *.txt
polecenia „ ”, a nieecho %var%
. Byłem zdezorientowany, ponieważ oba wyjścia były takie same.źródło
pipe the command into a variable prompt
to zrobić, powinieneś to napisać,dir /b *.txt | SET /P Var=
aby uzyskać prawidłowy kierunek rury. PS: To też nie działa w ten sposób!Mam nadzieję, że to pomoże
źródło