উইন্ডোজ ব্যাচ SET ভিতরে কাজ না করে যদি


102

যখন আমি এই স্ক্রিপ্টটি চালাচ্ছি (একটি .bat ফাইল থেকে):

set var1=true
if "%var1%"=="true" (
  set var2=myvalue
  echo %var2%
)

আমি সবসময় পেতে:

ECHO is on.

মানে var2ভেরিয়েবলটি আসলে সেট করা হয়নি। কেউ দয়া করে আমাকে বুঝতে সাহায্য করতে পারেন কেন?

উত্তর:


184

var2 সেট করা আছে তবে echo %var2%ব্লকটি কার্যকর করার আগে লাইনে সম্প্রসারণ ঘটে।
এই সময়ে var2খালি।

সুতরাং বিলম্বিত এক্সটেনশন সিনট্যাক্স বিদ্যমান, এটি এর !পরিবর্তে ব্যবহার করে %এবং এটি কার্যকর করার সময় মূল্যায়ন করা হয়, পার্স সময় নয়।

দয়া করে নোট করুন যে ব্যবহার করার জন্য !, অতিরিক্ত বিবৃতি setlocal EnableDelayedExpansionপ্রয়োজন।

setlocal EnableDelayedExpansion
set var1=true
if "%var1%"=="true" (
  set var2=myvalue
  echo !var2!
)

11
ধন্যবাদ আপনি শুধু আমাকে একটি বিশাল ব্যথা এড়াতে।
ময়না

&&&অপারেটরদের একই নিয়ম । এই কোড set x=some & set y=%x%thing & echo results %y%আউটপুট %x%thing
গৌড়াহ

13

আমি পার্টিতে কিছুটা দেরি করেছি তবে এই শর্তটি মোকাবেলার আরেকটি উপায় হ'ল বাইরে প্রক্রিয়া চালিয়ে যাওয়া iflike

set var1=true
if "%var1%"=="true" (
    set var2=myvalue
)
echo %var2%

অথবা / এবং gotoসিনট্যাক্স ব্যবহার করুন

set var1=true
if "%var1%"=="true" (
    set var2=myvalue
    goto line10
) else (
    goto line20
)
. . . . .
:line10
echo %var2%
. . . . . 
:line20

এইভাবে সম্প্রসারণ "সময়ে" হয় এবং আপনার প্রয়োজন হয় না setlocal EnableDelayedExpansion। নীচের লাইন, আপনি যদি আপনার স্ক্রিপ্টটির নকশাটি পুনর্বিবেচনা করেন তবে আপনি এটি এর মতো করতে পারেন


আমি যদি একটি বিবৃতিতে তৈরি করি তবে আমি একটি পরিবর্তনশীল অ্যাক্সেস করতে অক্ষম। Var2 সহ আপনার প্রথম উদাহরণটি কার্যকর হয় না।
আন্তোনিওসিএস

@ অ্যান্টোনিওসিএস আকর্ষণীয় ... এটি হ'ল স্ক্রিপ্ট যা আমি সবেমাত্র পরীক্ষা করেছি echo off set var1=true if "%var1%"=="true" ( set var2=myvalue ) echo %var2% pause.. এবং এটি কাজ করছে। "আপনি যদি ব্যাচ ফাইলে একটি পরিবর্তনশীল তৈরি করেন যা প্রোগ্রামের যে কোনও জায়গায় এটি অ্যাক্সেস করা যেতে পারে।" aticleworld.com/batch-file-variables-and-scope
টিএস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.