উইন্ডোজ PATH ভেরিয়েবল স্ক্রুগুলিতে ব্যাচ ফাইলগুলিতে স্পেস এবং পেরেন্টেসিস


14

সুতরাং, আমার পাথ ভেরিয়েবল (সিস্টেম-> অ্যাড সেটিংস-> এনভ ভার্স-> সিস্টেম-> পাঠ) সেট করা রয়েছে:

C:\Python26\Lib\site-packages\PyQt4\bin;
%SystemRoot%\system32;
%SystemRoot%;
%SystemRoot%\System32\Wbem;
%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\;
C:\Python26\;
C:\Python26\Scripts\;
C:\cygwin\bin;
"C:\PathWithSpaces\What_is_this_bullshit";
"C:\PathWithSpaces 1.5\What_is_this_bullshit_1.5";
"C:\PathWithSpaces (2.0)\What_is_this_bullshit_2.0";
"C:\Program Files (x86)\IronPython 2.6";
"C:\Program Files (x86)\Subversion\bin";
"C:\Program Files (x86)\Git\cmd";
"C:\Program Files (x86)\PuTTY";
"C:\Program Files (x86)\Mercurial";
Z:\droid\android-sdk-windows\tools;

যদিও, স্পষ্টতই, নিউলাইনগুলি ছাড়াই।

রেখাসমূহযুক্ত রেখাগুলি লক্ষ্য করুন PathWithSpaces- প্রথমটির কোনও স্থান নেই, দ্বিতীয়টিতে একটি স্থান রয়েছে এবং তৃতীয়টির একটি স্থান রয়েছে যার পরে একটি প্রথম বন্ধনী রয়েছে।

এখন, এই ব্যাচ ফাইলটির আউটপুট লক্ষ্য করুন:

C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\bin\>vcvars32.bat
C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\bin>"C:\Program Files (x86
)\Microsoft Visual Studio 9.0\Common7\Tools\vsvars32.bat"
Setting environment for using Microsoft Visual Studio 2008 x86 tools.
\What_is_this_bullshit_2.0";"C:\Program was unexpected at this time.
C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\bin>      set "PATH=C:\Pro
gram Files\Microsoft SDKs\Windows\v6.0A\bin;C:\Python26\Lib\site-packages\PyQt4\
bin;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\
WindowsPowerShell\v1.0\;C:\Python26\;C:\Python26\Scripts\;C:\cygwin\bin;"C:\Path
WithSpaces\What_is_this_bullshit";"C:\PathWithSpaces 1.5\What_is_this_bullshit_1
.5";"C:\PathWithSpaces (2.0)\What_is_this_bullshit_2.0";"C:\Program Files (x86)\
IronPython 2.6";"C:\Program Files (x86)\Subversion\bin";"C:\Program Files (x86)\
Git\cmd";"C:\Program Files (x86)\PuTTY";"C:\Program Files (x86)\Mercurial";Z:\dr
oid\android-sdk-windows\tools;"

বা বিশেষত লাইন:

\What_is_this_bullshit_2.0";"C:\Program was unexpected at this time.

তো, এই বুলশিট কী?

বিশেষ করে:

  • যে পথে সঠিকভাবে উদ্ধৃতি দিয়ে পালানো হয়েছে সেই ডিরেক্টরিতে, তবে কোনও ফাঁকা জায়গা = জরিমানা ছাড়াই
  • যে পথে সঠিকভাবে উদ্ধৃতি দিয়ে পালানো হয়েছে এবং সেই জায়গাগুলি রয়েছে তবে কোনও বন্ধনী = জরিমানা নেই path
  • যে পথে সঠিকভাবে উদ্ধৃতি দিয়ে পালানো হয়েছে এবং এর ফাঁকা স্থান রয়েছে এবং এর একটি প্রথম বন্ধন রয়েছে = ERROR

এখানে কি হচ্ছে? আমি এটা কিভাবে ঠিক করবো? আমার সরঞ্জামগুলি এখনও কার্যকর হিসাবে কাজ করার জন্য আমি সম্ভবত একটি জংশন পয়েন্টে অবলম্বন করব, তবে আপনার যদি এই বিষয়ে কিছু অন্তর্দৃষ্টি থাকে তবে দয়া করে আমাকে জানান :)


আমার হাতে থাকা সমস্যাগুলি সম্পর্কে আমার বোঝার উপর ভিত্তি করে উপরের উত্তরটি সঠিক উত্তর, এবং এটি SET হ'ল আদেশটি বিবেচনার উপর নির্ভর করে এবং PATH তার যুক্তির অংশ, যার ভারসাম্যটি নতুন প্যাথ স্ট্রিং। সুতরাং, আইএমও, এটি খুব কম নথিভুক্ত নয়, তবে এটি আরও অস্পষ্ট প্রান্তের মতো। আমি এই সমস্যাটিতে কয়েক ঘন্টা ব্যয় করেছি।
ডেভিড এ। গ্রে

উত্তর:


13

"ব্লক" (যেটি সীমানার জন্য প্রথম বন্ধনী ব্যবহার করে) এর অভ্যন্তরে একটি লাইনে অপরিশোধিত বন্ধনী থাকলে সেখানে এটি ঘটতে পারে।

আপনি সাধারণত বিলম্বিত প্রসারণ চালু করে !var!পরিবর্তে এর সাথে ভেরিয়েবলগুলি ব্যবহার করে এটি ঠিক করতে পারেন %var%। কোড না দেখে আমি দিতে পারার মতো আরও অনেক বেশি পরামর্শ নেই।


19

Users৪-বিট সিস্টেমে উইন্ডোজ ব্যবহারকারীদের জন্য নোট

প্রোগ্রা ~ 1 = 'প্রোগ্রাম ফাইল' প্রোগ্রা ~ 2 = 'প্রোগ্রাম ফাইল (x86)'

https://confluence.atlassian.com/display/DOC/Setting+the+JAVA_HOME+Variable+in+Windows


1
উইন্ডোজটিতে এমএসওয়াইএস ব্যবহার করার সময় $ প্যাথ এনভায়রনমেন্ট ভেরিয়েবলের স্পেসগুলি থেকে মুক্তি পাওয়ার জন্য খুব দরকারী। আমি এই পরিবর্তন না করা পর্যন্ত অটোকনফ ভাল খেলছিল না।
মাইক

13

সেখানে পারেন (ক) উচিত না এমএস উইন্ডোজ পাথ পরিবেশগত পরিবর্তনশীল যে কোন কোট হতে (পাথ কমান্ড) বা (খ) সেখানে নিম্নলিখিত সমগ্র অভিব্যক্তি পার্শ্ববর্তী কোট হওয়া উচিত (সেট কমান্ড) । দুর্ভাগ্যক্রমে, এমএস দ্বারা এটি খুব ভাল নথিভুক্ত নয়, যদিও তারা উল্লেখ করে যে যদি উদ্ধৃতি ব্যবহার করা হয় তবে এগুলি ভেরিয়েবলের (উইন্ডোজ এক্সপি কমান্ড লাইন রেফারেন্স) এর মানতে অন্তর্ভুক্ত হবে ।

$ SET BLAH="blah blah(1)"
$ ECHO %BLAH%
"blah blah(1)"
$ SET BLAH=blah blah(1)
$ ECHO %BLAH%
blah blah(1)

এটি এমন সমস্যা তৈরি করতে পারে যা বেমানান এবং তাই নির্ণয় করা কঠিন। উদাহরণস্বরূপ যদি আপনার পথে "সি: \ পাইথন 27" অন্তর্ভুক্ত থাকে তবে আপনার মেশিন বলবে "'পাইথন' কোনও অভ্যন্তরীণ বা বাহ্যিক কমান্ড, অপারেবল প্রোগ্রাম বা ব্যাচ ফাইল হিসাবে স্বীকৃত নয়।" আপনি যখন অজগর চালানোর চেষ্টা করবেন তবে কিছু গ্রন্থাগার এখনও উপলব্ধ থাকতে পারে।

আপনাকে যা না "এস্কেপ" স্পেস বা প্রথম বন্ধনী করা প্রয়োজন। যদি আপনার বিশেষ অক্ষরগুলি থেকে বাঁচতে হয় তবে ভেরিয়েবলের নাম সহ পুরো এক্সপ্রেশনটির চারপাশে উদ্ধৃতি লিখুন ।

SET "PATH=%PATH%;C:\Program Files (x86)\path with special characters"

অথবা আপনি খুব প্রথম বন্ধনী ব্যবহার করতে পারেন।

(SET VAR=can't contain ampersand, parentheses, pipe, gt or lt)

দ্রষ্টব্য, ডাবল উদ্ধৃতি অবশ্যই জোড়ায় আসতে হবে।

(SET VAR=illegal characters!@#$%^*_-+={}[]\:;""',./?)
echo %VAR%
illegal characters!@#$%*_-+={}[]\:;""',./?

তবে, সম্ভবত এমন কোনও অক্ষর নেই যা বৈধ পথের নাম, যা SET কমান্ডের সাথে সমস্যা সৃষ্টি করবে।



1
আপনি যখন এমএস-উইন্ডোজ বোঝাতে চেয়েছিলেন তখন আপনি আসলে এমএস-ডস লিখেছিলেন এবং আপনার আদেশগুলি এমএস-উইন্ডোজের জন্য ছিল। ওপি এমএস-উইন্ডোজ সম্পর্কে জিজ্ঞাসা করেছিল। আপনি কেন এটি এমএস-ডস বলছেন তা আমি জানি না। এমনকি আপনার লিঙ্কগুলি এনটি বলেছে (এটি হ'ল উইন্ডোজ It এটি 9 এক্স এবং এনটি ব্যবহৃত হত, এখন এটি কেবল এনটি)। উইন্ডোজ এবং এমএস-ডস দুটি পৃথক অপারেটিং সিস্টেম। আমি উইন্ডোজ কমান্ড প্রম্পটকে ভুল করে ডস আগে ভুল বলে দেখেছি, তবে এটি আপনি যা বলেছিলেন ততটা ভুল নয়।
বারলপ

@ বারলপ, অবশ্যই আপনি সঠিক। সম্পাদনা করার জন্য ধন্যবাদ। উইন্ডোজ -৯৫ অবধি উইন্ডোজ ডস শীর্ষে নির্মিত একটি অ্যাপ্লিকেশন ছিল। winডস- এ কমান্ডটি লিখে আপনি উইন্ডোজ শুরু করতে পারেন । উইন্ডোজ -৩.১ এর আগে জোরক এবং ওয়ার্ডস্টারের মতো সমস্ত কিছুই ডস অ্যাপ্লিকেশন ছিল। তারপরে উইন্ডোজ -98 দিয়ে শুরু করে কোনও ডস নেই। তবে আমি মনে করি আমার মতো কিছু পুরানো টাইমার এখনও সিএমডি শেলকে ভুল করে ডস শেল হিসাবে উল্লেখ করে। বিভ্রান্তির জন্য দুঃখিত, এবং আমার উত্তরের উদ্দেশ্যটি পরিষ্কার করার জন্য আবার ধন্যবাদ।
মার্ক মিকোফস্কি

@ মার্কমিকোফস্কি আসলে উইন্ডোজ 9 এক্স (95/98 / এমই) যুক্তিযুক্তভাবে ডস-এও নির্মিত হয়েছিল। আপনি উদাহরণস্বরূপ বুটজিইউআই = 0 এর মতো কিছু বিকল্প (গুলি এমএসডোস.সাইস) সম্পাদনা করতে পারেন এবং উইন্ডো লোডিং বন্ধ করে দিতে পারেন টোকিওপিস.আর / নিউজলেটার / 1996/08/ msdised.html আপনি তখন সেখান থেকে উইন্ডোজ লোড করতে পারতেন কিনা ' জানি না এবং একটি উইন 9 এক্স বুট ডিস্ককে ডস হিসাবে বিবেচনা করা হয়। ওল্ড টাইমাররা যা তারা জানে যে তারা কীভাবে কথা বলছে তা সাধারণত উইন্ডোজ কমান্ড প্রম্পট ডসকে কল করার ভুল করে এমন ব্যক্তিরা। এবং প্রথম ব্যক্তি যারা সবচেয়ে বেশি অনড় থাকেন যে এটি ডস নয়।
বারলপ

1
আপনি কি পরামর্শ দেওয়ার চেষ্টা করেছিলেন(SET PATH=%PATH%;C:\Program Files (x86)\path with special characters) ? এটা সম্পূর্ণ ভুল!
জোসেফজেড

2

মাইক্রোসফট " বন্ধনী অন্তর্ভুক্ত কমান্ড শেল স্ক্রিপ্টগুলিতে ত্রুটি চালানোর ক্ষেত্রে" সমস্যাটি নথিভুক্ত করে ।

তাদের প্রস্তাবিত সমাধানটি হ'ল বিলম্বিত সম্প্রসারণটি ব্যবহার করা।

SETLOCAL ENABLEDELAYEDEXPANSION
SET VAR=string containing ( and ) ...
IF "y" == "y" (
    ECHO !VAR! %VAR%
)
ENDLOCAL

যদি ব্যবহার না করে ইফ ব্লকে পাথ সেট করার জন্য SET PATH=আপনার সম্ভবত PATHকমান্ডটি ব্যবহার করা উচিত ।

SET AddToPath=C:\Program Files (x86)\Whatever

SETLOCAL ENABLEDELAYEDEXPANSION
IF "%X%" == "%Y%" (
    ECHO Adding !AddToPath! to path !PATH!
    PATH !AddToPath!;!PATH!
)

অন্যান্য ভেরিয়েবলের জন্য, অন্য সমাধান হতে পারে উদ্ধৃতি ব্যবহার করা, তবে পুরো জিনিসটি প্রায়:

SET "MyVar=C:\Program Files (x86)\Whatever"

1

জয়ে তার উত্তরে বলেছেন

"ব্লক" (যেটি সীমানার জন্য প্রথম বন্ধনী ব্যবহার করে) এর অভ্যন্তরে একটি লাইনে অপরিশোধিত বন্ধনী থাকলে সেখানে এটি ঘটতে পারে।

এবং এটা সত্য। যদি অপরিশোধিত বন্ধনী থাকে তবে তাদের এড়ানো উচিত। এটাই আমি করেছি; আমি প্রতিস্থাপন

set PATH=some_path;%PATH%

সঙ্গে

set PATH="some_path;%PATH%"

এবং এটি সমস্যার সমাধান করে।


2
নাঃ। আপনার ব্যবহার করা উচিতset "PATH=some_path;%PATH%"
জোসেফজেড

1

আমি অনুরূপ কিছু অভিজ্ঞতা আছে। মাইক্রোসফ্ট এখানে বিষয়টি ব্যাখ্যা করেছে: http://support.microsoft.com/kb/329308

মূলত, সিস্টেম-> অ্যাড সেটিংস-> এনভ ভার্স-> সিস্টেম-> পাথের মাধ্যমে পাথ ভেরিয়েবল পরিবর্তন করার পরিবর্তে চেষ্টা করুন

My Computer->Manage->Computer Management (local)-> Properties-> Advanced-> Environment variables-> Settings

1

উইন্ডোজ 8 এ আমি এই পদ্ধতির কোনওটির সাথে খুব কম সাফল্য পেয়েছি। প্যারেন্টিসেস কাজ করে না, উদ্ধৃতিগুলি কাজ করে না, তবে আপনি যে "পথ "টি এই পদ্ধতিতে সংশোধন করছেন তা সেই পথ নয় যা এক্সিকিউটেবলগুলি সনাক্ত করার জন্য ব্যবহৃত হয়, তারপরে cmdএখনও উইন্ডোটি খোলার সময় উত্তরাধিকারসূত্রে প্রাপ্ত সিস্টেম পাথটি ব্যবহার করা হবে বলে মনে হয়।

উদাহরণস্বরূপ: প্রসেসরের আর্কিটেকচার নির্ধারণের পরে, আমি PATH এনভায়রনমেন্ট ভেরিয়েবলের কয়েকটি পথ যোগ করতে চাই। প্রকৃতপক্ষে, এমনকি কেবলমাত্র এগুলি যুক্ত করা অস্থায়ীভাবে কাজ করবে কারণ একটি ব্যাচের ফাইল চলমান থাকাকালীন আমার কেবল তাদের প্রয়োজন। কিন্তু এটি কাজ করে না।

echo %path%cmdচালু হওয়ার সময় সিস্টেমটি PATH প্রদর্শন করে ।

set path="%path%;%programfiles(x86)%\company\program\subdir"কাজ করে তবে এখন %path%কোট দিয়ে ঘিরে থাকা সমস্ত কিছু রয়েছে এবং আমি যদি অন্য কোথাও থেকে সাবডিরের মধ্যে একটি প্রোগ্রাম চালানোর চেষ্টা করি তবে এটি ব্যর্থ হয়। উদ্ধৃতিগুলির পরিবর্তে পুরো জিনিসটির চারপাশে প্রথম বন্ধনী ব্যবহার করা কার্যকর হয় না

অন্য একটি জিনিস আমি লক্ষ্য করেছি যে একই কমান্ডটি ইন্টারেক্টিভভাবে প্রবেশ করলে একই কমান্ডটি কাজ করবে cmd, তবে কোনও ব্যাচের ফাইলে যদি সম্মুখীন হয় তবে তা নয়। এটা ভীতিজনক। তবুও অন্য একটি অদ্ভুততা হ'ল পরিবেশের ভেরিয়েবলের মানের শেষ চরিত্রের অন্তর্বর্তী ক্ষতি! তৃতীয় পক্ষের প্রোগ্রামগুলির সাথে আরেকটি অসঙ্গতি হ'ল: কেউ কেউ %var%প্যারামিটার হিসাবে পরিচালনা করতে পারে , অন্যরা তা করে না।


1

উইন 8-তে নিম্নলিখিত কাজটি করতে আমার বিশাল সমস্যা হয়েছিল যতক্ষণ না আমি ফাইল ভেরিয়েবল থেকে যে মানটি সেট করেছিলাম তার চারপাশে ডাবল-কোটস যোগ করেছি। এটির বাইরে, যখন ফাইফারে বন্ধুত্বের সাথে একটি ফাইলের নাম ছিল, পরবর্তী লাইনে টুফিল ভেরিয়েবল তৈরির জন্য স্ট্রিং প্রতিস্থাপনের চেষ্টা করা হয়েছিল ব্যর্থ হয়েছিল। নোট করুন যে পার্সিংয়ের সময় পার্সিংয়ের সময় পরিবর্তনের পরিবর্তে পরিবর্তনের পরিবর্তে (সংশ্লিষ্ট CALL উদাহরণের) পরিবর্তনের জন্য আমি বিলম্বিত সম্প্রসারণটি ব্যবহার করি

::-- BATCH file that creates an *_576_5.* file from an *_640_t.* one (copying it)
::-- Author: George Birbilis (http://zoomicon.com)
::-- Credits: String replacement based on http://www.dostips.com/DtTipsStringManipulation.php

@ECHO OFF

::-- Loop for all files recursively --::

FOR /R %%f in (*_640_t.*) DO CALL :process %%f

ECHO(
PAUSE

GOTO :EOF

::-- Per-file actions --::

:process

:: Display progress...
::ECHO Processing %*
<nul (set/p dummy=.)

SETLOCAL ENABLEDELAYEDEXPANSION
SET fromFile="%*"
SET toFile=!fromFile:_640_t=_576_t!

IF NOT EXIST %toFile% CALL :generate %fromFile% %toFile%

GOTO :EOF

::-- Generate missing file --::

:generate

ECHO(
ECHO COPY %*
COPY %*

::PAUSE

GOTO :EOF
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.