একটি ব্যাচের ফাইলের ফাইলগুলিকে কীভাবে ভেরিয়েবলের মধ্যে পড়তে হয়?


161

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

"C:\Program Files\Windows Resource Kits\Tools\robocopy.exe" "\\testserver\testapp$"        
"\\liveserver\liveapp$" *.* /E /XA:H /PURGE /XO /XD ".svn" /NDL /NC /NS /NP
del "\\liveserver\liveapp$\web.config"
ren "\\liveserver\liveapp$\web.live.config" web.config

সুতরাং আমি কীভাবে এটি অর্জন করব সে সম্পর্কে আমার বেশ কয়েকটি প্রশ্ন রয়েছে ...

  1. ফোল্ডারে একটি version.txtফাইল রয়েছে \\testserver\testapp$এবং এই ফাইলটির একমাত্র বিষয়বস্তু হ'ল বিল্ড নম্বর (উদাহরণস্বরূপ, 45 - বিল্ড 45 এর জন্য) আমি কীভাবে version.txtব্যাচের ফাইলটিতে ফাইলের বিষয়বস্তুগুলিকে ভেরিয়েবলের মধ্যে পড়তে পারি ?

  2. আমি কীভাবে চেক করব যে কোনও ফাইল,, \\fileserver\myapp\releasedocs\ {build}.docpart বিল্ড} এর জায়গায় অংশ 1 থেকে ভেরিয়েবল ব্যবহার করে বিদ্যমান আছে?

উত্তর:


300

ভেরিয়েবলের মধ্যে ফাইল সামগ্রী পড়ুন:

for /f "delims=" %%x in (version.txt) do set Build=%%x

অথবা

set /p Build=<version.txt

উভয়ই ফাইলে কেবল একটি একক লাইন দিয়ে একই কাজ করবে, আরও লাইনের জন্য forভেরিয়েন্টটি ভেরিয়েবলের মধ্যে শেষ লাইনটি রাখবে, যখন প্রথমটিset /p ব্যবহার করবে

ভেরিয়েবলটি ব্যবহার করে - অন্য পরিবেশের পরিবর্তনশীলের মতো - এটি সর্বোপরি এক:

%Build%

সুতরাং অস্তিত্ব পরীক্ষা করার জন্য:

if exist \\fileserver\myapp\releasedocs\%Build%.doc ...

যদিও এটি ভাল হতে পারে যে সেখানে কোনও ইউএনসির পাথের অনুমতি নেই। এখনই এটি পরীক্ষা করতে পারে না তবে এটি মনে রাখবেন।


4
setপদ্ধতিটি কেবল 1024 টি অক্ষর রাউন্ডআপ আরও জানুন, কেন করা হল?
আইউলিয়ান ওনোফ্রেই

12
সম্ভবত কোনও বাফারের মধ্যে সীমাবদ্ধতার কারণে cmd। এটি নির্ভরযোগ্য স্ক্রিপ্টগুলির জন্য একটি ভয়ঙ্কর ভাষা।
জোয়ে

আমি জানি, আমি কোনও ফাইলে স্ট্রিং প্রতিস্থাপন করতে ঘন্টার পর ঘন্টা সংগ্রাম করেছি |
আইলিয়ান ওনোফ্রেই

16
@ ইলিয়ানঅনফ্রেই, 1023 প্রশস্ত অক্ষর (2046 বাইট) পড়ার জন্য একটি স্ট্যাক বরাদ্দ বাফারের সাথে set /pকল cmd!ReadBufFromInputকরে। এটি ফাইল থেকে 1023 বাইট পড়ে, ওএম / এএনএসআই চরিত্রের জন্য 1 বাইট ধরে, কিন্তু এটি বর্তমান কোডপেজ ব্যবহার করে ফাইলটি ডিকোড করে, যা অগত্যা ওএম / এএনএসআই নয়। সবচেয়ে খারাপ কেস কোডপেজ 65001 এবং 4-বাইট UTF-8 অক্ষর (যেমন একটি প্রাচীন স্ক্রিপ্ট) দিয়ে পূর্ণ একটি ফাইল। আপনি 255 টি অক্ষর পাবেন, পাশাপাশি আংশিকভাবে ডিকোড করা অক্ষরটি প্রতিস্থাপনের অক্ষর, ইউ + এফএফএফডি হিসাবে সংরক্ষণ করবে।
এরিক সান

3
@Jan: for /f "usebackq" %%x in ("path with spaces.txt") ...help forউপায় দ্বারা, এটি উল্লেখ।
জোয়ি

46

আপনি ফাইল থেকে একাধিক ভেরিয়েবলগুলি পড়তে পারেন:

for /f "delims== tokens=1,2" %%G in (param.txt) do set %%G=%%H

যেখানে param.txt:

PARAM1=value1
PARAM2=value2
...

1
এই নিখুঁত সমাধান. আক্ষরিক ওপি উত্তর দিতে, (param.txt)হওয়া উচিত (version.txt)এবং এটি থাকা উচিতBuild=45
robotik

এই সমাধান।
জেইল

3
%% জি এই সময়ে অপ্রত্যাশিত ছিল।
জন

4
@ জন: কমান্ড লাইনে সরাসরি ব্যবহারের জন্য, প্রতিটির %%Gসাথে প্রতিস্থাপন করুন%G
স্টিফান

32

শুধু কর:

type version.txt

এবং এটি প্রদর্শিত হবে যেমন আপনি টাইপ করেছেন:

set /p Build=<version.txt
echo %Build%

4
@ জেব আমি জানি তবে টাইপ কমান্ডের জন্য আমি এখনও কৃতজ্ঞ কারণ আমার যা প্রয়োজন তা ঠিক করে
এমএসএম

ধরণের সংস্করণ সরবরাহ করার জন্য আপনাকে ধন্যবাদ। আমার যা প্রয়োজন তা সঠিকভাবে কাজ করে, ভাগ করা ডিরেক্টরিতে থাকা ফাইলের সামগ্রীগুলি অ্যাক্সেস করে।
টেস্টিবাউনারিজ

22

ভেরিয়েবলের মধ্যে লোড করা ফাইলের সমস্ত লাইন পেতে, বিলম্বিত প্রসারণ প্রয়োজন, সুতরাং নিম্নলিখিতগুলি করুন:

SETLOCAL EnableDelayedExpansion

for /f "Tokens=* Delims=" %%x in (version.txt) do set Build=!Build!%%x

কিছু বিশেষ অক্ষর নিয়ে সমস্যা রয়েছে, বিশেষত ;, %এবং!


সমগ্র আবদ্ধ setডাবল কোট মধ্যে অভিব্যক্তি অন্তত সঙ্গে সমস্যা এড়াতে পারে কিছু বিশেষ অক্ষর: set "Build=!Build!%%x"
aschipfl

9
আমার স্ক্রিপ্টটি কেবল "প্রতিধ্বনি চালু আছে" প্রিন্ট করে। ব্যাচ সম্পূর্ণ আবর্জনা কেন?
ট্রেভর হিকি

বিলম্বিত সম্প্রসারণ ছাড়াই আমার জন্য কাজ করে: set err=(পরের লাইন)for /f "delims=" %%x in (err.tmp) do set "err=%err% %%x"
টিভনেট

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