ব্যাচ ফাইল: একটি ফাইল কিভাবে পড়বেন?


102

আপনি কিভাবে একটি ব্যাচ ফাইল থেকে একটি ফাইল (পাঠ্য বা বাইনারি) পড়তে পারেন? এটি বাইনারি মোডে বা পাঠ্য মোডে পড়ার উপায় আছে?


@ রুকিটিইসি 9: হ্যাঁ, আমি জানি যে এগুলি 2 সম্পূর্ণ ভিন্ন জিনিস, তবে আমার একটি উত্তর দরকার যা উইন্ডোজ এনটি (বা আরও নতুন সংস্করণ) নয়, এমএসডোসে কাজ করেছিল, এই প্রশ্নটিও years বছর আগে জিজ্ঞাসা করা হয়েছিল, তা কি মনে আছে
লুকাস গ্যাব্রিয়েল সানচেজ

@ রুকিটিইসি 9: আমি মনে করি আপনি ঠিক বলেছেন, এর কিছুক্ষণ পরে গেছে। আমি কেবল এমএস-ডস ট্যাগটি সরিয়ে ফেলব
লুকাস গ্যাব্রিয়েল সানচেজ

4
আপনি TYPE [fileName]এমএস-ডসের জন্য কমান্ডটি ব্যবহার করতে পারেন ।
রোকে

আউট এটা আমার জন্য কাজ এই চেষ্টা - stackoverflow.com/a/31919715/4534414
Anurag_BEHS

উত্তর:


40

আপনি ফর কমান্ডটি ব্যবহার করতে পারেন:

FOR /F "eol=; tokens=2,3* delims=, " %i in (myfile.txt) do @echo %i %j %k

প্রকার

for /?

কমান্ড প্রম্পটে। এছাড়াও, আপনি ini ফাইলগুলি পার্স করতে পারেন !


28
এটি একটি অত্যন্ত জটিল উদাহরণ, কোনও ব্যাখ্যা না দিয়ে একটি বিশেষভাবে ফর্ম্যাট করা পাঠ্য ফাইল থেকে খুব সুনির্দিষ্ট তথ্য পার্স করে। অনুযায়ী for /?কমান্ড myfile.txt প্রতিটি লাইন পার্স হবে, লাইন করে একটি সেমিকোলন দিয়ে শুরু উপেক্ষা শরীরের জন্য প্রতিটি লাইন থেকে 2nd এবং 3rd টোকেন ক্ষণস্থায়ী, কমা এবং / অথবা শূণ্যস্থান দ্বারা সীমায়িত টোকেন সঙ্গে।
মার্টিন প্রিক্রিল

4
আপনার উদাহরণটি cmd.exe এর সহায়তা থেকে। আপনার এটির জন্য একটি ইঙ্গিত যুক্ত করা উচিত বা পুরো বিবরণটি অনুলিপি করা উচিত।
থ। থিলিমান

71

এনটি-স্টাইলের cmd.exe এর অধীনে আপনি একটি পাঠ্য ফাইলের লাইন দিয়ে লুপ করতে পারেন

FOR /F %i IN (file.txt) DO @echo %i

আরও তথ্যের জন্য কমান্ড প্রম্পটে "সহায়তা জন্য" টাইপ করুন। (আপনি যে "ডস" ব্যবহার করছেন তাতে এটি কাজ করে কিনা তা জানেন না)


22
এটা হওয়া উচিত %%i
জিম

33
এই কমান্ডটি যদি একটি সাদা স্থানের অক্ষর খুঁজে পায় তবে একটি লাইন পড়া বন্ধ করবে। অবশেষে আমি ফর / এফ "টোকেনগুলি = *" %% i ইন (file.txt) ব্যবহার করে শেষ করে ফেললাম @ECHO %% i
জেসন

9
এটি কাজ করে! এবং আপনি যদি ব্যাট ফাইল ব্যবহার করছেন তবে যদি কনসোল ব্যবহার করে% i ব্যবহার করেন তবে %% i চেষ্টা করুন।
স্টিভেন ডু

41

ফোর-লুপটি সাধারণত কাজ করে তবে কিছু সমস্যা আছে। FOR 8190 ডলারের বেশি খালি লাইনগুলি এবং লাইনগুলি সমস্যাযুক্ত accept বিলম্ব প্রসারণ অক্ষম করা থাকলে প্রসারণ কেবল নির্ভরযোগ্যভাবে কাজ করে।

সিআর / এলএফ বনাম একক এলএফ সনাক্তকরণও কিছুটা জটিল বলে মনে হচ্ছে।
এছাড়াও এনওএল অক্ষরগুলি সমস্যাযুক্ত কারণ একটি ফর-লুপ তাত্ক্ষণিকভাবে পড়াটি বাতিল করে দেয়।

সরাসরি বাইনারি পড়া প্রায় অসম্ভব বলে মনে হচ্ছে।

খালি লাইনগুলির সমস্যাটি একটি কৌশল দ্বারা সমাধান করা যেতে পারে। প্রতিটি লাইনের সন্ধানকারী কমান্ডটি ব্যবহার করে একটি রেখা সংখ্যার সাথে উপসর্গ করুন এবং পড়ার পরে উপসর্গটি সরিয়ে ফেলুন।

@echo off
SETLOCAL DisableDelayedExpansion
FOR /F "usebackq delims=" %%a in (`"findstr /n ^^ t.txt"`) do (
    set "var=%%a"
    SETLOCAL EnableDelayedExpansion
    set "var=!var:*:=!"
    echo(!var!
    ENDLOCAL
)

সক্ষম করতে হবে এবং প্রতিবন্ধী বিলম্বিত সম্প্রসারণ মধ্যে টগল করা neccessary হয় স্ট্রিং মত সঙ্গে নিরাপদ কাজের জন্য !বা ^^^xy!z
এটা এ কারণে যে লাইন set "var=%%a"একমাত্র নিরাপদ DisabledDelayedExpansion অন্য বিস্ময়বোধক চিহ্ন সরিয়ে ফেলা হয় এবং ক্যারেট (সেকেন্ডারি) পালাবার অক্ষর হিসাবে ব্যবহার করা হয় এবং তারা খুব সরিয়ে ফেলা হয়।
তবে ভেরিয়েবলটি ব্যবহার varকরা কেবলমাত্র এনএবেডডিলিয়েডএক্স্পেনশন সহ নিরাপদ , কারণ এর call %%var%%মতো সামগ্রীতে একটি ব্যর্থও হবে "&"&

সম্পাদনা: সংযুক্ত সেট / পি বৈকল্পিকের
সাথে ফাইল পড়ার দ্বিতীয় উপায় রয়েছে set /p, কেবলমাত্র অসুবিধাগুলি হ'ল এটি প্রতি লাইনে per 1024 অক্ষর সীমাবদ্ধ এবং এটি লাইন শেষে নিয়ন্ত্রণ অক্ষরগুলি সরিয়ে দেয়।
তবে সুবিধাটি হ'ল, আপনার বিলম্বিত টগলিংয়ের দরকার নেই এবং ভেরিয়েবলগুলিতে মানগুলি সংরক্ষণ করা সহজ

@echo off
setlocal EnableDelayedExpansion
set "file=%~1"

for /f "delims=" %%n in ('find /c /v "" %file%') do set "len=%%n"
set "len=!len:*: =!"

<%file% (
  for /l %%l in (1 1 !len!) do (
    set "line="
    set /p "line="
    echo(!line!
  )
)

এটি "বাইনারি" হেক্স-উপস্থাপনায় পড়ার জন্য
আপনি এসও এর দিকে নজর দিতে পারেন : একটি বাইনারি ফাইলটিকে ব্যাচের ফাইল ব্যবহার করে এইচএক্স উপস্থাপনায় রূপান্তর করা


পয়েন্টার ব্যবহারের জন্য ধন্যবাদ set /p। আমি set /p value=< result.txtএকটি পাঠ্য ফাইল থেকে প্রথম লাইনটি ব্যবহার করেছি
স্টিভিসি

জেব, আমি আপনার সমাধানের উপর ভিত্তি করে সম্পর্কিত প্রশ্ন জিজ্ঞাসা করেছি উপরের স্ট্যাকওভারফ্লো
নিকোলাস

ইওএফ (ফাইলের শেষের) অক্ষর, এএসসিআইআই সম্পর্কে 0x1Aকী? নেই for /FNUL (সাথে একই ভাবে আচরণ 0x00) অক্ষর?
aschipfl

@ এসচিপএফএল আমি মনে করি 0x1A কিছু ক্ষেত্রে লাইনফিডের মতো আচরণ করে (বা আরও ভাল এটি একটি লাইনফিডে অনুবাদ করা হয়েছে)। কোনও টেম্প ফাইল ব্যবহার না করে কোনও এসইউবি তৈরির উপায় আছে?
jeb

4
এই গৃহীত উত্তর হওয়া উচিত, এটা অব্যর্থ এমনকি যদি লাইন দিয়ে শুরু :বা ;বা ধারণ!
HackingAddict1337

11

এটি করার একটি খুব সহজ উপায় হ'ল নিম্নলিখিত কমান্ডটি ব্যবহার করুন:

set /p mytextfile=< %pathtotextfile%\textfile.txt
echo %mytextfile%

এটি কেবল একটি পাঠ্য ফাইলে পাঠ্যের প্রথম লাইনটি প্রদর্শন করবে। আপনি যে অন্য উপায়ে এটি করতে পারবেন তা হ'ল নিম্নলিখিত কমান্ডটি ব্যবহার করুন:

type %pathtotextfile%\textfile.txt

এটি স্ক্রিনে টেক্সট ফাইলে সমস্ত ডেটা রাখবে। আশাকরি এটা সাহায্য করবে!


1

বেশ কয়েকটি বিভিন্ন উপায়ে রয়েছে তবে আপনি যদি কেবল পাঠ্যটি প্রদর্শন করতে চান এবং এটি কোথাও সঞ্চয় করতে চান না তবে আপনি কেবল ব্যবহার করুন: findstr /v "randomtextthatnoonewilluse" filename.txt


0

সংশোধিত কোড:

setlocal enabledelayedexpansion
for /f "usebackq eol= tokens=* delims= " %%a in (`findstr /n ^^^^ "name with spaces.txt"`) do (
    set line=%%a
    set "line=!line:*:=!"
    echo(!line!
)
endlocal
pause

পৃষ্ঠার মূল কোডটি। উদ্ধৃতিগুলি সঠিকভাবে অবস্থিত নয়, কোড ফাঁকা স্থান সহ ফাইলগুলির জন্য উপযুক্ত নয় for আমার হয়। আমি এখানে ^^^^ এর কৌতুক দিতে
Celes

আপনি ফাইলনামের চারপাশের উদ্ধৃতিগুলি ঠিক বলেছেন, তবে আপনার কোডে কিছু সমস্যা রয়েছে: eol=এবং delims=অতিরিক্ত set line=%%aব্যবহারিক হওয়া উচিত , উদ্ধৃতি ব্যবহার করা উচিত এবং বিলম্বিত প্রসারণ মোড টগল না করে কোডটি
উদ্বোধনের

-5

একটি কোড যা স্ক্রিনে myfile.txt ফাইলের বিষয়বস্তু প্রদর্শন করে

% ফাইলকন্টেন্ট% = 0
টাইপ% ফাইল নাম% >>% ফাইলকন্টেন্ট%
ইকো% ফাইল কনটেন্ট% সেট করুন


4
কমপক্ষে পোস্ট করার আগে কোড চেষ্টা করুন। এটা ঠিক বাজে।
স্টিফান

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