নন-টিএক্সটি ফাইলযুক্ত পাঠ্যে টেক্সট সন্ধান এবং প্রতিস্থাপনের জন্য ব্যাচ কমান্ড


1

আমি আইম্যাক্রো জাভাস্ক্রিপ্ট .jsফাইলগুলির সাথে কাজ করছি যা কোড-জাতীয় পাঠ্যের সহজ এনক্রিপ্ট করা লাইন। ফাইলটিতে নিম্নলিখিত কোড রয়েছে:

var i;
for (i = 1; i <= 10; i++)
{
iimSet("loop", i);
iimPlay("ABC.iim");
}

এই লুপটি 10 ​​বার পুনরাবৃত্তি করে। আমি যেমন ব্যাচের ফাইলটিতে ব্যাবহারকারীর কাছ থেকে ইনপুট নিতে চাই:

set /p ID="Enter Number: " %=%

এবং এই 10 প্রতিস্থাপন ব্যবহারকারীর দ্বারা প্রবেশের সংখ্যা সঙ্গে %ID%

আমি এই প্রশ্নটি পেয়েছি: আপনি উইন্ডোজ কমান্ড-লাইন পরিবেশ ব্যবহার করে কোনও ফাইলের পাঠ্যটি কীভাবে সন্ধান এবং প্রতিস্থাপন করতে পারেন?

তবে, কোনও কারণে, আমাকে উইন্ডোজ কমান্ড প্রম্পটে (বিল্ড-ইন ফাংশনগুলি পাওয়ারশেল ইত্যাদির মতো কিছু ব্যবহার করতে হবে) ব্যবহার করতে হবে a

আমি চেষ্টা করেছি এমন কিছু (উপরের উত্তরগুলি থেকে; কার্যকর হয়নি)

cscript replace.vbs "C:\XYZ.js" "i <= 10" "i <= %ID%"

দয়া করে অপ্রয়োজনীয় ফর্ম্যাটিং এড়িয়ে চলুন: এটি আপনার প্রশ্নটি পড়ার পক্ষে আরও শক্ত করে তোলে। আপনি "নন-টেক্সট ফাইলযুক্ত পাঠ্য" এর অর্থ কী ব্যাখ্যা করতে পারেন? এছাড়াও, আমি "ডস" দ্বারা অনুমান করি আপনি প্রকৃতপক্ষে কমান্ড প্রম্পটটি বোঝাচ্ছেন তাই পরিবর্তে আমি এটিকে [ব্যাচ] হিসাবে ট্যাগ করছি।
31415

@ and31415 এবং যেহেতু তিনি তার প্রশ্নের একটি ভিবিএসক্রিপ্ট সমাধান দেখছেন, এটি এত বেশি ব্যাচও নয় .. আরও বেশি সেমিডি.এক্স / কম্যান্ড লাইনের মতো। এবং vbscript।
বারলপ

এটি বলে না যে তারা বিশেষত vbscript অনুসন্ধান করছে ... দেখে মনে হচ্ছে তারা যে উত্তরটি পড়েছে তার মাধ্যমে তারা vbscript চেষ্টা করেছে। প্রশ্ন সংস্থাটিও তাদের পরামর্শ দেয় যে তারা এমন কোনও সমাধান ব্যবহার করতে পারে যা পাওয়ারশেল ইত্যাদি নয়
কিনেক্টাস

আমি ফর্ম্যাট করে এটি আরও স্বচ্ছ এবং সহজে বোধগম্য করার চেষ্টা করেছি। "নন-টেক্সট ফাইলযুক্ত পাঠ্য" এর অর্থ এমন একটি ফাইল যা পাঠ্য / বেসিক এনক্রিপ্টেড কোডযুক্ত তবে একটি .TXT এক্সটেনশন নেই। যাই হোক। হ্যাঁ এর ব্যাচ। না আমি কেবল ভিবি সমাধান খুঁজছি না।
সুপারউজারম্যান

উত্তর:


1

আপনার প্রশ্নে যে ভিবিএসক্রিপ্ট ফাইলটি দেয় তা কাজ করে

আপনি যেমন বলতে পারেন set /p yyy=input number: বা% ID% বলতে পারেন।

আমি নীচে আমি <= 4, আমি <=% ইয়াই% তে পরিবর্তন করব

yyy = 44 তাই এটি হয়ে যায় << 44

C:\blah>type a.a
var i;
for (i = 1; i <= 4; i++)
{
iimSet("loop", i);
iimPlay("ABC.iim");
}

C:\blah>set yyy=44

C:\blah>replace a.a "i <= 4" "i <= %yyy%"

C:\blah>type a.a
var i;
for (i = 1; i <= 44; i++)
{
iimSet("loop", i);
iimPlay("ABC.iim");
}
C:\blah>

সুতরাং দুটি লাইন দিয়ে কেবল একটি ব্যাট ফাইল তৈরি করুন। সেট / পি সহ একটি ... এবং প্রতিস্থাপনের লাইনের সাথে একটি।

বা মাত্র একটি লাইন

C:\blah>set /p ggg= & replace a.a var trt

(পাঠ্য টিআরটি সহ পাঠ্য বর্ণটি প্রতিস্থাপন করবে)

এখানে প্রতিস্থাপন.vbs যা আপনি লিঙ্ক করেছেন is আমি দেখতে পাই এটি সিসক্রিপ্টের সাহায্যে না চালিয়েও এটি কার্যকর করা হয়। (উইন 7 এ পরীক্ষিত)

C:\blah>type replace.vbs
Const ForReading = 1
Const ForWriting = 2

strFileName = Wscript.Arguments(0)
strOldText = Wscript.Arguments(1)
strNewText = Wscript.Arguments(2)

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile(strFileName, ForReading)
strText = objFile.ReadAll
objFile.Close

strNewText = Replace(strText, strOldText, strNewText)
Set objFile = objFSO.OpenTextFile(strFileName, ForWriting)
objFile.Write strNewText  'WriteLine adds extra CR/LF
objFile.Close
C:\blah>

হালনাগাদ-

এখানে একটি পদ্ধতি যা কেবল লাইনের জন্য একটিটিকে পুনরায় লিখুন

@ECHO OFF

REM run like repla 4 to make i <= 4  e.t.c.
REM C:\blah>repla 4<ENTER>

for /f "tokens=1,*" %%f in (a.a) do @(
IF NOT %%f == for (
  echo %%f %%g  
) ELSE (
    ECHO for ^(int i=0; i ^<= %1; i++^)
)
)

আপডেট 2-

তবে আইডি সন্ধানের জন্য

এটি অনুসন্ধান করে - এটি বিবৃতিটির
জন্য আক্রমণাত্মক দেখাচ্ছে cmd.exe ব্যবহার করে লাইনটি এটি বিভক্ত হয়ে যায় (এটি টোকেনাইজ করে তোলে) at এক্ষেত্রে আমি সবেমাত্র স্থানকে ডিলিমিটার হিসাবে ব্যবহার করেছি (যদিও এটি উন্নত করা যেতে পারে)। এরপরে এটি সংখ্যাটি খুঁজে পেতে পারে তবে এটি একটি সেমিকোলন অনুসারে নম্বরটি সন্ধান করে। শেষ লাইনটি সেমিকোলনকে কিছুই দিয়ে প্রতিস্থাপন করে না, অর্থাৎ বিপথগামী সেমিকোলনটিকে সরিয়ে দেয়।

@ECHO OFF


for /f "tokens=1-12" %%f in (a.a) do @(
IF %%f == for set num=%%l
)

echo %num:;=%

যেখানে আমি প্রতিস্থাপন লিখি এটি বদলে ব্যবহার করে .vbs

C:\blah>type a.a
var i;
for (i = 1; i <= 10; i++)
{
iimSet("loop", i);
iimPlay("ABC.iim");
}
C:\crp>findit
10

C:\blah>replace a.a "i <= 10" "i <= 20"

C:\blah>type a.a
var i;
for (i = 1; i <= 20; i++)
{
iimSet("loop", i);
iimPlay("ABC.iim");
}
C:\blah>findit
20

C:\blah>

আপডেট 3

একটি লাইনের পরে অন্য লাইন যুক্ত করার জন্য .. যেটি আমি খুঁজে না পাওয়া পর্যন্ত এক মুহুর্তের জন্য আমাকে রেখেছিল; পালাতে হবে! ব্যাচের ফাইলগুলি সুন্দর নয়

আপনি যে ফাইলটির সাথে কাজ করতে চান তা আআ

আপনি যে ব্যাট ফাইলটি চালাবেন তা এই ক্ষেত্রে a2.bat। তবে আপনি যা চান তা নাম দিতে পারেন

যেমন আপনি দেখতে পাচ্ছেন, এটি আআ পড়ায় এবং আপনার উল্লিখিত লাইনের পরে একটি লাইন যুক্ত করে এটি সংশোধন করে।

আপনি a3.bat চালাতে পারেন একইভাবে a3.bat a3.bat দেখতে কিছুটা পরিষ্কার দেখা যাচ্ছে 'আমি বুঝতে পেরেছিলাম যে আমি এখনও পুরো বিস্ফোরণে প্রচুর স্টাফ ছাড়িয়ে কাজ না করেই এটি কাজ করতে পারি, তাই a3.bat কিছুটা সামান্য তবে a2.bat এর চেয়ে কদর্য চেহারা কম তবে তারা একই কাজ করে।

C:\blah>type a.a
var i;
for (i = 1; i <= 20; i++)
{
iimSet("loop", i);
iimPlay("ABC.iim");
}

C:\blah>type a2.bat
@echo off
for /f "tokens=*" %%f in (a.a) do (
  echo %%f
  if %%f == iimPlay^(^"ABC.iim^"^)^; echo iimPlay^(^"DEF.iim^"^)^;
)

C:\blah>a2
var i;
for (i = 1; i <= 20; i++)
{
iimSet("loop", i);
iimPlay("ABC.iim");
iimPlay("DEF.iim");
}

C:\blah>

আমার উল্লেখ করা উচিত, যে ব্যাট ফাইলটি একটি লাইন যুক্ত করে, অ-ধ্বংসাত্মকভাবে কাজ করে। সুতরাং আ এখনও একই। আপনি যদি এএ পরিবর্তন করতে চান, আপনি C:\blah>a2 >b.b<ENTER> C:\blah>copy b.b a.a<ENTER> ব্যাচের ফাইলের ফলাফলগুলি একটি নতুন ফাইলে আউটপুট করতে পারেন তবে এএএএ অনুলিপি করতে পারেন

এখানে ব্যাচ ফাইলের আরও একটি সংস্করণ রয়েছে যা এটিও কার্যকর হয় .. এবার যদিও আমি অনুলিপি করি

a3.bat এবং a2.bat একই ফলাফল দেয়।

এবং অনুলিপিটির জন্য, আমি অনুলিপি / y ব্যবহার করেছি, যাতে এটি ফাইলটি ওভাররাইট করতে বলবে না।

সুতরাং a2> বিবি বা এ 3> বিবি চালানো মানে ফলাফল বিবিতে চলে যায় তারপরে / টি বিবি এএপি অনুলিপি করুন এবং এটি মূল এএ ফাইলটি ওভাররাইট করে

    C:\crp>type a3.bat
    @echo off
    for /f "tokens=*" %%f in (a.a) do (
      echo %%f
      if "%%f" == "iimPlay("ABC.iim");" echo iimPlay("DEF.iim"^)^;
    )

    C:\crp>a3
    var i;
    for (i = 1; i <= 20; i++)
    {
    iimSet("loop", i);
    iimPlay("ABC.iim");
    iimPlay("DEF.iim");
    }

- কেবল এটি দেখানোর জন্য যে a2 একই কাজ করে

    C:\crp>a2
    var i;
    for (i = 1; i <= 20; i++)
    {
    iimSet("loop", i);
    iimPlay("ABC.iim");
    iimPlay("DEF.iim");
    }

-

এটি a3> বিবি দিয়েও করা যেতে পারে। তারা যেমন আউটপুট দেয়।

    C:\blah>a2 >b.b

    C:\blah>copy /y b.b a.a
            1 file(s) copied.

    C:\blah>copy b.b a.a  <-- you wouldn't do this line. i'm just showing the point of /y
    Overwrite a.a? (Yes/No/All):
            0 file(s) copied.

    C:\blah>copy /y b.b a.a
            1 file(s) copied.

    C:\blah>

- এখন আপনি দেখতে পাচ্ছেন অতিরিক্ত লাইন অন্তর্ভুক্ত করার জন্য এএ পরিবর্তন হয়েছে

    C:\blah>type a.a
    var i;
    for (i = 1; i <= 20; i++)
    {
    iimSet("loop", i);
    iimPlay("ABC.iim");
    iimPlay("DEF.iim");
    }

    C:\blah>

উত্তরের জন্য বারলপ ধন্যবাদ। আমি আবার পরীক্ষা করেছি এবং এটি কাজ করেছে worked "লিপি / ব্যাচ ইউটিলিটি নামক" আরপিএল.ব্যাট "নামে এই লিঙ্কটি থেকে আমার আরও একটি সমাধান কাজ করতে হবে। তবে আমার একটি সম্পর্কিত প্রশ্ন রয়েছে। আপনি কি দয়া করে এই প্রশ্নের অন্য উত্তর সম্পর্কে আমার সর্বশেষ মন্তব্যটি পড়তে পারেন। ধন্যবাদ প্লাজ
ইউজারম্যান

আমি জানি আমি ইতিমধ্যে অনেক প্রশ্ন জিজ্ঞাসা করেছি, তবে আপনি যদি অনুরূপ কিছুতে সহায়তা করতে পারেন। এটি অনুসন্ধান এবং যোগ করার জন্য। বলুন আমি আইইমপ্লে ("DEF.iim") এর আরেকটি লাইন যুক্ত করতে চাই; আইআইএমপ্লে ("ABC.iim") এর লাইনের নীচে; এই .jsfile এ, আমার কোন ব্যাচের কোড দরকার? আপনি যদি বলেন :) আমি অন্য একটি প্রশ্ন খুলতে পারি। অনেক প্রশ্ন :) @barlop জন্য দুঃখিত
SuperUserMan

এইরকম দীর্ঘ জবাব সহ আপনার সময় এবং অধ্যবসায়ের জন্য ধন্যবাদ। আমি এখনও পড়ছি এবং বোধগম্য..সিল্লি মাই: পি। আপনি কি এখানে একবার নজর রাখতে পারেন> superuser.com/questions/787262/… আমি জানি এখন আমি আপনাকে নিখরচায় ভাড়া দেওয়ার চেষ্টা করছি ... তবে সম্ভব হলে একবার দেখুন .... ধন্যবাদ
সুপারউজারম্যান

1

দুর্ভাগ্যক্রমে এই উত্তরটি কোনও "অনুসন্ধান" করে না, তবে আপনার ফাইলটি সহজেই অল্প সংখ্যক লাইনে পুনরায় লেখা যেতে পারে, সুতরাং ফাইলের বিষয়বস্তুগুলি পুনরায় লেখার পক্ষে আরও সহজ হতে পারে ...?

set /p ID="Enter Number: "
@echo off
@echo var i;> javascript.js
@echo for (i = 1; i ^<^= %ID%; i++)>> javascript.js
@echo {>> javascript.js
@echo iimSet("loop", i);>> javascript.js
@echo iimPlay("ABC.iim");>> javascript.js
@echo }>> javascript.js

এটি একটি ব্যাট ফাইল তাই উদাহরণস্বরূপ, js.bat


আমি বুঝতে পেরেছি আপনি সেখানে কি করেছেন তবে আপনার উত্তরটি ব্যাখ্যা করার যত্ন আছে?
বারলপ

ওপি-র ফাইলটিতে কেবল কোডের একটি ছোট সংখ্যক লাইন রয়েছে (লিখিত হিসাবে)। আমার কোডটি প্রয়োজনীয় লুপগুলির সংখ্যা গ্রহণ করে ( set /p ID="Enter Number: ") এবং এটি কেবল ওপির জাভাস্ক্রিপ্ট ফাইলটিকে আবার লিখে দেয় তবে ব্যাচের ভেরিয়েবল থেকে লুপের সংজ্ঞাটি লুপ সংজ্ঞাতে সন্নিবেশ করে এবং বাকী ফাইলটি জাভাস্ক্রিপ্ট.জেএস নামের একটি ফাইলের প্রতিধ্বনি করে - কীভাবে এটি ব্যাখ্যা করবেন তা নিশ্চিত নন ...: এস
কিনেেক্টাস

ধন্যবাদ। আমি আর সমাধান পেয়েছি বলে চেষ্টা করেছি না। তবে আমি ব্যাচ ফাইলে আরও সামগ্রী যুক্ত করার পরিকল্পনা করছি। এই ক্ষেত্রে এটি কি আরও সহজ হবে?
সুপারউজারম্যান

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

ধন্যবাদ 4 উত্তর। ক্রিস আমি কি আপনাকে সম্পর্কিত কিছু জিজ্ঞাসা করতে পারি? এই ব্যাচের ফাইলটি শেষ হওয়ার পরে, মানটি 10 ​​থেকে% ID% (ব্যবহারকারী ইনপুট) থেকে প্রতিস্থাপিত হয় এবং কোনও ফাইলে সঞ্চিত হয়। আমাকে অন্য ব্যবহারকারীর জন্য একই ব্যাচটি পুনরায় চালানো দরকার। এই মুহুর্তে আমি "i <= 10" অনুসন্ধানের জন্য ফাইলটি ব্যবহার করতে পারি না কারণ এটির ফাইলে এর মান ইতিমধ্যে "i <=% ID%" এ পরিবর্তিত হয়েছে। সুতরাং "i <=" এর ঠিক পরে আমি কীভাবে% ID% সন্ধান করতে যাব। কিছু সন্ধানের কমান্ড সন্ধান? টিআইএ
সুপারউজারম্যান
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.