উইন্ডোজ কমান্ড প্রম্পট আউটপুট প্রদর্শন এবং এটি একটি ফাইলে পুনঃনির্দেশিত


371

আমি কীভাবে উইন্ডোজ কমান্ড প্রম্পটে একটি কমান্ড-লাইন অ্যাপ্লিকেশন চালাতে পারি এবং একই সাথে আউটপুট উভয় প্রদর্শিত এবং কোনও ফাইলে পুনঃনির্দেশিত করতে পারি?

যদি, উদাহরণস্বরূপ, আমি কমান্ডটি চালিত করতে পারি dir > test.txt, test.txtএটি ফলাফল প্রদর্শন ছাড়াই ডাকা একটি ফাইলের আউটপুট পুনর্নির্দেশ করবে ।

আমি কমান্ড আউটপুট প্রদর্শন করে কিভাবে লিখতে পারে এবং উইন্ডোজ কমান্ডে পুনর্নির্দেশ আউটপুট একটি ফাইলে প্রম্পট, অনুরূপ teeইউনিক্স কমান্ড?


63
এবং দয়া করে এটিকে এমএসডোস বলা বন্ধ করুন! সেমিডি.এক্সএইচ এবং ব্র্যান্ডেড কমান্ড ডট কমের মধ্যে মিলগুলি হ'ল বিয়োগাত্মক এবং ছোট হচ্ছে and
paxdiablo


এর মধ্যে কোনওটিই কাজ করে না যদি কারও কাছে একটি কনসোল অ্যাপ্লিকেশন থাকে যা একটি ডেল লোড করে যে পাঠ্যকে আউটপুট করে। মূল অ্যাপ্লিকেশন পাঠ্যটি একটি ফাইলে পুনঃনির্দেশিত হয় তবে dll থেকে আউটপুট কনসোল উইন্ডোতে প্রদর্শিত হয় না এবং অবিরত থাকে। আমি dll থেকে পাঠ্য ক্যাপচার কোন উপায় খুঁজে পেয়েছি।
ব্রায়ান রিইনহোল্ড

1
এক এখনও পারা শুধু একটি ফাইল এবং ব্যবহার লেজ (মধ্যে নল stackoverflow.com/questions/187587/... উপর ফাইল)
x29a

আমি যদি কোনও কমান্ড লাইন ইউটিলিটি ব্যবহার করছি এবং স্ক্রিনে প্রদর্শিত ঠিক একই ফর্ম্যাটে আউটপুটটিকে কোনও ফাইলে ডাইরেক্ট করতে চাই আমি ইউটিউব-ডিএল ব্যবহার করে লিঙ্কগুলি বের করতে এবং আউটপুটটিকে একটি টেক্সট ফাইলে পুনর্নির্দেশ করতে পারি, তবে এটি রূপান্তরিত নয় আপনি প্রম্পটে পাবেন ফাইলটিতে এটি একক লাইন হিসাবে আসবে।
বিস্টবয়

উত্তর:


153

পছন্দসইয়ের উত্তরটি প্রসারিত করতে আপনি এইভাবে পাওয়ারশেল ব্যবহার করতে পারেন:

powershell "dir | tee test.txt"

আপনি যদি বর্তমান ডিরেক্টরিতে কোনও এক্সির আউটপুট পুনর্নির্দেশের চেষ্টা করছেন তবে আপনার .\ফাইলের নামটি ব্যবহার করা দরকার যেমন:

powershell ".\something.exe | tee test.txt"

8
এটি সর্বাধিক নিকটবর্তী উত্তর: এটি ডিফল্ট ইনস্টলে কাজ করে, কারণ বেশিরভাগ মেশিনে এবং বিশেষত সার্ভারগুলিতে পিএস ইতিমধ্যে রয়েছে।
Stoleg

1
এটাই সেরা উত্তর! সরল এবং "বাক্সের বাইরে" কাজ করে
জোশ ওয়ার্টস

3
এটি পছন্দ করুন :) যাইহোক {পাওয়ারশেল "পিং -n 10 লোকালহোস্ট | টি টেস্ট.টেক্সট"} টি পার্টিতে কী ঘটছে তা আরও ভালভাবে প্রদর্শন করবে
গ্রেনিক্স

4
নোট করুন যে dirপাওয়ারশেলটিতে এমন একটি উপাধি রয়েছে Get-ChildItemযা সেন্টিমিডির অভ্যন্তরীণ dirকমান্ডের মতো নয় । আপনার প্রয়োজন powershell "cmd /c dir | tee test.txt"যদি আপনি
সেমিডির

8
সমস্ত আউটপুট দেখতে, STDERR এর সাথে STDERR এ পুনর্নির্দেশ করতে ভুলবেন না 2>&1, উদাহরণস্বরূপnode 2>&1 | tee debug_log.txt
ঝে হু

132

আমি কোনও ফাইল এবং তারপরে কনসোলে আউটপুট পুনঃনির্দেশের সমাধান / কাজের সন্ধান করতে সক্ষম হয়েছি :

dir > a.txt | type a.txt

যেখানে dir হ'ল কমান্ড যা আউটপুট পুনঃনির্দেশিত করা প্রয়োজন, a.txt একটি ফাইল যেখানে আউটপুট সংরক্ষণ করতে হবে।


100
এটি উত্তরটি সন্তুষ্ট করে, তবে ডির কমান্ডটি সম্পন্ন হওয়ার পরে ডেটা তৈরি হওয়ার পরিবর্তে ডেটা আউটপুট করে।
লেইফ রিফেল

10
এটি কাজ করবে, তবে কমান্ড স্টিডিন থেকে কোনও ইনপুট অপেক্ষা করলে আপনি আটকে যাবেন।
ভিটিম.ইস

5
আমি এই সহজ উত্তর পছন্দ! আমি দেখতে পেলাম যে কয়েকটি কমান্ডের ফলাফলের জন্য এর &পরিবর্তে একটি |প্রয়োজন, যেমনping7z.exe
ওয়েস লারসন

পরিবর্তে ইন্টারেক্টিভ কমান্ডের জন্য কাজ করছেন না dir। উদাহরণ: chkdsk /f c: > c:\Temp.txt | c:\Temp.txt। সিস্টেম রিপোর্ট ফাইলটি অন্য একটি প্রক্রিয়া দ্বারা লক করা আছে।
সোপালাজো ডি অ্যারিরিজ

4
@ এলিই রি: handle output to stderr- 2>&1পুনঃনির্দেশটি যুক্ত করুন যাতে এটি এর মতো হয়: dir 2>&1 > a.txt & type a.txtএবং আপনার স্টাড্রারের সাথে স্ট্যাডার মেশানো উচিত
জেসি চিশলম

97

ইউনিক্স teeকমান্ডের একটি উইন 32 পোর্ট রয়েছে , এটি ঠিক তাই করে। দেখুন http://unxutils.sourceforge.net/ বা http://getgnuwin32.sourceforge.net/


17
লিঙ্কটি ইউনিক্স কমান্ড টিয়ের একটি উইন্ডোজ প্রয়োগের দিকে নির্দেশ করে, তাই এটি উইন্ডোতে কাজ করে।
ব্রায়ান রাসমুসেন

3
হ্যাঁ, উত্তর এবং মন্তব্যটি ভোটিং। আমি প্রকৃতপক্ষে সাইগউইনকে প্রাধান্য দেব কারণ এটিতে সমস্ত কিছু রয়েছে তবে কিছু লোকেরা ডি-ডিএলএল সরঞ্জামগুলি বেছে নিতে পারে যা তারা বেছে নিতে পারে।
paxdiablo

3
ইউনিক্স ইউটিলিটি এছাড়াও প্রচুর GnuWin32 প্রকল্পের দ্বারা বৈশিষ্ট্যসমূহ নিয়ে আসা হয়, দেখতে gnuwin32.sourceforge.net
ভ্লাদভি

2
UnxUtils সর্বশেষ 2003 সালে আপডেট হয়েছিল; GnuWin32 কিছুটা আপ টু ডেট।
কোয়াকোট কোয়েসোট

9
আপনি, আমার মত GnuWin32 এর এটি লড়াই তাহলে teeপ্যাকেজ, আপনি এটা পাবেন gnuwin32.sourceforge.net/packages/coreutils.htm
নাইজেল টাচ

49

এটি দেখুন: উইন্টি

সাইগউইনের দরকার নেই।

আমি মুখোমুখি হয়েছি এবং কিছু সমস্যা রিপোর্ট করেছি।

এছাড়াও আপনি আনক্সুইটালগুলি পরীক্ষা করতে পারেন কারণ এতে টি (এবং সাইগউইনের কোনও প্রয়োজন নেই) রয়েছে তবে সাবধান থাকুন যে ইওল আউটপুটটি এখানে ইউনিক্স-জাতীয়।

সর্বশেষ, তবে সর্বনিম্ন নয়, যদি আপনার পাওয়ারশেল থাকে তবে আপনি টি-অবজেক্ট চেষ্টা করতে পারেন। get-help tee-objectআরও তথ্যের জন্য পাওয়ারশেল কনসোলে টাইপ করুন ।


4
কেন ডাউন ভোট? এখানে 95% জবাবগুলির একটি সাধারণ বিষয় রয়েছে: প্রাথমিক কমান্ড শেষ হওয়ার পরে আউটপুটটি পুনঃনির্দেশিত হয়: মন্তব্যগুলি পড়ুন। ইউনিক্স ইউটিলিটি teeরিয়েল টাইম আউটপুটস। wteeএকই কার্যকারিতা আছে। আপনি যদি বাগগুলি মনে না করেন তবে এটি ঠিকঠাক করবে।
জোসিপোভিচ

এটিই আমার জন্য একমাত্র সমাধান কাজ করে, পাওয়ারশেল> ৪.০ নেই। থাম্বস আপ!
অ্যালেক্স

46

@ tori3852

আমি এটি খুঁজে পেয়েছি

dir > a.txt | type a.txt

কাজ হয়নি (কেবলমাত্র ডির তালিকার প্রথম কয়েকটি লাইন - সন্দেহ রয়েছে যে কোনও ধরণের প্রক্রিয়া ফোরকিং এবং দ্বিতীয় অংশটি, 'টাইপ' কমান্ডটি ভয়ানক তালিকা সম্পন্ন হওয়ার আগেই শেষ হয়েছিল?), সুতরাং পরিবর্তে আমি ব্যবহার করেছি:

dir > z.txt && type z.txt

যা করেছে - ক্রমানুসারে কমান্ডগুলি, দ্বিতীয়টি শুরুর আগে একটি সম্পূর্ণ করে।


17
আপনি যদি কমান্ডটি ব্যর্থ হয় এমনকি কমান্ডটি কার্যকর হয় তা নিশ্চিত করতে চাইলে &পরিবর্তে আপনার ব্যবহার করা উচিত । এটি কার্যকর যখন আপনার আদেশে কিছু ত্রুটি ছিল এবং আপনি এখনও কনসোলে লগ ফাইলটি দেখতে চান। মাইক্রোসফ্ট এর নিবন্ধ দেখুন । যাইহোক, এটির ত্রুটি স্তরে সেট হওয়ার বিষয়টি রয়েছে (যা 0 হবে)। &&typedir%errorlevel%type
এডিটিসি

25

দুর্ভাগ্যক্রমে এমন কোনও জিনিস নেই।

উইন্ডোজ কনসোল অ্যাপ্লিকেশনগুলিতে কেবল একটি একক আউটপুট হ্যান্ডেল রয়েছে। (ভাল, এখানে দুটি আছে STDOUT, STDERRতবে এটি এখানে কোনও ব্যাপার নয়) >সাধারণত কনসোল হ্যান্ডলে একটি ফাইল হ্যান্ডলে লেখা আউটপুটটিকে পুনঃনির্দেশ করে।

আপনি যদি কোনও ধরণের মাল্টিপ্লেক্সিং করতে চান তবে আপনাকে একটি বাহ্যিক অ্যাপ্লিকেশন ব্যবহার করতে হবে যা আপনি আউটপুটটিকে অন্যদিকে রূপান্তর করতে পারেন। এই অ্যাপ্লিকেশনটি পরে কোনও ফাইল এবং কনসোলে আবার লিখতে পারে।


3
teeঅন ​​* নিক্স এছাড়াও পৃথক অ্যাপ্লিকেশন, শেলের উপর কোনও পুনর্নির্দেশ নয়
ফুক্লভি

22

একটি সাধারণ সি # কনসোল অ্যাপ্লিকেশনটি কৌশলটি করতে পারে:

using System;
using System.Collections.Generic;
using System.IO;

namespace CopyToFiles
{
    class Program
    {
        static void Main(string[] args)
        {
            var buffer = new char[100];
            var outputs = new List<TextWriter>();

            foreach (var file in args)
                outputs.Add(new StreamWriter(file));

            outputs.Add(Console.Out);

            int bytesRead;
            do
            {
                bytesRead = Console.In.ReadBlock(buffer, 0, buffer.Length);
                outputs.ForEach(o => o.Write(buffer, 0, bytesRead));
            } while (bytesRead == buffer.Length);

            outputs.ForEach(o => o.Close());
        }
    }
}

এটি ব্যবহারের জন্য আপনি প্রোগ্রামে উত্স কমান্ডটি কেবল পাইপ করুন এবং আউটপুটটিকে নকল করতে চান এমন কোনও ফাইলের পথ সরবরাহ করুন। উদাহরণ স্বরূপ:

dir | CopyToFiles files1.txt files2.txt 

Dir এর ফলাফল প্রদর্শন করার সাথে সাথে ফাইল 1.txt এবং ফাইল 2.txt উভয়তেই ফলাফল সংরক্ষণ করবে।

মনে রাখবেন যে উপরে ত্রুটি পরিচালনা করার পথে অনেক কিছুই (কিছু!) নেই, এবং একাধিক ফাইলকে সমর্থন করার প্রয়োজন আসলে নাও হতে পারে।


5
হুম, কিছুতেই টি / সাইগউইন ডাউনলোড করুন বা এমএসভিএস কিনে আমার হার্ড-রোজগারের মতো নগদ অর্থের মতো ছোট্ট প্রোগ্রামের জন্য? এটি একটি কঠিন এক :-)
প্যাক্সডিয়াবলো

19
এটি সঙ্কলনের জন্য আপনার ভিজ্যুয়াল স্টুডিওর দরকার নেই, কমান্ডলাইন সরঞ্জামগুলি আসলে বিনামূল্যে। লিঙ্কটির জন্য কেবল গুগল "। নেট এসডিকে ডাউনলোড" (সরাসরি লিঙ্কটি চারপাশে পরিবর্তিত হয় তবে গুগল সবসময় কাজ করে বলে মনে হয়)।
ক্রিস

13
ভিজ্যুয়াল স্টুডিও এক্সপ্রেসটিও বিনামূল্যে, তবে আমি এখনও এটির জন্য টি ব্যবহার করব।
ব্রায়ান রাসমুসেন

7
সাইগউইন ইনস্টল করতে ব্যথা। আপনার কাছে উত্সাহ দেওয়া কারণ এটিই আমি খুঁজছিলাম।
সমুরসা

1
আমি মনে করি না এটি কনসোল এবং আউটপুটগুলি একই সাথে ফাইলগুলি করে?
mjaggard

20

এটি কিছুটা কুৎসিত হলেও এটি কাজ করে:

dir >_ && type _ && type _ > a.txt

এটি অন্য কয়েকটি সমাধানের থেকে কিছুটা নমনীয়, যাতে এটি বিবৃতি-বিবৃতিতে কাজ করে যাতে আপনি এটি যুক্ত করতেও এটি ব্যবহার করতে পারেন। বার্তাগুলি লগ ইন করতে এবং বার্তা প্রদর্শন করতে আমি এটি বেশ খানিকটা ব্যবহার করি:

ECHO Print line to screen and log to file.  >_ && type _ && type _ >> logfile.txt

হ্যাঁ, আপনি কেবল ECHO বিবৃতিটির পুনরাবৃত্তি করতে পারেন (একবারে পর্দার জন্য এবং দ্বিতীয়বার লগফাইলে পুনর্নির্দেশ করা), তবে এটি দেখতে দেখতে খারাপ দেখাচ্ছে এবং এটি একটি রক্ষণাবেক্ষণের বিষয় is কমপক্ষে এইভাবে আপনাকে দুটি জায়গায় বার্তায় পরিবর্তন করতে হবে না।

মনে রাখবেন _ _ একটি সংক্ষিপ্ত ফাইলের নাম, সুতরাং আপনার ব্যাচ ফাইলের শেষে (আপনি যদি একটি ব্যাচ ফাইল ব্যবহার করছেন) আপনার অবশ্যই এটি মুছতে হবে make


2
আপনার প্রক্রিয়াটি চালুর পরে আপনি যদি সামগ্রীগুলি প্রদর্শন করতে চান তবে এটি কেবল কার্যকর। এবং এটি সমাধান করা কোন কঠিন সমস্যা নয়।
ক্রিস্টোফার পেইন্টার

1
হ্যাঁ, আমি অনুমান করি যে এটির মূল পোস্টারটি যা জিজ্ঞাসা করেছিল তার থেকে এটি কিছুটা আলাদা সমস্যা addresses
এমটিএস

1
+1 আমি সর্বদা এটি করেছি। আমি বিশ্বাস করি এটিই মূল প্রশ্নের সঠিক উত্তর এবং তাই চিহ্নিত করা উচিত। @ এমটিএস-এর ইঙ্গিত হিসাবে, কৌশলটি হ'ল আপনি আসলে দুটি ফাইলে লিখেন: প্রতিটি কমান্ড / লাইন অনুযায়ী তৈরি হওয়া (তাই একক ">" যা প্রতিবার ওভাররাইট করে) এবং তারপরে আপনি সেই লাইনটি স্ক্রিনে টাইপ করেন ( টাইপ করুন ) এবং অবশেষে, আপনি এটি আবার টাইপ করুন এবং এর আউটপুট, সমস্ত দীর্ঘ সংযোজন, আপনার লগ ফাইল ">>" এর সাথে পুনঃনির্দেশ করুন। আমি এইভাবে কয়েক বছর ধরে এটি করেছি, যদিও আমি সাধারণ টেম্পল ফাইলটি পছন্দ করি। আমি সর্বদা "tmp.txt" বা soomoming করেছি। হ্যাঁ, এটি পরে মুছুন।
eduncan911

এটি একটি ভাল পদ্ধতির তবে আমার কিছু ত্রুটি ক্যাপচার না হওয়ায় সমস্যা হয়েছিল। ফেলে typeপৃথক লাইন কমান্ড (ক সাবরুটিন মধ্যে) সংশোধন করা হয়েছে যে যদিও।
নেট কুক

আমার আবেদনের জন্য আমার যা প্রয়োজন ছিল তা ঠিক।
অ্যালান

16

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

আপনি এটি http://www.commandline.co.uk এ খুঁজে পেতে পারেন ।

আউটপুট প্রদর্শন করতে এবং একই সাথে একটি লগ ফাইল তৈরি করতে ব্যাচ ফাইলে ব্যবহৃত হয়, সিনট্যাক্সটি দেখতে এই রকম হয়:

    someprocess | mtee /+ mylogfile.txt

যেখানে / + এর অর্থ আউটপুট সংযোজন।

এটি ধরে নেওয়া হয় যে আপনি অবশ্যই একটি ফোল্ডারে এমটিইটি অনুলিপি করেছেন যা অবশ্যই পাঠ্য পথে রয়েছে।


1
এটি ফাইল বা কনসোলকে আউটপুট দেওয়ার আগেও আউটপুট সম্পূর্ণ হওয়া অবধি অপেক্ষা করা হবে বলে মনে হয়।
মেল্লামোকব

14

আমি স্যাকসন ড্রুসের দুর্দান্ত উত্তরের বিষয়ে কিছুটা প্রসারিত করতে চাই ।

যেমনটি বলা হয়েছে, আপনি বর্তমান ডিরেক্টরিতে এক্সিকিউটেবলের আউটপুটটিকে পুনঃনির্দেশ করতে পারেন:

powershell ".\something.exe | tee test.txt"

তবে এটি কেবল লগইন stdoutকরে test.txt। এটি লগ হয় না stderr

সুস্পষ্ট সমাধান হ'ল এই জাতীয় কিছু ব্যবহার করা:

powershell ".\something.exe 2>&1 | tee test.txt"

তবে, এটি সকলের জন্য কাজ করবে না something.exe। কিছু something.exeএস 2>&1আর্গুমেন্ট হিসাবে ব্যাখ্যা করবে এবং ব্যর্থ হবে। সঠিক সমাধানটি পরিবর্তে কেবলমাত্র এর মতো something.exeএবং এর স্যুইচগুলি এবং যুক্তিগুলির চারপাশে অ্যাডাস্ট্রোফগুলি রাখা :

powershell ".\something.exe --switch1 --switch2 … arg1 arg2 …" 2>&1 | tee test.txt

উইন্ডোজ 10 এ পাইক্ট 5.7 তৈরি করার সময় আমি এটি চেষ্টা করেছি, এটি বেশ আস্তে, কনসোল আউটপুট রিয়েলটাইম নয়, সম্ভবত এটি বাফার হয়েছে? লগ ফাইলটি যদিও সঠিক দেখাচ্ছে
শুমান

3
সব কিছুই পুরোপুরি ভুল। এটি আমার পক্ষে মোটেও কাজ করে না। শেষ আদেশটি 'tee' is not recognized as an internal or external commandসুস্পষ্ট কারণে দেয় । সঙ্গে 2>&1ভিতরে cmd কমান্ড লাইন stderr হবে কোন আউটপুট PowerShell থেকে ত্রুটি ঘটায়।
পাভেল পি

PowerShell টী-বস্তুর cmdlet একটি রেফারেন্স হতে পারে - technet.microsoft.com/en-us/library/ee177014.aspx
Bernd

9

আমি ব্রায়ান রাসমুসেনের সাথে একমত, আনক্সিউটিলস বন্দর এটি করার সহজতম উপায়। ইন ব্যাচ ফাইল তার বিভাগে স্ক্রিপ্টিং পেজ Woude ডের রব ভ্যান ব্যবহার MS-DOS এর এবং সিএমডি কমান্ড সংক্রান্ত তথ্য একটি সম্পদ প্রদান করে। আমি ভেবেছিলাম আপনার সমস্যার একটি নেটিভ সমাধান থাকতে পারে এবং সেখান থেকে প্রায় খোঁড়াখুঁড়ি করার পরে আমি টি.ই.ই.বি.টি. এটি পেয়ে গেলাম , এটি এমএস-ডস ব্যাচের ভাষা বাস্তবায়ন। এটি দেখতে বেশ জটিল দেখতে ব্যাচের ফাইল এবং আমার প্রবণতাটি অব্যক্ত বন্দরটি ব্যবহার করা হবে।


যে tee.bat জিনিস দেখতে সুন্দর লাগছে। আশা করি ওপি এটি পরীক্ষা করে দেখুন।
জয়

10
নোট করুন যে TEE.BAT ব্যবহার করে কমান্ডটি শেষ হওয়ার পরে আউটপুট আসবে, ঠিক যেমন পাশের পোস্ট করা "dir> a.txt | টাইপ a.txt" উদাহরণের মতো।
অ্যাডজম

8

আপনার উইন্ডোজ পরিবেশের পথে সাইগউইন থাকলে আপনি ব্যবহার করতে পারেন:

 dir > a.txt | tail -f a.txt

7
আপনি যদি সাইগউইন ব্যবহার করতে যাচ্ছেন তবে এটি টি নিয়ে আসে।
মিঃ লালমা

7

dir 1>a.txt 2>&1 | type a.txt

এটি STDOUT এবং STDERR উভয়ই পুনর্নির্দেশে সহায়তা করবে


এটি কাজ করে না। আমি জেবিস রান.বাট চালু করার জন্য এটি ব্যবহার করে চেষ্টা করেছি এবং এটি স্টার্টআপের সময় চিকিত্সা করে এবং সার্ভারটি হিমশীতল। এই পদ্ধতিতে সমস্যা আছে ...
jjofofan

@ রাজা আশোক, আমার পক্ষে কাজ করে না আমি পাইথন.এক্সে 1> file.txt 2> & 1
নব্য

4

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

@if (@CodeSection == @Batch) @then


@echo off
setlocal EnableDelayedExpansion

rem APATee.bat: Asynchronous (real time) Tee program, Batch-JScript hybrid version
rem Antonio Perez Ayala

rem The advantage of this program is that the data management is written in Batch code,
rem so any Batch programmer may modify it to fit their own needs.
rem As an example of this feature, CLS command is correctly managed

if "%~1" equ "" (
   echo Duplicate the Stdout output of a command in the screen and a disk file
   echo/
   echo anyCommand ^| APATee teeFile.txt [/A]
   echo/
   echo If /A switch is given, anyCommand output is *appended* to teeFile.txt
   goto :EOF
)

if "%2" equ ":TeeProcess" goto TeeProcess

rem Get the output of CLS command
for /F %%a in ('cls') do set "cls=%%a"

rem If /A switch is not provided, delete the file that receives Tee output
if /I "%~2" neq "/A" if exist %1 del %1

rem Create the semaphore-signal file and start the asynchronous Tee process
echo X > Flag.out
if exist Flag.in del Flag.in
Cscript //nologo //E:JScript "%~F0" | "%~F0" %1 :TeeProcess
del Flag.out
goto :EOF

:TeeProcess
   rem Wait for "Data Available" signal
   if not exist Flag.in goto TeeProcess
   rem Read the line sent by JScript section
   set line=
   set /P line=
   rem Set "Data Read" acknowledgement
   ren Flag.in Flag.out
   rem Check for the standard "End Of piped File" mark
   if "!line!" equ ":_EOF_:" exit /B
   rem Correctly manage CLS command
   if "!line:~0,1!" equ "!cls!" (
      cls
      set "line=!line:~1!"
   )
   rem Duplicate the line in Stdout and the Tee output file
   echo(!line!
   echo(!line!>> %1
goto TeeProcess


@end


// JScript section

var fso = new ActiveXObject("Scripting.FileSystemObject");
// Process all lines of Stdin
while ( ! WScript.Stdin.AtEndOfStream ) {
   // Read the next line from Stdin
   var line = WScript.Stdin.ReadLine();
   // Wait for "Data Read" acknowledgement
   while ( ! fso.FileExists("Flag.out") ) {
      WScript.Sleep(10);
   }
   // Send the line to Batch section
   WScript.Stdout.WriteLine(line);
   // Set "Data Available" signal
   fso.MoveFile("Flag.out", "Flag.in");
}
// Wait for last "Data Read" acknowledgement
while ( ! fso.FileExists("Flag.out") ) {
      WScript.Sleep(10);
}
// Send the standard "End Of piped File" mark
WScript.Stdout.WriteLine(":_EOF_:");
fso.MoveFile("Flag.out", "Flag.in");

কোনওভাবেই এটি স্টডার আউটপুট ক্যাপচার করতে পারে? আমার একটি বিরক্তিকর উদাহরণ রয়েছে যা স্ট্যান্ডার্ড ত্রুটি প্রবাহে সমস্ত কিছু আউটপুট করে (যেমন কোনও ফাইলের আউটপুট দেওয়ার জন্য আপনি সাধারণত যা করতে চানfile.exe 2>output.txt
মার্ক দেবেন

আমি এটি বের করেছিলাম। আপনি file.exe 2>&1|tee.batএখানে পাওয়া হিসাবে এটি ব্যবহার করে এটি করতে পারেন : superuser.com/questions/452763/…
মার্ক দেবেন

4

আমিও একই সমাধানটির সন্ধান করছিলাম, একটু চেষ্টা করার পরে, আমি কমান্ড প্রম্পটে সফলভাবে এটি অর্জন করতে সক্ষম হয়েছি। এখানে আমার সমাধান:

@Echo off
for /f "Delims=" %%a IN (xyz.bat) do (
%%a > _ && type _ && type _ >> log.txt
)
@Echo on

এমনকি এটি কোনও PAUSE কমান্ডও ক্যাপচার করে।


3

অন্যান্য উত্তরের একটির উপর ভিত্তি করে আমি কী ব্যবহার করেছি তার একটি নমুনা এখানে

@echo off
REM SOME CODE
set __ERROR_LOG=c:\errors.txt
REM set __IPADDRESS=x.x.x.x

REM Test a variable
if not defined __IPADDRESS (
     REM Call function with some data and terminate
     call :TEE %DATE%,%TIME%,IP ADDRESS IS NOT DEFINED
     goto :EOF
)

REM If test happens to be successful, TEE out a message and end script.
call :TEE Script Ended Successful
goto :EOF


REM THE TEE FUNCTION
:TEE
for /f "tokens=*" %%Z in ("%*") do (
     >  CON ECHO.%%Z
     >> "%__ERROR_LOG%" ECHO.%%Z
     goto :EOF
)

3

এর মতো কিছু আপনার প্রয়োজন অনুযায়ী করা উচিত?

%DATE%_%TIME% > c:\a.txt & type c:\a.txt
ipconfig >> c:\a.txt & type c:\a.txt
ping localhost >> c:\a.txt & type c:\a.txt
pause

প্রায়শই, তবে এটি একসাথে প্রদর্শিত হয় না - আপনার যদি দীর্ঘ কাজ চালানো হয় তবে আপনি দীর্ঘ সময়ের জন্য কোনও ফল পাবেন না।
জাস্টামার্টিন

3

কনসোলে আউটপুট প্রেরণ করুন, কনসোল লগতে সংযোজন করুন, বর্তমান কমান্ড থেকে আউটপুট মুছুন

dir  >> usb-create.1 && type usb-create.1 >> usb-create.log | type usb-create.1 && del usb-create.1

8
এখানে কি ঘটছে তা ব্যাখ্যা করতে যত্নশীল?
জন ডেমেট্রিউ

2

এটি এমটিএসের পূর্ববর্তী উত্তরের একটি প্রকরণ , তবে এটি কিছু কার্যকারিতা যুক্ত করে যা অন্যদের পক্ষে কার্যকর হতে পারে। আমি যে পদ্ধতিটি ব্যবহার করেছি তা এখানে:

  • একটি কমান্ড একটি ভেরিয়েবল হিসাবে সেট করা হয়, যা পরে পুরো কোড জুড়ে কমান্ড উইন্ডোতে আউটপুট এবং একটি লগ ফাইল যোগ করতে ব্যবহার করে ব্যবহার করা যেতে পারে set _Temp_Msg_Cmd=
    • কমান্ডটি গাজর চরিত্রটি ব্যবহার করে পুনঃনির্দেশ থেকে রক্ষা পেয়েছে ^যাতে কমান্ডগুলি প্রাথমিকভাবে মূল্যায়ন না করে
  • ব্যাচ ফাইলের অনুরূপ একটি ফাইল নাম সহ একটি অস্থায়ী ফাইল তৈরি করা হয় যা ব্যাচ ফাইলটির নাম পেতে কমান্ড লাইন প্যারামিটার এক্সটেনশন সিনট্যাক্স%~n0_temp.txt ব্যবহার করে । %~n0
  • আউটপুট একটি পৃথক লগ ফাইলে সংযুক্ত করা হয় %~n0_log.txt

এখানে আদেশের ক্রমটি রয়েছে:

  1. আউটপুট এবং ত্রুটি বার্তাগুলি অস্থায়ী ফাইলটিতে প্রেরণ করা হয় ^> %~n0_temp.txt 2^>^&1
  2. অস্থায়ী ফাইলের সামগ্রীটি তখন উভয়ই:
    • লগফাইলে সংযুক্ত করা হয়েছে ^& type %~n0_temp.txt ^>^> %~n0_log.txt
    • কমান্ড উইন্ডোতে আউটপুট ^& type %~n0_temp.txt
  3. বার্তা সহ অস্থায়ী ফাইলটি মোছা হয়েছে ^& del /Q /F %~n0_temp.txt

এখানে উদাহরণ:

set _Temp_Msg_Cmd= ^> %~n0_temp.txt 2^>^&1 ^& type %~n0_temp.txt ^>^> %~n0_log.txt ^& type %~n0_temp.txt ^& del /Q /F %~n0_temp.txt

এই পদ্ধতিতে কমান্ডটি সহজেই পরে যুক্ত করা যায় কোনও ব্যাচ ফাইলে পরবর্তী কমান্ডগুলির পরে অনেকগুলি ক্লিনার দেখায়:

echo test message %_Temp_Msg_Cmd%

এটি অন্যান্য কমান্ডের শেষেও যুক্ত হতে পারে। আমি যতদূর বলতে পারি এটি যখন কাজ করবে তখন বার্তাগুলির একাধিক লাইন থাকবে। উদাহরণস্বরূপ, কোনও ত্রুটি বার্তা থাকলে নিম্নলিখিত কমান্ডটি দুটি লাইন আউটপুট দেয়:

net use M: /D /Y %_Temp_Msg_Cmd%


1
@echo on

set startDate=%date%
set startTime=%time%

set /a sth=%startTime:~0,2%
set /a stm=1%startTime:~3,2% - 100
set /a sts=1%startTime:~6,2% - 100


fullprocess.bat > C:\LOGS\%startDate%_%sth%.%stm%.%sts%.LOG | fullprocess.bat

এটি বর্তমান তারিখের সময় দিয়ে একটি লগ ফাইল তৈরি করবে এবং আপনি প্রক্রিয়া চলাকালীন কনসোল লাইন করতে পারেন


11
আপনি কি একই প্রোগ্রামটির সাথে দু'বার ফোন দিচ্ছেন না?
এলকুল

1

কমান্ড আউটপুট একবারে এক লাইন পেতে আমি "ফর" স্টেটমেন্ট সহ ব্যাচ সাব্রোটিন ব্যবহার করি এবং উভয়ই সেই ফাইলটি একটি ফাইলে লিখি এবং কনসোলে আউটপুট দেয়।

@echo off
set logfile=test.log

call :ExecuteAndTee dir C:\Program Files

Exit /B 0

:ExecuteAndTee
setlocal enabledelayedexpansion
echo Executing '%*'
  for /f "delims=" %%a in ('%* 2^>^&1') do (echo.%%a & echo.%%a>>%logfile%)
endlocal
Exit /B 0

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

1

আপনি যদি সিএলআই এ থাকেন তবে কেন আপনি যা চান "ডিও" করতে একটি লুপ ব্যবহার করবেন না:

for /F "delims=" %a in ('dir') do @echo %a && echo %a >> output.txt

লুপগুলির জন্য উইন্ডোজ সিএমডি-তে দুর্দান্ত উত্স: https://ss64.com/nt/for_cmd.html এখানে কীটি সীমানা নির্ধারণ করছে (সীমানা), যা আউটপুট প্রতিটি লাইন বিভক্ত হবে, কিছুই। এইভাবে এটি সাদা-স্পেসের ডিফল্টে ভাঙবে না। % A একটি স্বেচ্ছাসেবী চিঠি, তবে এটি "কর" বিভাগে ব্যবহৃত হয়, ভাল ... প্রতিটি লাইনে অক্ষরগুলি বিশ্লেষণ করে এমন কিছু করুন। এক্ষেত্রে আমরা আমাদের পছন্দের একটি ফাইল তৈরি করতে বা যোগ করতে (>>) তৈরি করতে ২ য় প্রতিধ্বনি কমান্ড কার্যকর করতে এম্পারস্যান্ডস (&&) ব্যবহার করতে পারি। ফাইলটি লেখার ক্ষেত্রে যদি কোনও সমস্যা থাকে তবে ডিও কমান্ডের এই ক্রমটি রাখা নিরাপদ, আমরা কমপক্ষে প্রথমে কনসোলে প্রতিধ্বনি করব। প্রথম প্রতিধ্বনির সামনের উপস্থিত চিহ্ন (@) নিজেই ইকো-কমান্ডটি দেখানো থেকে কনসোলকে দমন করে এবং এর পরিবর্তে কেবল কমান্ডের ফলাফল প্রদর্শন করে যা% a তে অক্ষর প্রদর্শন করবে display অন্যথায় আপনি দেখতে পাবেন:

ড্রাইভের প্রতিধ্বনি ভলিউম [এক্স] ড্রাইভে উইন্ডোজ
ভলিউম [x] হ'ল উইন্ডোজ

আপডেট: / এফ ফাঁকা রেখাগুলি এড়িয়ে যায় এবং কেবল ঠিক করা হ'ল প্রতিটি লাইনে একটি অক্ষর যুক্ত আউটপুটকে প্রাক-ফিল্টার করা (সম্ভবত কমান্ড সন্ধানের মাধ্যমে লাইন-সংখ্যা সহ)। সিএলআই-এ এটি সমাধান করা দ্রুত বা সুন্দর নয়। এছাড়াও, আমি এসটিডিআরআর অন্তর্ভুক্ত করি নি, সুতরাং এখানে ত্রুটিগুলি ক্যাপচার করার জন্যও রয়েছে:

for /F "delims=" %a in ('dir 2^>^&1') do @echo %a & echo %a >> output.txt

পুনর্নির্দেশ ত্রুটি বার্তা

ক্যারেটগুলি (^) তাদের পরে প্রতীকগুলি এড়ানোর জন্য রয়েছে, কারণ কমান্ডটি এমন একটি স্ট্রিং যার ব্যাখ্যা করা হচ্ছে, এটি সরাসরি কমান্ড-লাইনে প্রবেশ করে বলার বিপরীতে।


1

ইউনিক্সের মতোই।

dir | tee a.txt

উইন্ডোজ এক্সপিতে কাজ করে, এটি mksntইনস্টল করা প্রয়োজন ।

এটি প্রম্পটে প্রদর্শিত হবে পাশাপাশি ফাইলটিতে সংযোজন হবে।


0

আপনি যদি সত্যিই স্ক্রিনে কিছু দেখতে চান তবে নিম্নলিখিতগুলি সহায়তা করে - এমনকি ব্যাচ ফাইলটি কোনও ফাইলে পুনঃনির্দেশ করা হলেও। CON ডিভাইসটি হয়ত কোনও ফাইলে পুনঃনির্দেশিত হলে ব্যবহৃত হয়

উদাহরণ:

ECHO first line on normal stdout. maybe redirected
ECHO second line on normal stdout again. maybe redirected
ECHO third line is to ask the user. not redirected  >CON
ECHO fourth line on normal stdout again. maybe redirected

ভাল পুনঃনির্দেশের বর্ণনাটি দেখুন: http://www.p-dd.com/chapter7-page14.html


0

আমি কীভাবে কোনও ফাইলে আউটপুট প্রদর্শিত এবং পুনর্নির্দেশ করব do ধরুন আমি যদি ডস কমান্ড, dir> test.txt ব্যবহার করি তবে এই কমান্ডটি ফলাফল প্রদর্শন ছাড়াই আউটপুটটিকে test.txt ফাইলটিতে পুনর্নির্দেশ করবে। কীভাবে কমান্ড লিখতে হবে এবং ইউএসএক্স / লিনাক্স-এ নয়, ডস অর্থাৎ উইন্ডোজ কমান্ড প্রম্পট ব্যবহার করে কোনও ফাইলে আউটপুট পুনর্নির্দেশ করতে এবং আউটপুটটি পুনর্নির্দেশ করতে।

আপনি এই আদেশগুলি বিটারস্ক্রিপ্টিংয়ে ( http://www.biterscriptting.com ) দরকারী দেখতে পাবেন।

var str output
lf > $output
echo $output                            # Will show output on screen.
echo $output > "test.txt"               # Will write output to file test.txt.
system start "test.txt"                 # Will open file test.txt for viewing/editing.

0

এটি রিয়েল টাইমে কাজ করে তবে এটি কৃপণও হয় এবং কর্মক্ষমতাটি ধীর হয়। ভালভাবে পরীক্ষাও করা হয়নি:

@echo off
cls
SET MYCOMMAND=dir /B
ECHO File called 'test.bat' > out.txt
for /f "usebackq delims=" %%I in (`%MYCOMMAND%`) do (
  ECHO %%I
  ECHO %%I >> out.txt
) 
pause

6
না, এটি আসল সময় নয়, এটি অপেক্ষা করে %MYCOMMAND% শেষ এবং এটি অনেক ক্ষেত্রে ব্যর্থ হয়। এটা তোলে খালি লাইন অগ্রাহ্য, লাইন শুরু সঙ্গে ;মত কন্টেন্ট সঙ্গে ব্যর্থ <space>/<TAB>, ON, OFFবা /?। তবে বাকিগুলি মাঝে মাঝে কাজ করতে পারে :-)
jeb

0

বিকল্প হিসাবে আপনার প্রোগ্রামের মধ্যে stdout stedout টি করতে হয়:

জাভাতে:

System.setOut(new PrintStream(new TeeOutputStream(System.out, System.err)));

তারপরে, আপনার ডস ব্যাচফাইলে: java program > log.txt

Stdout লগফাইলে যাবে এবং স্টাডার (একই ডেটা) কনসোলে প্রদর্শিত হবে।


0

আমি আমার বেশিরভাগ মেশিনে পার্ল ইনস্টল করি তাই পার্ল: tee.pl ব্যবহার করে একটি উত্তর

my $file = shift || "tee.dat";
open $output, ">", $file or die "unable to open $file as output: $!";
while(<STDIN>)
{
    print $_;
    print $output $_;
}
close $output;

dir | perl tee.pl or dir | perl tee.pl dir.bat

অশোধিত এবং অরক্ষিত


0

আর একটি ভিন্নতা হ'ল পাইপকে বিভক্ত করা এবং তারপরে আপনার পছন্দ মতো আউটপুটটিকে পুনরায় নির্দেশ করুন।

    @echo off
    for /f "tokens=1,* delims=:" %%P in ('findstr /n "^"') do (
      echo(%%Q
      echo(%%Q>&3
    )
    @exit/b %errorlevel%

উপরের একটি .bat ফাইলে সংরক্ষণ করুন। এটি ফাইল স্ট্রিম 1 এ পাঠ্য আউটপুট বিভক্ত করে ফাইল স্ট্রিম 3 এও প্রবাহিত করে, যা আপনি প্রয়োজন হিসাবে পুনঃনির্দেশ করতে পারেন। নীচে আমার উদাহরণগুলিতে, আমি উপরের স্ক্রিপ্ট splitPipe.bat কল করেছি ...

    dir | splitPipe.bat  1>con  2>&1  3>my_stdout.log

    splitPipe.bat 2>nul < somefile.txt

-1
  1. https://cygwin.com/install
  2. "সেটআপ-x86_.exe" এর জন্য লিঙ্কটি ক্লিক করুন
  3. ইনস্টলারটি চালান
  4. ২ য় ২ য় পৃষ্ঠায়, ডাউনলোড করতে একটি "আয়না" চয়ন করুন (আমি একটি .edu ডোমেনের সন্ধান করেছি)
  5. আমি স্ট্যান্ডার্ড অপশন থেকে ঠিক আছে
  6. সাইগউইন দ্রুত ইনস্টল শেষ করেছেন
  7. খোলা সেমিডি
  8. টাইপ করুন c:\cygwin64\bin\script.exeএবং প্রবেশ করুন
  9. টাইপ করুন cmdএবং প্রবেশ করুন
  10. আপনার প্রোগ্রাম চালান
  11. টাইপ করুন exitএবং প্রবেশ করুন (সাইগউইনের সেন্টিমিডি.এক্সে প্রস্থান করুন)
  12. টাইপ করুন exitএবং প্রবেশ করুন (সাইগউইনের স্ক্রিপ্ট। এক্সে প্রস্থান করুন)
  13. "টাইপস্ক্রিপ্ট" নামক পাঠ্য ফাইলে আপনার প্রোগ্রামটির স্ক্রিন আউটপুট দেখুন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.