কোনও ব্যাচের ফাইলের স্টেটমেন্টের আউটপুট কোনও ভেরিয়েবলে সেট করা সম্ভব, উদাহরণস্বরূপ:
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
|
যে ক্ষেত্রে এটি কাজ করে না except
command
দয়া করে কোনওভাবেই প্রস্থান কোড ক্যাপচার করা সম্ভব ? আমি নিশ্চিত যে এটি একটি শূন্য-কোড ফিরিয়েছে তবে %ERRORLEVEL%
সর্বদা 0 থাকে, যেখানেই আমি এটি ব্যবহার করার চেষ্টা করি না কেন (এমনকি do
ব্লকের ভিতরেও)। সুতরাং আমি অনুমান করি যে for
নির্মাণের কিছু অংশ এটি ওভাররাইট করছে। বিটিডাব্লু এতটা প্রাথমিকের জন্য পাগল দেখাচ্ছে কোডটি কীভাবে প্রয়োজন তা অবিশ্বাস্য।
আমি এই থ্রেড খুঁজে পেয়েছি যে সেখানে Interweb জিনিস। সারবস্তুটা হচ্ছে:
@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 এ সেট করা হবে AR
আরও তথ্য: 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 সিএমডি পরীক্ষিত।
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=
আপনার পাইপের দিকটি সঠিক হওয়ার জন্য আপনার এটি লেখা উচিত ছিল । PS: এটি যেভাবে কাজ করে না!
এই সাহায্য আশা করি
set a=%username%
echo %a%
set a="hello"
echo %a%