উইন্ডোজ। সিএমডি ফাইল বা ব্যাচ ফাইলে ফাঁকের ফাঁকে ফাঁকে একটি পাথ ভেরিয়েবল সেট করুন


112

আমি স্ক্রিপ্ট রচনায় নতুন এবং এটি কাজ করতে পারি না। আমি যদি ফাইলগুলিকে কোনও স্থান ছাড়াই কোনও পথে নিয়ে যাই তবে আমি এটি চাইলে স্থানটির সাথে কাজ করাতে চাই।

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

পরীক্ষার জন্য, আমি যতক্ষণ না এটি কাজ করতে পারি ততক্ষণ আমি সহায়তা স্যুইচটি ব্যবহার করছি। আমি এটি একটি 8.3 ফাইল / ফোল্ডারের নাম ব্যবহার করে করতে পারি (উদাঃ আমার ডকুমেন্টস মাইডোকু ments 1 হিসাবে) তবে এটি কি অন্যভাবে করা যায়?


উদ্ধৃতিগুলিতে অবশ্যই ফাইলের নাম এবং কমান্ড লাইন প্যারামিটারগুলি অবশ্যই অনুসরণ করে। কমান্ড লাইনটি কীভাবে তৈরি হয় সে সম্পর্কে আপনি আরও কিছু বিশদ দিতে পারেন? হুবহু আপনি কী বলতে চাইছেন> আমি যদি সংজ্ঞাটিতে পথটির চারপাশে কোটস রাখি,
সেমিডি.এক্সে

উত্তর:


104

এরকম কিছু চেষ্টা করুন:

SET MY_PATH=C:\Folder with a space

"%MY_PATH%\MyProgram.exe" /switch1 /switch2

আমি নোটপ্যাডে প্রতিস্থাপনটি ব্যবহার করেছিলাম। ধন্যবাদ.
মার্সেরিকসন

5
এটা খুশী হয়েছে। আপনি যদি উজ্জীবিত হন এবং আপনি যে কোনও উত্তরই আপনাকে সহায়তা করেছেন বলে স্বীকার করে নিলে ভাল লাগবে।
এফোরিয়া

75

আমি ব্যবহার করি

set "VAR_NAME=<String With Spaces>"

পাথ আপডেট করার সময়:

set "PATH=%UTIL_DIR%;%PATH%"

3
এটি গ্রহণযোগ্য উত্তর হওয়া উচিত। কোনও কারণে, যদি একটি ব্লক থেকে সেট কলটি যদি মানটির কোনও স্থান থাকে এবং অকার্যকর হয় তবে তা কাজ করে না।
কেভিন

33

এখানে দুটি বিকল্প রয়েছে। প্রথমত, আপনি পাথটি অব্যক্তভাবে সঞ্চয় করতে পারেন এবং কেবল পরে এটি উদ্ধৃত করতে পারেন:

set MyPath=C:\Program Files\Foo
"%MyPath%\foo with spaces.exe" something

আপনি যে অন্য বিকল্পটি ব্যবহার করতে পারেন তা হ'ল একটি সাবরুটিন যা আন-কোটিং স্ট্রিংয়ের জন্য সহায়তা করে (তবে এই ক্ষেত্রে এটি কোনও খুব ভাল ধারণা নয় যেহেতু আপনি কোট যোগ করছেন, এগুলি সরিয়ে ফেলে এবং কোনও সুবিধা ছাড়াই আবার পুনরায় যুক্ত করেছেন):

set MyPath="C:\Program Files\Foo"
call :foo %MyPath%
goto :eof

:foo
"%~1\foo.exe"
goto :eof

%~1যুক্তি প্রায় উদ্ধৃতি চিহ্ন সরিয়ে ফেলা হয়। উদ্ধৃত চারপাশের ফোল্ডারের নামগুলি পাস করার সময় এটি কার্যকর হয় তবে যেমন আগেই বলা হয়েছে, এই বিশেষ ক্ষেত্রে এটি সেরা ধারণা নয় :-)


আমি নোটপ্যাডে প্রতিস্থাপন ব্যবহার করে প্রথম পদ্ধতিটি ব্যবহার করেছি। দ্বিতীয়টি অহেতুক জটিল বলে মনে হয়েছিল। ধন্যবাদ.
মার্সেরিকসন

2
আমার কাছে একটি ব্যাচ ফাইল রয়েছে যা পরামিতি পায়। ব্যবহার set LALA=%~1ছিল আমার জন্য কাজ করে।
JCH2k

2nd পদ্ধতি perfeclty কাজ করে যখন আপনি ব্যবহার করছেন subrutines
robe007

16

এটা চেষ্টা কর;

  1. নীচের মত একটি ভেরিয়েবল তৈরি করুন

    SET "SolutionDir=C:\Test projects\Automation tests\bin\Debug"**
    
  2. তারপরে চলক সহ পথটি প্রতিস্থাপন করুন। শুরু এবং শেষের জন্য কোট যোগ করার বিষয়টি নিশ্চিত করুন

    vstest.console.exe "%SolutionDir%\Automation.Specs.dll"
    

8

আমি যখন একটি ব্যাট ফাইল তৈরি করি তখন আমি সর্বদা পথটি ডাবল কোটে রাখি। (আমি কেবল PAUSE যুক্ত করেছি যাতে এটি স্ক্রিনটি বন্ধ করে দেয়।)

উদাহরণ স্বরূপ:

"C:\Program Files\PageTech\PCLReader64_131\PCLReader64.exe"
PAUSE

7

এটি করার সঠিক উপায়টি এটির মতো:

@ECHO off
SET MY_PATH=M:\Dir\^
With Spaces\Sub Folder^
\Dir\Folder
:: calls M:\Dir\With Spaces\Sub Folder\Dir\Folder\hello.bat
CALL "%MY_PATH%\hello.bat"
pause

5

এই সমস্যাটি সমাধানের সবচেয়ে সহজ উপায় হ'ল ফোল্ডারের নামটি উদ্ধৃতিতে রাখা:

(cd\New Folder\...) --> (cd\"New Folder"\...)

আশা করি এটি সাহায্য করে।


2

আপনার যদি স্থায়ী পাথ সংরক্ষণ করতে হয় (সেন্টিমিডি পুনরায় আরম্ভ করার সময় পাথ পরিবর্তন হয় না)

  1. প্রশাসক হিসাবে কমান্ড প্রম্পট চালান (cmd.exe এ ডান ক্লিক করুন এবং প্রশাসক হিসাবে রান নির্বাচন করুন)

  2. সেন্টিমিটারে setx path "%path%;your new path" প্রবেশ করুন

  3. পাথটি টাইপ করে এবং এন্টার টিপে পথটি সঠিকভাবে নেওয়া হয়েছে কিনা তা পরীক্ষা করে দেখুন


1
আমি মনে করি, প্রশ্নটি PATH ভেরিয়েবল সম্পর্কে নয় , বরং একটি পাথ ভেরিয়েবল সম্পর্কে । ওপ স্পষ্টতই একটি নির্দিষ্ট পাথকে একটি ভেরিয়েবলের মধ্যে সঞ্চয় করতে এবং ব্যাচের স্ক্রিপ্ট জুড়ে মানটি ব্যবহার করতে চায়।
অ্যান্ড্রি এম

1

এছাড়াও কেবল ডাবল স্ল্যাশ যুক্ত করার চেষ্টা করুন এটি কেবল আমার জন্য কাজ করে

সেট dir = "সি: \\ 1। কিছু ফোল্ডার \\ কিছু অন্য ফোল্ডার \\ ঠিক কারণ"

এমকেডিআইআর% দির% তে @echo

ওএমজি পোস্ট করার পরে তারা আমার পোস্টে দ্বিতীয়টি সরিয়ে নিয়েছে তাই আপনি যদি আমার মন্তব্যটি খুলেন এবং এটি তিনটি দেখায় আপনার দুটি হিসাবে পড়তে হবে ......

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