windows - grand - samsung gt-i9082 price




কিভাবে আমি একটি ব্যাচ ফাইলে কমান্ড লাইন পরামিতি পাস করব? (10)

ফাইলটিতে হার্ডকোডিংয়ের পরিবর্তে চালানোর সময় আমি একটি cmd (বা bat) ফাইলের আইডি এবং পাসওয়ার্ড পাস করতে হবে।

এখানে কমান্ড লাইন কেমন দেখায়:

test.cmd admin [email protected] > test-log.txt

@ জোন দ্বারা অন্য কোথাও একটি উত্তর দ্বারা অনুপ্রাণিত, আমি নামযুক্ত প্যারামিটারগুলি, ঐচ্ছিক মান এবং সুইচগুলি বের করার জন্য আরো সাধারণ অ্যালগরিদম তৈরি করেছি।

আসুন আমরা বলি যে আমরা একটি ইউটিলিটি foobar বাস্তবায়ন করতে চান। এটি একটি প্রাথমিক কমান্ড প্রয়োজন। এটি একটি ঐচ্ছিক প্যারামিটার রয়েছে - --foo যা একটি ঐচ্ছিক মান নেয় (যা অবশ্যই অন্য প্যারামিটার হতে পারে না); মানটি ডিফল্টে default অনুপস্থিত। এটি একটি ঐচ্ছিক প্যারামিটার রয়েছে - --bar যা একটি প্রয়োজনীয় মান নেয়। অবশেষে এটি একটি পতাকা নিতে পারে --baz কোন মান অনুমোদিত সঙ্গে। ওহ, এবং এই পরামিতি কোনো ক্রম আসতে পারে।

অন্য কথায়, এটি এই রকম দেখায়:

foobar <command> [--foo [<fooval>]] [--bar <barval>] [--baz]

এখানে একটি সমাধান:

@ECHO OFF
SETLOCAL
REM FooBar parameter demo
REM By Garret Wilson

SET CMD=%~1

IF "%CMD%" == "" (
  GOTO usage
)
SET FOO=
SET DEFAULT_FOO=default
SET BAR=
SET BAZ=

SHIFT
:args
SET PARAM=%~1
SET ARG=%~2
IF "%PARAM%" == "--foo" (
  SHIFT
  IF NOT "%ARG%" == "" (
    IF NOT "%ARG:~0,2%" == "--" (
      SET FOO=%ARG%
      SHIFT
    ) ELSE (
      SET FOO=%DEFAULT_FOO%
    )
  ) ELSE (
    SET FOO=%DEFAULT_FOO%
  )
) ELSE IF "%PARAM%" == "--bar" (
  SHIFT
  IF NOT "%ARG%" == "" (
    SET BAR=%ARG%
    SHIFT
  ) ELSE (
    ECHO Missing bar value. 1>&2
    ECHO:
    GOTO usage
  )
) ELSE IF "%PARAM%" == "--baz" (
  SHIFT
  SET BAZ=true
) ELSE IF "%PARAM%" == "" (
  GOTO endargs
) ELSE (
  ECHO Unrecognized option %1. 1>&2
  ECHO:
  GOTO usage
)
GOTO args
:endargs

ECHO Command: %CMD%
IF NOT "%FOO%" == "" (
  ECHO Foo: %FOO%
)
IF NOT "%BAR%" == "" (
  ECHO Bar: %BAR%
)
IF "%BAZ%" == "true" (
  ECHO Baz
)

REM TODO do something with FOO, BAR, and/or BAZ
GOTO :eof

:usage
ECHO FooBar
ECHO Usage: foobar ^<command^> [--foo [^<fooval^>]] [--bar ^<barval^>] [--baz]
EXIT /B 1
  • SETLOCAL ব্যবহার করুন যাতে ভেরিয়েবল কলিং পরিবেশে পালাতে না পারে।
  • কলিং পরিবেশে SET FOO= সংজ্ঞায়িত করলে পরিবর্তনগুলি SET FOO= , ইত্যাদি শুরু করতে ভুলবেন না।
  • উদ্ধৃতি অপসারণ করতে %~1 ব্যবহার করুন।
  • IF "%ARG%" == "" ব্যবহার করুন এবং না IF [%ARG%] == [] কারন [ এবং ] খেলবেন না এমন স্থানগুলিতে শেষ হওয়া মানগুলির সাথেই চলবে।
  • এমনকি যদি আপনি একটি IF ব্লকের ভিতরে IF , তবে বর্তমান যুক্তিগুলি %~1 হিসাবে আপডেট করা হয় না কারণ এটি নির্ধারিত হয় যখন IF পার্স করা হয়। আপনি IF ব্লকের ভিতরে %~1 এবং %~2 ব্যবহার করতে পারেন, তবে এটি একটি বিভ্রান্তির কারণ ছিল বিভ্রান্তিকর। আপনি স্বচ্ছতার জন্য ব্লকের শেষে SHIFT রাখতে পারেন, তবে এটি হারিয়ে যেতে পারে এবং / অথবা লোকেদের বিভ্রান্ত করতে পারে। সুতরাং ব্লকটির বাইরে "ক্যাপচার করা" %~1 এবং %~1 সেরা বলে মনে হয়।
  • আপনি অন্য প্যারামিটারের ঐচ্ছিক মানের পরিবর্তে একটি পরামিতি ব্যবহার করতে চান না, তাই আপনাকে IF NOT "%ARG:~0,2%" == "--"
  • আপনি প্যারামিটার এক ব্যবহার যখন শুধুমাত্র SHIFT সতর্কতা অবলম্বন করা আবশ্যক।
  • সদৃশ কোড SET FOO=%DEFAULT_FOO% দুঃখজনক, তবে বিকল্পটি IF "%FOO%" == "" SET FOO=%DEFAULT_FOO% করতে IF NOT "%ARG%" == "" ব্লকটি IF NOT "%ARG%" == "" বাইরে না থাকে IF NOT "%ARG%" == "" । তবে এটি এখনও IF "%PARAM%" == "--foo" ব্লকের ভিতরে থাকে, তবে %FOO% মান মূল্যায়ন করা হয়েছে এবং আপনি ব্লকটি প্রবেশ করার আগে সেট করা হয়েছে, সুতরাং আপনি উভয়ই এটি সনাক্ত করবেন না --foo পরামিতি উপস্থিত ছিল এবং %FOO% মান অনুপস্থিত ছিল।
  • মনে রাখবেন যে ECHO Missing bar value. 1>&2 ECHO Missing bar value. 1>&2 stderr এ ত্রুটির বার্তা পাঠায়।
  • একটি উইন্ডোজ ব্যাচ ফাইলে একটি ফাঁকা লাইন চান? আপনি ECHO: ব্যবহার করতে হবে ECHO: বা বৈচিত্র্যের একটি।

আপনি বুদ্ধিমানভাবে অনুপস্থিত পরামিতি হ্যান্ডেল করতে চান তবে আপনি এমন কিছু করতে পারেন:

IF %1.==. GOTO No1
IF %2.==. GOTO No2
... do stuff...
GOTO End1

:No1
  ECHO No param 1
GOTO End1
:No2
  ECHO No param 2
GOTO End1

:End1

আরেকটি দরকারী টিপ %* ব্যবহার করা মানে "সব"। উদাহরণ স্বরূপ:

echo off
set arg1=%1
set arg2=%2
shift
shift
fake-command /u %arg1% /p %arg2% %*

যখন আপনি চালান:

test-command admin password foo bar

উপরের ব্যাচ ফাইলটি চালানো হবে:

fake-command /u admin /p password admin password foo bar

আমি সিনট্যাক্স সামান্য ভুল হতে পারে, কিন্তু এই সাধারণ ধারণা।


আসুন এই সহজ রাখা।

এখানে .cmd ফাইল।

@echo off
rem this file is named echo_3params.cmd
echo %1
echo %2
echo %3
set v1=%1
set v2=%2
set v3=%3
echo v1 equals %v1%
echo v2 equals %v2%
echo v3 equals %v3%

এখানে কমান্ড লাইন থেকে 3 কল।

C:\Users\joeco>echo_3params 1abc 2 def  3 ghi
1abc
2
def
v1 equals 1abc
v2 equals 2
v3 equals def

C:\Users\joeco>echo_3params 1abc "2 def"  "3 ghi"
1abc
"2 def"
"3 ghi"
v1 equals 1abc
v2 equals "2 def"
v3 equals "3 ghi"

C:\Users\joeco>echo_3params 1abc '2 def'  "3 ghi"
1abc
'2
def'
v1 equals 1abc
v2 equals '2
v3 equals def'

C:\Users\joeco>

একটি নতুন ব্যাচ ফাইল তৈরি করুন (উদাহরণ: openclass.bat) এবং ফাইলটিতে এই লাইনটি লিখুন:

java %~n1

তারপর ব্যাচ ফাইলে রাখুন, বলুন, সিস্টেম 32 ফোল্ডার, আপনার জাভা ক্লাস ফাইলে যান, ডানে ক্লিক করুন, প্রোপার্টি, ওপেন করুন ..., তারপরে আপনার ব্যাচ ফাইল খুঁজুন, এটি নির্বাচন করুন এবং সেটি ...

এটা আমার জন্য কাজ করে.

PS: আমি জাভা ক্লাস বন্ধ করার সময় cmd উইন্ডো বন্ধ করার উপায় খুঁজে পাচ্ছি না। এখন জন্য ...


এখানে আমি এটা কিভাবে।

@fake-command /u %1 /p %2

এখানে কমান্ড লাইন কেমন দেখায়:

test.cmd admin [email protected] > test-log.txt

% 1 প্রথম পরামিতির ক্ষেত্রে% 2 প্রয়োগ করে (এবং এখানে চতুর অংশটি) দ্বিতীয়টিতে প্রযোজ্য। আপনি এই ভাবে পাস 9 পরামিতি থাকতে পারে।


কমান্ড লাইনের একটি সেট পরিবর্তনশীল উল্লেখ করতে আপনাকে "% A%" ব্যবহার করতে হবে, উদাহরণস্বরূপ:

      set a=100 
      echo %a%  
      output = 100 

দ্রষ্টব্য: উইন্ডোজ 7 প্রো এর জন্য এটি কাজ করে।


ব্যাচ প্যারামিটারগুলি অ্যাক্সেস করা সহজ হতে পারে% 1,% 2, ...% 9 অথবা% * এর সাথেও,
কিন্তু শুধুমাত্র কন্টেন্ট যদি সহজ।

"&"^& জটিল মত জটিল সামগ্রীর জন্য কোনও সহজ উপায় নেই, কারণ ত্রুটি তৈরি না করে% 1 অ্যাক্সেস করা সম্ভব নয়।

set  var=%1
set "var=%1"
set  var=%~1
set "var=%~1"

লাইন প্রসারিত

set  var="&"&
set "var="&"&"
set  var="&"&
set "var="&"&"

এবং প্রতিটি লাইন ব্যর্থ হয়, এক হিসাবে & কোট বাইরে।

এটি একটি অস্থায়ী ফাইল থেকে প্যারামিটারের একটি মন্তব্য সংস্করণ থেকে পড়ার সাথে সমাধান করা যেতে পারে।

@echo off
SETLOCAL DisableDelayedExpansion

SETLOCAL
for %%a in (1) do (
    set "prompt="
    echo on
    for %%b in (1) do rem * #%1#
    @echo off
) > param.txt
ENDLOCAL

for /F "delims=" %%L in (param.txt) do (
  set "param1=%%L"
)
SETLOCAL EnableDelayedExpansion
set "param1=!param1:*#=!"
set "param1=!param1:~0,-2!"
echo %%1 is '!param1!'

কৌশলটি echo on সক্ষম করতে এবং একটি rem স্টেটমেন্টের পরে% 1 প্রসারিত করা ( %2 .. %* সাথেও কাজ করে %2 .. %* )।
সুতরাং এমনকি "&"& একটি ত্রুটি উত্পাদিত ছাড়া প্রতিহত করা যেতে পারে, এটি মন্তব্য করা হয়।

কিন্তু echo on আউটপুট আউটপুট পুনঃনির্দেশিত করতে সক্ষম হতে, আপনি দুটি জন্য-loops প্রয়োজন।

অতিরিক্ত অক্ষর * # যেমন বিষয়বস্তু বিরুদ্ধে নিরাপদ ব্যবহৃত হয় /? ( REM জন্য সাহায্য দেখাবে)।
অথবা লাইনের শেষে ক্যারেট ^ একটি রিমুভের পরেও মাল্টিলাইন চরিত্র হিসাবে কাজ করতে পারে।

তারপর ফাইল থেকে রিম পরামিতি আউটপুট পড়া, কিন্তু সাবধানে।
ফর / এফ বিলম্বিত সম্প্রসারণের সাথে কাজ করতে হবে, অন্যের সাথে "!" ধ্বংস করা হবে।
param1 এ অতিরিক্ত অক্ষর মুছে ফেলার পরে, আপনি এটি পেয়েছেন।

এবং নিরাপদ ভাবে param1 ব্যবহার করতে, বিলম্বিত সম্প্রসারণ সক্ষম করুন।


হ্যাঁ, এবং if এবং for এবং গ্যাং ব্যবহার করে %%1 মত ভেরিয়েবল ব্যবহার করতে ভুলবেন না।

যদি আপনি দ্বিগুণ % ভুলে যান তবে আপনি কমান্ড লাইন আর্গুমেন্টগুলিতে (সম্ভবত নল) প্রতিস্থাপিত হবেন এবং আপনি কিছু চমত্কার বিভ্রান্তিকর ত্রুটি বার্তা পাবেন।


@ECHO OFF
:Loop
IF "%1"=="" GOTO Continue
SHIFT
GOTO Loop
:Continue

দ্রষ্টব্য: যদি "%1"=="" %1 কোটগুলিতে নিজেই সংযুক্ত থাকে তবে সমস্যাগুলি সৃষ্টি হবে।

এই ক্ষেত্রে, IF [%1]==[] বা, এনটি 4 (SP6) এবং পরে কেবল, IF "%~1"=="" পরিবর্তে ব্যবহার করুন।







cmd