কোনও স্ক্রিপ্টের কাজটি যদি শিডিয়ুলার দ্বারা চালিত হয় তবে আমি কীভাবে ক্যাপচার করব?


98

উইন্ডোজ সার্ভার ২০০৮ ব্যবহার করে, আমি উইন্ডো টাস্ক শিডিয়ুলারের সাহায্যে চালিত স্ক্রিপ্টের আউটপুট ক্যাপচার করব?

আমি বরং একটি দীর্ঘ কাস্টম মুদ্রণ ব্যাচ-স্ক্রিপ্ট পরীক্ষা করছি, এবং ডিবাগিংয়ের উদ্দেশ্যে, আমি প্রতি রাতে এটি থেকে আউটপুটটি দেখতে চাই।


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

উত্তর:


87

টাস্ক শিডিয়ুলারে কমান্ড স্ট্রিং হিসাবে এটি চেষ্টা করুন:

cmd /c yourscript.cmd > logall.txt

4
চমৎকার, কোনও মোড়কের দরকার নেই, দুর্দান্ত কাজ করে এবং চাইল্ড পাওয়ারশেল স্ক্রিপ্ট থেকে আউটপুটও লগ করে দেয় যা টাস্ক-শিডিয়ুলার-ট্রিগারযুক্ত ব্যাট / সেন্টিমিডি ধন্যবাদ বলা হয়!
জোনসোম পুনরায় ইনস্টল করুন মনিকা

9
অতিরিক্তভাবে, cmd /c "path with spaces/command.cmd > file.txt"আপনার যদি ফাঁকা জায়গা থাকে তবে ব্যবহার করুন । 2>&1থেকে ইভান এর উত্তর এছাড়াও কোট ভিতরে চলে যায়।
দিনাই

4
আমার কাজ করতে ডাবল কোট ব্যবহার করা দরকার: stackoverflow.com/a/6378038/1747983 cmd /c ""C:\temp\My test dir\something 123\myTool.exe" > Tilo_log.txt 2>&1"
টিলো

4
আমি জানি 5 বছর কেটে গেছে, তবে কাজটি সম্পাদনের ন্যূনতম উপায় হওয়ার জন্য গ্রহণযোগ্য উত্তরে এটি পরিবর্তন করা।
মেছাফ্ল্যাশ

টাস্কটি চালানোর সময় আমার কাছে একটি কমান্ড উইন্ডো প্রদর্শিত হবে। কীভাবে তা প্রতিরোধ করবেন?
ক্রিস

59

স্ট্যাডার সহ (যেখানে বেশিরভাগ ত্রুটি যায়):

cmd /c yourscript.cmd > logall.txt 2>&1

56

@ ব্যবহারকারী2744787 এর উত্তর পরিপূরক করতে, cmdএকটি তফসিল টাস্কে যুক্তি দিয়ে কীভাবে ব্যবহার করবেন তা দেখানোর জন্য এখানে একটি স্ক্রিনশট রয়েছে :

লগফাইলে নির্ধারিত টাস্কটি সিএমডি আউটপুট

প্রোগ্রাম / স্ক্রিপ্ট: cmd

যুক্তি যুক্ত করুন: /c run_with_default_port.bat > IMQuantWebServices.log


4
মনে হচ্ছে আপনি একটি নির্ধারিত কাজের মাধ্যমে কোনও পরিষেবা শুরু করছেন। এটি যদি ব্যাকগ্রাউন্ডে অবিচ্ছিন্নভাবে চলমান একটি পরিষেবা হওয়া উচিত তবে এনএসএসএমকে বিকল্প হিসাবে দেখুন। এটা একটা জানালা পরিষেবা এবং ব্যর্থতা ইত্যাদি পর পুনরায় চালু করার হ্যান্ডলগুলি হিসাবে কোনো কমান্ড সঞ্চালিত
leemes

43

>>বরং এটি প্রতিটি সময় মুছে যাওয়ার চেয়ে লগ ফাইল যোগ হবে। 2>&1এছাড়াও আপনার লগ ফাইলে ত্রুটি পাঠাবে।

cmd /c YourProgram.exe >> log.txt 2>&1

40

আপনার এমন একটি ডিবাগ.কম থাকতে পারে যা আপনার স্ক্রিপ্ট.এমডি কল করে

yourscript.cmd > logall.txt

আপনি thycript.cmd এর পরিবর্তে debug.cmd সময়সূচী করুন


11

cmd.exeআপনার নির্ধারিত টাস্কের আউটপুট লগ করতে একটি টাইমস্ট্যাম্পড ফাইলের নাম তৈরি করতে কমান্ড প্রসেসর ব্যবহার করুন

এখানে অন্যদের দ্বারা উত্তরগুলি তৈরি করার জন্য, এটি এমন হতে পারে যে আপনি কোনও আউটপুট ফাইল তৈরি করতে চান যাতে ফাইলটির নামে তারিখ এবং / অথবা সময় এম্বেড থাকে। আপনার জন্য এটি করতে আপনি cmd.exeকমান্ড প্রসেসর ব্যবহার করতে পারেন ।

দ্রষ্টব্য: এই কৌশলটি অভ্যন্তরীণ উইন্ডোজ এনভায়রনমেন্ট ভেরিয়েবলগুলির স্ট্রিং আউটপুট নেয় এবং অক্ষরের অবস্থানের উপর ভিত্তি করে এগুলি টুকরো টুকরো করে। এর কারণে, নীচের উদাহরণগুলিতে সরবরাহ করা সঠিক মানগুলি আপনি যে উইন্ডোজ ব্যবহার করেন সে অঞ্চলের জন্য সঠিক নাও হতে পারে। এছাড়াও, কিছু আঞ্চলিক সেটিংস সহ, তারিখ বা সময়ের কিছু উপাদান নির্মিত ফাইলের নামের সাথে 10 এর চেয়ে কম মান নির্ধারণ করতে পারে এই সমস্যাটি প্রশমিত করতে আপনার ফাইলের নামটি উদ্ধৃতি সহ ঘিরে ফেলুন যাতে ফাইলের কোনও অনিচ্ছাকৃত স্পেস থাকে নাম আপনি যে কমান্ড-লাইনটি তৈরি করছেন তা ভঙ্গ করবে না। পরীক্ষা এবং আপনার পরিস্থিতির জন্য সবচেয়ে ভাল কাজ করে তা সন্ধান করুন।

এর PowerShellচেয়ে বেশি ক্ষমতাবান সচেতন হন cmd.exe। এটি আরও শক্তিশালী হওয়ার একটি উপায় হ'ল এটি বিভিন্ন উইন্ডোজ অঞ্চলের সাথে কাজ করতে পারে। তবে এই উত্তরটি এই সমস্যাটি ব্যবহার করে সমাধান করার বিষয়ে cmd.exeনয় PowerShell, তাই আমরা চালিয়ে যাচ্ছি।

ব্যবহার cmd.exe

আপনি এটির তারিখ এবং সময় বিভিন্ন উপাদানের অ্যাক্সেস করতে পারেন slicing অভ্যন্তরীণ বিভিন্ন পরিবেশের %date%এবং %time%, নিম্নরূপ (আবার, সঠিক slicing মান অঞ্চল উইন্ডোজ কনফিগার উপর নির্ভরশীল):

  • বছর (4 ডিজিট): %date:~10,4%
  • মাস (2 ডিজিট): %date:~4,2%
  • দিন (2 ডিজিট): %date:~7,2%
  • ঘন্টা (2 ডিজিট): %time:~0,2%
  • মিনিট (2 ডিজিট): %time:~3,2%
  • দ্বিতীয় (2 সংখ্যা): %time:~6,2%

মনে করুন আপনি এই লগ / তারিখের বিন্যাসটি ব্যবহার করে আপনার লগ ফাইলটির নামকরণ করতে চান: " Log_[yyyyMMdd]_[hhmmss].txt"। আপনি নিম্নলিখিতটি ব্যবহার করবেন:

Log_%date:~10,4%%date:~4,2%%date:~7,2%_%time:~0,2%%time:~3,2%%time:~6,2%.txt

এটি পরীক্ষা করতে, নিম্নলিখিত কমান্ড লাইনটি চালান:

cmd.exe /c echo "Log_%date:~10,4%%date:~4,2%%date:~7,2%_%time:~0,2%%time:~3,2%%time:~6,2%.txt"

এটি সব একসাথে রেখে পুনর্নির্দেশ করতে উভয় stdoutএবং stderrবর্তমান তারিখ এবং সময় নামে একটি লগ ফাইলে আপনার স্ক্রিপ্টটি থেকে ব্যবহার আপনার কমান্ড লাইন হিসাবে নিম্নলিখিত ব্যবহার করতে পারেন:

cmd /c YourProgram.cmd > "Log_%date:~10,4%%date:~4,2%%date:~7,2%_%time:~0,2%%time:~3,2%%time:~6,2%.txt" 2>&1

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

আমার ক্ষেত্রে, যদি বর্তমান তারিখ / সময় 10/05/2017 9:05:34 পূর্বাহ্ন হয়, উপরের কমান্ড-লাইনটি নিম্নলিখিতটি তৈরি করতে পারে:

cmd /c YourProgram.cmd > "Log_20171005_ 90534.txt" 2>&1

10 এর চেয়ে কম ঘন্টাগুলিতে কোনও নেতৃস্থানীয় শূন্য নেই: / কীভাবে ঠিক করবেন তা নিশ্চিত নন তবে কমপক্ষে ফাইলের নামটি উদ্ধৃত করুন
user25064

9

আপনি যে লাইনে আউটপুট করতে চান সেগুলিতে আপনি লগ ফাইলটিতে লিখতে পারেন:

@echo off
echo Debugging started >C:\logfile.txt
echo More stuff
echo Debugging stuff >>C:\logfile.txt
echo Hope this helps! >>C:\logfile.txt

আপনি যদি কোনও কিছুর মাধ্যমে ট্রল করতে না চান তবে কোন আদেশগুলি আউটপুট দিতে হবে তা চয়ন করতে পারেন, আপনাকে যা দেখতে হবে তা পান। >ইচ্ছা আউটপুট নির্দিষ্ট ফাইলে (ফাইল তৈরি হলে বিদ্যমান নয় এবং এটি মুছে যদি এটা না)। >>ফাইল নিদিষ্ট (ফাইল তৈরি হলে বিদ্যমান নয় কিন্তু বিষয়বস্তু সেটা না হলে করতে সংযোজন) এর সংযোজন হবে।


2

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

cmd /c ""C:\Program Files (x86)\program.exe" -param fooo >> "c:\dir space\Log_%date:~10,4%%date:~4,2%%date:~7,2%_%time:~0,2%%time:~3,2%%time:~6,2%.txt" 2>&1"

মূল অংশটি হ'ল পুরো অংশটিকে পিছনে cmd /cডাবল করা এবং এর অভ্যন্তরে এটি স্বাভাবিক হিসাবে ডাবল উদ্ধৃতি ব্যবহার করে। এছাড়াও নোট করুন যে তারিখটি লোকাল নির্ভর, এই উদাহরণটি মার্কিন লোকাল ব্যবহার করে কাজ করে।


0

এই স্নিপেট ডেট স্ট্রিংটি তৈরি করতে wmic.exe ব্যবহার করে। এটি স্থানীয় সেটিংস দ্বারা জঞ্জাল নয়

rem DATE as YYYY-MM-DD via WMIC.EXE
for /f "tokens=2 delims==" %%I in ('wmic os get localdatetime /format:list') do set datetime=%%I
set RDATE=%datetime:~0,4%-%datetime:~4,2%-%datetime:~6,2% 
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.