क्या उदाहरण के लिए एक बैच फ़ाइल के स्टेटमेंट आउटपुट को सेट करना संभव है:
findstr testing > %VARIABLE%
echo %VARIABLE%
क्या उदाहरण के लिए एक बैच फ़ाइल के स्टेटमेंट आउटपुट को सेट करना संभव है:
findstr testing > %VARIABLE%
echo %VARIABLE%
जवाबों:
FOR /F "tokens=* USEBACKQ" %%F IN (`command`) DO (
SET var=%%F
)
ECHO %var%
मैं हमेशा USEBACKQ का उपयोग करता हूं ताकि यदि आपके पास डालने के लिए एक स्ट्रिंग या एक लंबा फ़ाइल नाम है, तो आप कमांड को खराब किए बिना अपने दोहरे उद्धरण चिह्नों का उपयोग कर सकते हैं।
अब यदि आपके आउटपुट में कई लाइनें होंगी, तो आप ऐसा कर सकते हैं
SETLOCAL ENABLEDELAYEDEXPANSION
SET count=1
FOR /F "tokens=* USEBACKQ" %%F IN (`command`) DO (
SET var!count!=%%F
SET /a count=!count!+1
)
ECHO %var1%
ECHO %var2%
ECHO %var3%
ENDLOCAL
ENABLEDELAYEDEXPANSION
|
किस मामले में उपयोग करने की आवश्यकता है, यह काम नहीं करता है।
command
किसी भी तरह से बाहर निकलें कोड पर कब्जा करने के लिए संभव है , कृपया? मुझे यकीन है कि यह एक गैर-शून्य कोड लौटा %ERRORLEVEL%
रहा है, लेकिन हमेशा 0 होता है, कोई फर्क नहीं पड़ता कि मैं इसका उपयोग करने की कोशिश करता हूं (यहां तक कि do
ब्लॉक के अंदर भी )। इसलिए मुझे लगता है कि उस for
निर्माण का कुछ हिस्सा इसे अधिलेखित कर रहा है। BTW यह अविश्वसनीय है कि कैसे पागल लग कोड कुछ तो प्राथमिक के लिए आवश्यक है।
मुझे यह धागा वहां पर इंटरवेब की चीज में मिला। उबल जाता है:
@echo off
setlocal enableextensions
for /f "tokens=*" %%a in (
'VER'
) do (
set myvar=%%a
)
echo/%%myvar%%=%myvar%
pause
endlocal
आप किसी अस्थायी फ़ाइल में कमांड के आउटपुट को रीडायरेक्ट भी कर सकते हैं, और फिर उस अस्थायी फ़ाइल की सामग्री को अपने चर में पसंद कर सकते हैं। हालांकि यह बहु-इनपुट इनपुट के साथ काम नहीं करता है।
cmd > tmpFile
set /p myvar= < tmpFile
del tmpFile
टॉम के हार्डवेयर पर धागे का श्रेय।
एक पंक्ति में:
FOR /F "tokens=*" %g IN ('*your command*') do (SET VAR=%g)
कमांड आउटपुट को% g में तब VAR में सेट किया जाएगा।
अधिक जानकारी: https://ss64.com/nt/for_cmd.html
फ़ाइल पढ़ने के लिए ...
set /P Variable=<File.txt
एक फ़ाइल लिखने के लिए
@echo %DataToWrite%>File.txt
ध्यान दें; <> वर्ण से पहले रिक्त स्थान होने से चर के अंत में भी एक स्थान जुड़ जाता है
फ़ाइल को जोड़ने के लिए, एक लकड़हारा प्रोग्राम की तरह, पहले इसमें एक फ़ाइल दर्ज करें जिसमें e.txt नामक एक कुंजी दर्ज करें
set /P Data=<log0.log
set /P Ekey=<e.txt
@echo %Data%%Ekey%%NewData%>log0.txt
आपका लॉग इस तरह दिखेगा
Entry1
Entry2
और इसी तरह
वैसे भी कुछ उपयोगी बातें
ये उत्तर उस उत्तर के बिल्कुल पास थे जिसकी मुझे आवश्यकता थी। यह उन पर विस्तार करने का एक प्रयास है।
यदि आप किसी .bat
फ़ाइल के भीतर से चल रहे हैं और आप एक एकल लाइन चाहते हैं जो आपको एक जटिल आदेश को निर्यात करने की अनुमति देता है जैसे jq -r ".Credentials.AccessKeyId" c:\temp\mfa-getCreds.json
कि नामांकित चर AWS_ACCESS_KEY
तो आप यह चाहते हैं:
FOR /F "tokens=* USEBACKQ" %%g IN (`jq -r ".Credentials.AccessKeyId" c:\temp\mfa-getCreds.json`) do (SET "AWS_ACCESS_KEY=%%g")
यदि आप उस C:\
प्रॉम्प्ट पर हैं जो आप एक एकल लाइन चाहते हैं जो आपको एक जटिल कमांड चलाने की अनुमति देता है जैसे jq -r ".Credentials.AccessKeyId" c:\temp\mfa-getCreds.json
कि नामांकित चर AWS_ACCESS_KEY
तो आप यह चाहते हैं:
FOR /F "tokens=* USEBACKQ" %g IN (`jq -r ".Credentials.AccessKeyId" c:\temp\mfa-getCreds.json`) do (SET "AWS_ACCESS_KEY=%g")
ऊपर दिए गए दो उत्तरों के बीच एकमात्र अंतर यह है कि कमांड लाइन पर, आप अपने चर में एक% का उपयोग करते हैं। बैच फ़ाइल में, आपको प्रतिशत चिह्नों (%%) पर दोगुना करना होगा।
चूंकि कमांड में कॉलन, कोट्स और कोष्ठक शामिल हैं, USEBACKQ
इसलिए आपको विकल्पों में लाइन को शामिल करने की आवश्यकता है ताकि आप कमांड को चलाने के लिए बैककॉट्स का उपयोग कर सकें और फिर उसके अंदर सभी प्रकार के मज़ेदार अक्षर।
यदि आप एक अस्थायी फ़ाइल में आउटपुट नहीं करना चाहते हैं और फिर एक चर में पढ़ते हैं, तो यह कोड एक चर में प्रत्यक्ष कमांड का परिणाम संग्रहीत करता है:
FOR /F %i IN ('findstr testing') DO set VARIABLE=%i
echo %VARIABLE%
यदि आप दोहरे उद्धरण चिह्नों में खोज स्ट्रिंग संलग्न करना चाहते हैं:
FOR /F %i IN ('findstr "testing"') DO set VARIABLE=%i
यदि आप इस कोड को बैच फ़ाइल में संग्रहीत करना चाहते हैं, तो एक अतिरिक्त% प्रतीक जोड़ें:
FOR /F %%i IN ('findstr "testing"') DO set VARIABLE=%%i
एक चर में एक निर्देशिका और स्टोर में फ़ाइलों की संख्या की गणना करने के लिए एक उपयोगी उदाहरण: (पाइपिंग दिखाता है)
FOR /F %i IN ('dir /b /a-d "%cd%" ^| find /v /c "?"') DO set /a count=%i
नोट डबल कोट्स "या गंभीर लहजे` आदेश कोष्ठक में के बजाय एकल उद्धरण का उपयोग करते हैं। इस के लिए क्लीनर विकल्प है delims
, tokens
या usebackq
में for
पाश।
विन 10 CMD पर परीक्षण किया गया।
cd %windir%\system32\inetsrv
@echo off
for /F "tokens=* USEBACKQ" %%x in (
`appcmd list apppool /text:name`
) do (
echo|set /p= "%%x - " /text:name & appcmd.exe list apppool "%%x" /text:processModel.identityType
)
echo %date% & echo %time%
pause
appcmd
एक मानक कार्यक्रम नहीं है और मैं यह नहीं देख सकता कि आप प्रोग्राम आउटपुट को एक चर में कैसे असाइन करते हैं। अंत में आपको कुछ और स्पष्टीकरण की आवश्यकता है
मैंने इसे इस तरह से परखा है और इसने काम किया है:
SET /P Var= | Cmd
कमांड को एक चर में पाइप करके, प्रॉम्प्ट कमांड के परिणाम को " Cmd
" वेरिएबल में " Var
" डालेगा ।
अपडेट करें:
यह काम नहीं करता है, मेरी बुरी, मैंने जो स्क्रिप्ट किया वह यह था:
SET /P Var= | dir /b *.txt
echo %Var%
यह वास्तव में दिखा रहा है मान लीजिए " test.txt
" है, लेकिन यह वास्तव में " dir /b *.txt
" कमांड का परिणाम दिखा रहा था , नहीं echo %var%
। मैं भ्रमित हो गया क्योंकि दोनों आउटपुट समान थे।
pipe the command into a variable prompt
तो आपको dir /b *.txt | SET /P Var=
अपनी पाइप दिशा को सही करने के लिए इसे लिखना चाहिए था । पुनश्च: यह उस तरह से भी काम नहीं करता है!
उममीद है कि इससे मदद मिलेगी
set a=%username%
echo %a%
set a="hello"
echo %a%