আমি জানতে চাই যে কীভাবে একটি উইন্ডোজ ব্যাচ ফাইল ব্যবহার করে একটি পাঠ্য ফাইলে প্রতিটি লাইনটি লুপ করা যায় এবং প্রতিটি পাঠ্যক্রমের ধারাবাহিকতায় প্রক্রিয়াজাত করা যায়।
আমি জানতে চাই যে কীভাবে একটি উইন্ডোজ ব্যাচ ফাইল ব্যবহার করে একটি পাঠ্য ফাইলে প্রতিটি লাইনটি লুপ করা যায় এবং প্রতিটি পাঠ্যক্রমের ধারাবাহিকতায় প্রক্রিয়াজাত করা যায়।
উত্তর:
নীচের পোস্টগুলি ব্যাপকভাবে সহায়তা করেছে, তবে আমার প্রশ্নে আমি যা বলেছিলাম সেখানে সম্পূর্ণরূপে সম্পূর্ণ লাইনটি প্রক্রিয়া করার প্রয়োজন ছিল না। আমি যা কাজ করতে পেয়েছি তা এখানে।
for /F "tokens=*" %%A in (myfile.txt) do [process] %%A
তারকাচিহ্ন (*) সহ টোকেন কীওয়ার্ডটি পুরো লাইনের জন্য সমস্ত পাঠ্য টানবে। আপনি যদি নক্ষত্রটি না রাখেন তবে এটি কেবল প্রথম শব্দটি লাইনে টানবে। আমি ধরে নিলাম এটি স্পেসগুলির সাথে করার আছে।
আমি পোস্ট সব প্রশংসা করি!
আপনার ফাইলের পথে যদি ফাঁকা স্থান থাকে তবে আপনাকে ব্যবহার করা দরকার usebackq
। উদাহরণ স্বরূপ.
for /F "usebackq tokens=*" %%A in ("my file.txt") do [process] %%A
for /F "tokens=*" %%A in ("myfile.txt") do echo A = %%A
-> A = myfile.txt
কিভাবে এই ব্যর্থ করার কোন ধারনা।?
উইন্ডোজ কমান্ড লাইন রেফারেন্স থেকে:
মন্তব্য করা রেখাগুলি উপেক্ষা করে কোনও ফাইলকে বিশ্লেষণ করতে টাইপ করুন:
for /F "eol=; tokens=2,3* delims=," %i in (myfile.txt) do @echo %i %j %k
এই কমান্ডটি মাইফাইল.টেক্সটে প্রতিটি লাইনকে পার্স করে, সেমিকোলন দিয়ে শুরু হওয়া লাইনগুলি উপেক্ষা করে এবং প্রতিটি লাইন থেকে ফোর বডি পর্যন্ত দ্বিতীয় এবং তৃতীয় টোকনকে অতিক্রম করে (টোকেনগুলি কমা বা স্পেস দ্বারা সীমিত করা হয়)। দ্বিতীয় টোকেন পেতে% i,% তৃতীয় টোকেন পেতে% j এবং বাকী সমস্ত টোকেন পেতে% কে উল্লেখ করার জন্য ফর স্টেটমেন্টের মূল অংশ।
যদি আপনি যে ফাইলের নাম সরবরাহ করেন সেগুলিতে স্পেস থাকে, তবে পাঠ্যের চারপাশে উদ্ধৃতি চিহ্নগুলি ব্যবহার করুন (উদাহরণস্বরূপ, "ফাইলের নাম")। উদ্ধৃতি চিহ্নগুলি ব্যবহার করতে, আপনাকে অবশ্যই ইউজব্যাকিউক ব্যবহার করতে হবে। অন্যথায়, উদ্ধৃতি চিহ্নগুলি পার্স করার জন্য একটি আক্ষরিক স্ট্রিং সংজ্ঞায়িত হিসাবে ব্যাখ্যা করা হয়।
উপায় দ্বারা, আপনি বেশিরভাগ উইন্ডোজ সিস্টেমে কমান্ড-লাইন সহায়তা ফাইলটি এখানে খুঁজে পেতে পারেন:
"C:\WINDOWS\Help\ntcmds.chm"
একটি ব্যাচ ফাইল আপনি হবে ব্যবহার %%
পরিবর্তে %
: (টাইপ help for
)
for /F "tokens=1,2,3" %%i in (myfile.txt) do call :process %%i %%j %%k
goto thenextstep
:process
set VAR1=%1
set VAR2=%2
set VAR3=%3
COMMANDS TO PROCESS INFORMATION
goto :EOF
এটি কী করে: ফোর কমান্ডের শেষে "ডল কল: প্রক্রিয়া%% i %% j %% কে" মাইফাইল.txt থেকে "প্রক্রিয়া" 'সাব্রোটিন'-এ কমান্ডের জন্য প্রাপ্ত তথ্য পাস করে।
আপনি যখন একটি ব্যাচ প্রোগ্রামে ফর কমান্ড ব্যবহার করছেন, আপনার ভেরিয়েবলগুলির জন্য ডাবল% চিহ্ন ব্যবহার করা দরকার।
নিম্নলিখিত রেখাগুলি কমান্ড থেকে প্রক্রিয়া 'সাব রুটিন' এ সেই পরিবর্তনকগুলি পাস করে এবং আপনাকে এই তথ্যটি প্রক্রিয়া করার অনুমতি দেয়।
set VAR1=%1
set VAR2=%2
set VAR3=%3
আমার এই সঠিক সেটআপটির বেশ কয়েকটি উন্নত ব্যবহার রয়েছে যা যদি আরও উদাহরণগুলির প্রয়োজন হয় তবে আমি ভাগ করতে চাই would অবশ্যই আপনার ইওএল বা ডিলিমগুলিতে অবশ্যই যুক্ত করুন।
প্রথম "ফর / এফ .." উত্তরটির উন্নতি: আমার যা করা দরকার তা হ'ল মাইলিস্ট.টেক্সট-এ তালিকাভুক্ত প্রতিটি স্ক্রিপ্টের সম্পাদনা করানো, সুতরাং এটি আমার পক্ষে কাজ করেছিল:
for /F "tokens=*" %A in (MyList.txt) do CALL %A ARG1
- অথবা, আপনি যদি একাধিক লাইনের মাধ্যমে এটি করতে চান:
for /F "tokens=*" %A in (MuList.txt) do (
ECHO Processing %A....
CALL %A ARG1
)
সম্পাদনা করুন: উপরে বর্ণিত উদাহরণটি কমান্ড-প্রম্পট থেকে ফর লুপ সম্পাদনের জন্য; একটি ব্যাচ-স্ক্রিপ্ট থেকে, অতিরিক্ত% যোগ করা দরকার যা নীচের মত দেখানো হয়েছে:
---START of MyScript.bat---
@echo off
for /F "tokens=*" %%A in ( MyList.TXT) do (
ECHO Processing %%A....
CALL %%A ARG1
)
@echo on
;---END of MyScript.bat---
@ মিঃ ক্রাউসের উত্তরটি শিক্ষণীয়। আরও, আমাকে যোগ করতে দিন যে আপনি যদি ব্যাচ ফাইলের মতো একই ডিরেক্টরিতে অবস্থিত কোনও ফাইল লোড করতে চান তবে ফাইলের নাম% ~ dp0 দিয়ে উপস্থাপন করুন। এখানে একটি উদাহরণ:
cd /d %~dp0
for /F "tokens=*" %%A in (myfile.txt) do [process] %%A
এনবি:: যদি আপনার ফাইলের নাম বা ডিরেক্টরি (উদাহরণস্বরূপ উপরের উদাহরণে myfile.txt) এর একটি স্পেস থাকে (যেমন 'my file.txt' বা 'c: \ প্রোগ্রাম ফাইল'):
for /F "tokens=*" %%A in ('type "my file.txt"') do [process] %%A
প্রোগ্রামটিতে কলিং টাইপ কীওয়ার্ড সহ type
, যা একটি পাঠ্য ফাইলের বিষয়বস্তু প্রদর্শন করে। আপনি যদি টাইপ কমান্ড কল করার ওভারহেড ভোগ করতে না চান তবে আপনার ডিরেক্টরিটি পাঠ্য ফাইলের ডিরেক্টরিতে পরিবর্তন করা উচিত। নোট করুন যে স্পেস সহ ফাইলের নামের জন্য এখনও প্রকারের প্রয়োজন।
আমি আশা করি এটা কারো সাহায্যে লাগবে!
**cd /d %~dp0**
লুপের আগে কল করবে । এটি নিশ্চিত করবে যে আপনি ব্যাচের ফাইলটি যে ডিরেক্টরিটিতে রয়েছেন তাতে কোনও ফাইল উল্লেখ করছেন the পর্যবেক্ষণের জন্য ধন্যবাদ
type
থ্যাক্স এবং +1 ওয়াকাকারআউন্ডের জন্য
type
কাজ করার মতো কাজ পেতে পারি না , আমাকে আমার ফাইলের নামটি উদ্ধৃত করতে হয়েছে কারণ এটি একটি পৃথক ডিরেক্টরিতে রয়েছে যেখানে স্পেস রয়েছে (অভিশাপ আপনাকে Program Files
)। আমি একটি ত্রুটি The system cannot find the file `type.
গৃহীত উত্তরটি ভাল তবে দুটি সীমাবদ্ধতা রয়েছে।
এটি খালি লাইন এবং লাইনগুলি দিয়ে শুরু হয়;
যে কোনও সামগ্রীর লাইনগুলি পড়তে আপনার বিলম্বিত প্রসারণ টগলিং টেকনিকের প্রয়োজন।
@echo off
SETLOCAL DisableDelayedExpansion
FOR /F "usebackq delims=" %%a in (`"findstr /n ^^ text.txt"`) do (
set "var=%%a"
SETLOCAL EnableDelayedExpansion
set "var=!var:*:=!"
echo(!var!
ENDLOCAL
)
Findstr লাইন নম্বর এবং একটি কোলন দিয়ে প্রতিটি লাইন উপসর্গ করতে ব্যবহৃত হয়, তাই খালি লাইন আর খালি হয় না।
%%a
প্যারামিটারটি অ্যাক্সেস করার সময় বিলম্বিত এক্সপেনশনটি অক্ষম করা দরকার , অন্যথায় বিস্মৃত বিবরণ চিহ্ন !
এবং ক্যারেটগুলি^
হারিয়ে যাবে, কারণ তাদের সেই মোডে বিশেষ অর্থ রয়েছে।
তবে লাইনটি থেকে রেখা নম্বরটি সরাতে, বিলম্বিত সম্প্রসারণটি সক্ষম করা দরকার।
set "var=!var:*:=!"
প্রথম কোলন পর্যন্ত সমস্ত সরিয়ে দেয় ( delims=:
একটি লাইনের শুরুতে সমস্ত কলোন ব্যবহার করে , কেবল ফাইন্ডাস্ট্র থেকে একগুলি ব্যবহার করে না)।
এন্ডলোকাল পরবর্তী লাইনের জন্য আবার বিলম্বিত সম্প্রসারণ অক্ষম করে।
একমাত্র সীমাবদ্ধতাটি এখন 19 8191 এর লাইন দৈর্ঘ্যের সীমা, তবে এটি অতিক্রম করার কোনও উপায় বলে মনে হচ্ছে না।
setlocal
কমান্ডলাইনে অনুমতি দেয় না । আমি যখন সিএমডি-তে কোড চালাই, আমি পাই! ফাঁকা পরিবর্তে কিভাবে ঠিক করবো?
একটি ফোল্ডারে সমস্ত এসকিউএল স্ক্রিপ্ট কার্যকর করতে আমি এখানে লিখেছি এমন একটি ব্যাট ফাইল:
REM ******************************************************************
REM Runs all *.sql scripts sorted by filename in the current folder.
REM To use integrated auth change -U <user> -P <password> to -E
REM ******************************************************************
dir /B /O:n *.sql > RunSqlScripts.tmp
for /F %%A in (RunSqlScripts.tmp) do osql -S (local) -d DEFAULT_DATABASE_NAME -U USERNAME_GOES_HERE -P PASSWORD_GOES_HERE -i %%A
del RunSqlScripts.tmp
আপনার যদি এনটি-ফ্যামিলি উইন্ডোজ ( cmd.exe
শেল হিসাবে একটি) থাকে তবে ফর / এফ কমান্ডটি ব্যবহার করে দেখুন ।
স্বীকৃত আনসার cmd.exe
এবং ব্যবহার করে
for /F "tokens=*" %F in (file.txt) do whatever "%F" ...
শুধুমাত্র "সাধারণ" ফাইলগুলির জন্য কাজ করে। এটি বিশাল ফাইলগুলির সাথে খারাপভাবে ব্যর্থ ails
বড় ফাইলগুলির জন্য আপনার পাওয়ারশেল এবং এর মতো কিছু ব্যবহার করতে হতে পারে:
[IO.File]::ReadLines("file.txt") | ForEach-Object { whatever "$_" }
বা আপনার যদি যথেষ্ট স্মৃতি থাকে:
foreach($line in [System.IO.File]::ReadLines("file.txt")) { whatever "$line" }
এটি আমার পক্ষে ২ মিলিয়ন এমবি ফাইল যুক্ত 250 মিলিয়ন লাইনের সাথে কাজ করেছিল, যেখানে for /F ...
কয়েক হাজার লাইনের পরে কমান্ডটি আটকে গিয়েছিল।
মধ্যে পার্থক্য জন্য foreach
এবং ForEach-Object
, দেখুন জানা foreach এবং foreach-বস্তু পথ ।
(ক্রেডিট: পাওয়ারশেলের লাইনে ফাইল লাইন পড়ুন )
হেরোকুতে আমাদের রেল অ্যাপ্লিকেশনগুলির তালিকা তৈরি করতে এখানে মডেল করা উদাহরণ - ধন্যবাদ!
cmd /C "heroku list > heroku_apps.txt"
find /v "=" heroku_apps.txt | find /v ".TXT" | findstr /r /v /c:"^$" > heroku_apps_list.txt
for /F "tokens=1" %%i in (heroku_apps_list.txt) do heroku run bundle show rails --app %%i
এখানে সম্পূর্ণ কোড ।
for /f "tokens=1" %%i in ('find /v "=" heroku_apps.txt ^| find /v ".TXT" ^| findstr /r /v /c:"^$"') do...
(উল্লেখ্য যোগে ^
'পাইপ অব্যাহতি ব্যবহৃত র, যাতে এটি পাস করা হয়েছে for
এবং কমান্ড প্রসেসর সরাসরি নয়)
কমান্ড লাইন থেকে টেক্সট ফাইলে সমস্ত লাইন মুদ্রণ করতে (বিলম্বিত এক্সপেনশন সহ):
set input="path/to/file.txt"
for /f "tokens=* delims=[" %i in ('type "%input%" ^| find /v /n ""') do (
set a=%i
set a=!a:*]=]!
echo:!a:~1!)
নেতৃস্থানীয় হোয়াইটস্পেস, ফাঁকা লাইন, হোয়াইটস্পেস লাইনের সাথে কাজ করে।
উইন 10 সিএমডি পরীক্ষিত
]]]
delims
পাঠ্য ফাইলে কোনও লাইন ]
যেমন দিয়ে শুরু হয় তা সংশোধন করতে পারে । এমন কিছু চরিত্রের সাথে প্রতিস্থাপন করুন যা না, বা ব্যাকস্পেস বা বেলের মতো নিয়ন্ত্রণের অক্ষর; এগুলি সাধারণত পাঠ্য ফাইলগুলিতে পাওয়া যায় না। এর কারণ delims=]
হ'ল ফাঁকা রেখাগুলি সংরক্ষণের /n
জন্য find
কমান্ড দ্বারা নির্মিত স্থানধারীদের অপসারণ করা ।
%%A
সাথে প্রতিস্থাপন করুন%A
। অন্যথায় আপনি পাবেন%%A was unexpected at this time.
।