একটি পাঠ্য ফাইলের নামযুক্ত ফাইলগুলির মধ্য দিয়ে কীভাবে লুপ করবেন? উইন্ডোজ সার্ভার 2012


0
  • উইন্ডোজ সার্ভার 2012 cmd.exe বাক্স
  • আমার get.batতালিকাভুক্ত সমস্ত ডিরেক্টরি প্রক্রিয়া করার জন্য একটি ব্যাচ ফাইল তৈরি করতে হবে, কল করতে হবে , dlist.txtএকই ডাইরে রয়েছে get.bat। ডিরেক্টরি নাম dlist.txt এ প্রতি লাইন এক। dlist.txt দিয়ে তৈরি হয়েছিল dir /b DIV_* > dlist.txt। এই ডিআইভি_এল ফাইলগুলি আমার ব্যাচের ফাইলটি চালিত সেই দুরের প্রকৃত উপ-ডিরেক্টরি।
  • আমি ফর কমান্ডে কোনও ফাইলস্পেক ব্যবহার করতে পারি না কারণ dlist.txtএটি তৈরির পরে আমার হাতে সম্পাদনা করা দরকার । আমি সমস্ত ডায়ারের মতো DIV_*কিছু প্রক্রিয়া করতে চাই না just
  • তৈরি করা হচ্ছে dlist.txtসঙ্গে dir /w DIV_* > dlist.txtউপায়ে সব ডিরেক্টরির নাম [] তাদের চারপাশে এবং আমি যে ব্যবহার করতে পারবেন না।
  • কমান্ডটি get.batতৈরি করে সমস্ত ফলাফল ধারণ করার জন্য একটি ফাইল প্যারামিটারে একটি প্যারামিটার রয়েছে fromxsf। .Txt এক্সটেনশনটি ব্যাচের ফাইল দ্বারা যুক্ত করা হবে।
  • আমার প্রতিটি ডিয়ারে একাধিক কমান্ড করা দরকার dlist.txt, এর মধ্যে কয়েকটি ব্যবহার করে% টেম্পাউটফায়াল% নামক একটি টেম্প ফাইল ফাইল সেট করে fromxsf
  • গুগলে আমি বেশ কয়েকটি পৃষ্ঠাগুলি পড়েছি যার মধ্যে সুপারউসার থেকে কিছু রয়েছে তবে উদাহরণগুলি যেগুলি সেমিডি.এক্স.এইসের জন্য কাজ করতে পারে তা আমার পক্ষে কার্যকর হয়নি। উইন্ডোজ 2012 সার্ভারটি খুব পুরানো? আমি এটি পরিবর্তন করতে পারি না, যা পেয়েছি তা নিয়ে কাজ করতে হবে।
  • fromxsfযে ডিরেক্টরিতে প্রতিটি ডিরেক্টরি প্রক্রিয়া dlist.txtকরার পরে ডিরেক্টরিটিকে একটি প্যারামিটার হিসাবে -cdএবং অস্থায়ী আউটপুট ফাইলকে অন্য প্যারামিটার হিসাবে প্রয়োজন যা% টেম্পাউটফাইল%।
  • আমাদের পাওয়ারশেল রয়েছে বলে মনে হয় না বা কমপক্ষে কোনও পথ সেট করা যায় না।

এখানে ফর লুপটি ব্যবহার করার চেষ্টা করেছি:

set destdir=c:\tempdir
set outfile=%destdir%\%1.txt
FOR /F %%f in ('type dlist.txt') DO (
    echo "--------------------"

    echo Basedir=%%f should be directory
    set tempoutfile=../%%f.txt
    echo outfile=%destdir%\%outfile%
    echo tempoutfile=%tempoutfile%
    echo Processing dir %%f, to tempfile %tempfile%
    pause
    rem Below is the command to process the dir name in %%f to make a temp file in %tempoutfile%
    fromxsf %tempoutfile% -cd %%f +m -nbs -Rep -nofrills

    if exist "%destdir%" (
        echo " " >> %outfile%
        echo "{DIVNAME=%i}" >> %outfile%
        rem Append %tempoutfile% to %outfile%.
        type %tempoutfile% >> %outfile%
        del %tempoutfile%
    )
)

উপরের জন্য %% f এর মান সর্বদা dlist.txt এর প্রথম লাইন। এটা আমি চাই না।

আমি লুপটিতে যা করছি ডিরেক্টরিটির প্রক্রিয়াজাত সামগ্রীগুলি% টেম্পাইল% তে একটি টেম্প ফাইলে আউটপুট করে আউট করছি এবং তারপরে% টেম্পাইল% এর% 1%% ডেডফায়ার% \% আউটফিল% এর বিষয়বস্তুগুলিকে একত্রিত করছি। mycommandকমান্ড লাইন আর্গ হিসাবে ইনপুট ডিরেক্টরি %% f প্রয়োজন। আমি কেবল STDOUT পুনর্নির্দেশ করতে এবং আউটপুট%%% dddir% \% আউটফিল% এ যুক্ত করতে পারি না।

লুপের জন্য কিছু বিকল্প আমি চেষ্টা করেছি:

  • FOR %%f in (dlist.txt) DO (। এই ক্ষেত্রে %%fসর্বদা দ্বিতীয় dir নাম dlist.txtএবং কখনও পরিবর্তন হয় না।

কেউ কি করতে পারে জানেন?

ধন্যবাদ!


সম্পাদনা: ধন্যবাদ আমি বিলম্বিত সম্প্রসারণ এবং গুগল ব্যবহার করে অন্য একটি পোস্ট ব্যবহার করে এটি আবিষ্কার করেছি। লুপটির মূলটি হ'ল পাঠ্য ফাইলে থাকা dlist.txtফাইলের নামগুলি প্রতি লাইনে একটি ফাইল নাম। আমার সমস্যাটি ছিল অনুপস্থিত "tokens=*"বিকল্প। এছাড়াও! পরিবর্তনশীল! নোটেশন অবশ্যই লুপে প্রতিটি সময় ব্যবহার করা উচিত। ভেরিয়েবলের মানগুলি দেখানোর জন্য নীচের লুপটিতে ইকো স্টেটমেন্টও রয়েছে।

setlocal EnableDelayedExpansion
set outfile=c:\temp\tempout.txt
del %outfile%
FOR /f "tokens=*" %%f in (dlist.txt) DO (
    echo.
    echo --------------------
    set indir=%%f
    echo Basediv indir=!indir!
    echo Processing division !indir!

    echo. >> %outfile%
    echo {DIVNAME=!indir!} >> %outfile%
    pause
    fromxsf %outfile% -cd !indir! +m -nbs -Rep -nofrills -a
)

আমার লুপের মূল বিষয়গুলি

  1. %%fপ্রতি লুপে একবার মাত্র ভেরিয়েবল ব্যবহার করুন এবং এটিকে নির্ধারণ করুন indir। এরপরে !indir!ভেরিয়েবলটি ব্যবহার করুন ।
  2. আমি এর ব্যবহার সরিয়ে ফেললাম %tempoutfile%কারণ fromxsfফাইলটি যদি উপস্থিত থাকে তবে কমান্ডটি আমাকে নিজের থেকে আউটপুট সংযোজন করতে দেয় (-a) which

1
১.% টেম্পাউটফাইল% কোথায় একটি মান বরাদ্দ করে? ২. কোনও ফর বা আইএফ মাল্টলাইন ব্লকের ভিতরে ভেরিয়েবলগুলি স্থাপন / প্রসারিত করার বিষয়ে আপনাকে "বিলম্বিত সম্প্রসারণ" এবং বিস্মৃত বিবরণ চিহ্ন চিহ্নিত করতে হবে !variable!
মাইকেল হার্ভে

@ মিশেল হার্ভে: একটা টাইপ ছিল। % টেম্পাউটফায়াল% ফর লুপের শীর্ষের নিকটে নির্ধারিত হয়।
বেল্রুশ

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