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


9

আমার একটি ফোল্ডার ট্রি রয়েছে, এটি (এটি কেবলমাত্র একটি উদাহরণ, এটি আমার আসল ক্ষেত্রে আরও গভীর হবে):

C:\test
|   
+---folder1
|       foo bar.txt
|       foobar.txt
|       
+---folder2
|       foo bar.txt
|       foobar.txt
|       
\---folder3
        foo bar.txt
        foobar.txt

আমার ফাইলগুলির নামে এক বা একাধিক স্পেস রয়েছে এবং সেগুলি সম্পর্কে আমার একটি কমান্ড করা দরকার, তাই আমি foo bar.txt এ আগ্রহী তবে foobar.txt এ নয়।

আমি চেষ্টা করেছি (একটি ব্যাচের ফাইলের ভিতরে):

for /r test %%f in (foo bar.txt) do if exist %%f echo %%f

কমান্ডটি সহজ echo
এটি কাজ করে না কারণ স্থানটি এড়িয়ে গেছে এবং আমি কোনও আউটপুট পাই না।

এটি কাজ করে তবে এটি আমার যা প্রয়োজন তা নয়:

for /r test %%f in (foobar.txt) do if exist %%f echo %%f

এটি প্রিন্ট করে:

C:\test\folder1\foobar.txt
C:\test\folder2\foobar.txt
C:\test\folder3\foobar.txt

আমি উদ্ধৃতি চিহ্ন (") ব্যবহার করার চেষ্টা করেছি কিন্তু এটি কার্যকর হয় না:

for /r test %%f in ("foo bar.txt") do if exist %%f echo %%f

এটি কাজ করে না কারণ উদ্ধৃতি চিহ্নটি এখনও আউটপুটে অন্তর্ভুক্ত রয়েছে:

C:\test\folder1\"foo bar.txt"
C:\test\folder2\"foo bar.txt"
C:\test\folder3\"foo bar.txt"

উত্তর:



2

পুনরাবৃত্ত স্যুইচ ব্যতীত, আপনি FORউদ্ধৃতিগুলি প্রিন্ট না করতে বলতে পারেন :

for %%f in ("foo bar.txt") do @if exist %%f echo %~dpnxf

আপনি নেস্টেড FORবিবৃতি করতে সক্ষম হতে পারে । বহিরাগত ডিরেক্টরি ট্রি হাঁটা হবে এবং অভ্যন্তর উপরের এক হতে হবে।


হ্যালো, আপনার উত্তরের জন্য আপনাকে ধন্যবাদ। আমি প্রশ্নটি সম্পাদনা করেছি, গাছটি কেবলমাত্র একটি মাত্রার চেয়ে গভীর হতে পারে এবং তাই আমার পুনরাবৃত্তির প্রয়োজন।
আলেসান্দ্রো জ্যাকসন

2
@vts_cvs: FOR /R %%d in (.) DO for %%f ...পুনরাবৃত্ত হয়, তবে এটি কার্যকর করার জন্য কিছু জিনিস কাজ করতে হবে। উদাহরণস্বরূপ আপনাকে বিলম্বিত প্রসারণ ব্যবহার করতে হতে পারে। SETLOCAL ENABLEDELAYEDEXPANSIONএবং !varname!, ইত্যাদি
পরবর্তী বিজ্ঞপ্তি না হওয়া পর্যন্ত বিরতি দেওয়া হয়েছে।

% ~ dpnf ফাইল এক্সটেনশন বাদ দেবে।
ডলমেন


2

আপনি ফোরফাইলস কমান্ডটি দেখতে চাইতে পারেন।

forfiles /S /M "* *" /C "cmd /C echo @PATH"

'/ এস' - পুনরাবৃত্তি। সমস্ত উপ ডিরেক্টরি অনুসন্ধান করুন

'/ এম "* *"' - ফাইলের মুখোশ। কেবল তাদের নামে একটি স্থান সহ ফাইল অনুসন্ধান করুন।

'/ সি "সেন্টিমিডি / সি প্রতিধ্বনি @PATH"' - আদেশ। পাওয়া সমস্ত ফাইলের এই আদেশটি জারি করুন।

উদাহরণ আউটপুট:

"C:\test\folder1\foo bar.txt"
"C:\test\folder2\foo bar.txt"
"C:\test\folder3\foo bar.txt"

0

পতাকাটি fহ'ল আপনার একটি নিখুঁত ফাইল নাম উইটআউট উদ্ধৃতি পেতে হবে (যাতে আপনার প্রয়োজন হলে চারপাশে উদ্ধৃতি দিতে পারেন)। তবে এটি আপনার চয়ন করা ভেরিয়েবল নামের সাথে সাংঘর্ষিক হওয়ায় আপনাকে অন্য একটি ব্যবহার করতে হবে:

for /r test %%i in ("foo bar.txt") do echo %%~fi

এটি সম্পূর্ণ ভুল। কোনও ভেরিয়েবল নামের দ্বন্দ্ব নেই এবং আপনার প্রদর্শিত কমান্ড দ্বারা উদ্ধৃতিগুলি মুদ্রিত হয়েছে।
পরবর্তী বিজ্ঞপ্তি না দেওয়া পর্যন্ত বিরতি দেওয়া হয়েছে।

0

ধন্যবাদ, ডেনিস! আমিও প্রায় অভিন্ন সমস্যা নিয়ে কাজ করছিলাম। আমি একটি ব্যাট ফাইল চাইছিলাম যা আমি ফাইলের নামগুলির জন্য অনুসন্ধান স্ট্রিং হিসাবে ইনপুট পার্মে পাস করতে পারি - ডিরেক্টরিগুলির মাধ্যমে পুনরাবৃত্তভাবে। কেবলমাত্র যদি এখানে এটি অন্য কারও পক্ষে উপকারী হয়।

::+++++++++
@echo off
setlocal ENABLEDELAYEDEXPANSION
for /R %%d in (.) do (
   for /f "usebackq" %%i in (`dir /b %%d ^| findstr /i %1`) do (
      echo Processing %%i
   )
)
endlocal
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.