"যথাযথ" প্রস্থান কোডটি ফেরত পেতে রবকোপি পাচ্ছেন?


121

সাফল্য বা ব্যর্থতা নির্দেশ করে এমন একটি প্রস্থান কোড দিয়ে রবকোপাইকে প্রস্থান করার জন্য জিজ্ঞাসা করা কি সম্ভব?

আমি আমার টিমসিটি বিল্ড কনফিগারেশনের অংশ হিসাবে রবোকপি ব্যবহার করছি এবং কেবলমাত্র রবোকপি থেকে প্রস্থান কোডটি নিঃশব্দ করার জন্য একটি পদক্ষেপ যুক্ত করতে আমার কাছে বোকামি মনে হচ্ছে।

মূলত, আমি এটি যুক্ত করেছি:

EXIT /B 0

যে স্ক্রিপ্টটি চলছে তা।

যাইহোক, অবশ্যই এটির কোনও বাস্তব সমস্যা মাসব্যাক করে যা রোবকপি ফিরে আসবে।

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

বা, যদি আমার কাছে এটি না থাকতে পারে, তবে কি ব্যাচের কমান্ডগুলির একটি সহজ ক্রম রয়েছে যা রবকোপি'র বিট-মাস্কটিকে অনুরূপ মান হিসাবে অনুবাদ করবে?


2
এছাড়া উল্লেখ করা উচিত যে প্রথম 8 প্রস্থান কোড (0-7) দৃশ্যত যুক্তরাষ্ট্র ত্রুটি নয়: stackoverflow.com/questions/16533843/psake-and-robocopy-failing
longda

উত্তর:


47

এখানে হিসাবে , রবোকপির নীচে থাকা প্রস্থান কোড বিট রয়েছে যা প্রস্থান কোড তৈরি করে:

0 × 10 গুরুতর ত্রুটি। রবোকপি কোনও ফাইল অনুলিপি করে নি। উত্স বা গন্তব্য ডিরেক্টরিতে অপর্যাপ্ত সুযোগ সুবিধার কারণে এটি হয় ব্যবহারের ত্রুটি বা ত্রুটি।

0 × 08 কিছু ফাইল বা ডিরেক্টরি অনুলিপি করা যায়নি (অনুলিপি ত্রুটি ঘটেছে এবং পুনরায় চেষ্টা সীমা অতিক্রম করেছে)। এই ত্রুটিগুলি আরও পরীক্ষা করে দেখুন।

0 × 04 কিছু মেলানো ফাইল বা ডিরেক্টরি সনাক্ত করা হয়েছিল। আউটপুট লগ পরীক্ষা করুন। বাড়ির রক্ষণাবেক্ষণ সম্ভবত প্রয়োজন।

0 × 02 কিছু অতিরিক্ত ফাইল বা ডিরেক্টরি সনাক্ত করা হয়েছিল। আউটপুট লগ পরীক্ষা করুন। কিছু বাড়ির রক্ষার প্রয়োজন হতে পারে।

0 × 01 এক বা একাধিক ফাইল সাফল্যের সাথে অনুলিপি করা হয়েছিল (এটি নতুন ফাইল এসেছে)।

0 × 00 কোনও ত্রুটি ঘটেনি, এবং কোনও অনুলিপি করা হয়নি। উত্স এবং গন্তব্য ডিরেক্টরি গাছগুলি সম্পূর্ণ সিঙ্ক্রোনাইজ করা।

EXIT /B 0যখন / অন্য বিবৃতিটি যোগ করুন যে যখন ফিরতি মান 1 বা সম্ভবত 0 হয় এবং EXIT /B 1অন্যথায়। এমনকি ফাইলগুলি অনুলিপি করা হতে পারে, এমন কিছু ভুল আছে যার জন্য ম্যানুয়াল হস্তক্ষেপের প্রয়োজন হবে।


108

টেকনেট এই ওয়ান- লাইনারটিকে প্রস্থান কোডটিকে আরও traditionalতিহ্যগত প্রস্থান কোডে রূপান্তর করার পরামর্শ দেয় :

(robocopy c:\dirA c:\dirB *.*) ^& IF %ERRORLEVEL% LEQ 1 exit 0

বা এটি প্রস্থান কোডটি সম্পূর্ণ উপেক্ষা করার জন্য (যেমন এটি ব্যর্থ হয়েছে বা সফল হয়েছে সেদিকে খেয়াল রাখবেন না):

(robocopy c:\dirA c:\dirB *.*) ^& exit 0

তবে উপরের দুটি কমান্ডই একটি স্ক্রিপ্ট সমাপ্ত করবে যা রোবোকপি সম্পাদন করার পরে exec এটি বিশেষত সিআই বিল্ডসের জন্য একটি সমস্যা। আপনি যদি এই পরিস্থিতিতে রোবকপি ব্যবহার করতে চান তবে অপ্রাসঙ্গিক প্রস্থান কোডগুলির জন্য আপনাকে ত্রুটি কোডটি ম্যানুয়ালি সেট করতে হবে। নীচে, 8 এর নীচের সমস্ত ত্রুটি কোডগুলি কোনওক্রমে কোনও ত্রুটিতে পুনর্লিখন হবে এবং সম্ভব হলে স্ক্রিপ্টটি চালিয়ে যাওয়া হবে।

(robocopy c:\dirA c:\dirB *.*) ^& IF %ERRORLEVEL% LSS 8 SET ERRORLEVEL = 0

8
খুশী হলাম। রোবোকপি কমান্ডের চারপাশে বন্ধনী প্রয়োজন, তবে একটি মোড়ক স্ক্রিপ্ট ব্যবহার করে আমাকে বাঁচিয়েছে।
TheCodeKing

আমি এই ওয়ান-লাইনারকে টিমসিটিতে কমান্ড লাইন বিল্ড স্টেপ হিসাবে কাজ করতে পারি না। আমাকে এটি একটি আলাদা লাইনে স্থানান্তরিত করতে হয়েছিল। আমি প্রস্থান কমান্ডে / বি যুক্তিও যুক্ত করেছি, যদিও আমি মনে করি না এটি প্রয়োজনীয় ছিল।
মাইকওয়াইট

টিমসিটি মোতায়েনের জন্য (এবং কেবলমাত্র টিমসিটি নয়) এটি টাইপ করা কার্যকর: IF %ERRORLEVEL% LEQ 3 set errorlevel=0এবং পরবর্তী লাইনে: if %errorlevel% neq 0 exit /b %errorlevel%(যদি ব্যাচ ফাইলটিতে বেশ কয়েকটি ক্রিয়াকলাপ থাকে তবে কেবল রোবোকপি নয়), কারণ ওকে কোডগুলি কম থাকে তবে 3. এসএস .com/৪ /nt/robocopy -exit.html
ডওকাকাও

6
টিমসিটিতে, আপনার ERRORLEVELডাবল %% এর সাথে পালানো উচিত : %% ERRORLEVEL %%% অন্যথায়, এটিকে টিমসিটি বিল্ড প্যারামিটার হিসাবে বিবেচনা করে।
ইয়ান স্ক্লিয়েরেঙ্কো

2
কি করে ^&? এস এস says64 বলেছে পালাচ্ছে কিন্তু আমার কাছে মনে হচ্ছে এটি পালানো উচিত নয়?
mlhDev

19

এটি জেনকিন্স থেকে চালানোর জন্য ( )এবং উভয়ই প্রয়োজন /B। আপনি যদি ত্রুটি স্তরটি 1,2,3,4 উপেক্ষা করতে চান:

(robocopy XXX YYY) ^& IF %ERRORLEVEL% LEQ 4 exit /B 0

2
এলএসএস 8 আরও ভাল হতে পারে :)
ইভান

13

এই পৃষ্ঠাটি থেকে আপনি আপনার ব্যাচ ফাইলে এমন একটি বিভাগ যুক্ত করতে পারেন যা ত্রুটিগুলি আউটপুট এবং কোডের বিভিন্ন বিভাগ চালানোর জন্য ত্রুটি কোডের তালিকা ব্যবহার করে:

if %ERRORLEVEL% EQU 16 echo ***FATAL ERROR*** & goto end
if %ERRORLEVEL% EQU 15 echo OKCOPY + FAIL + MISMATCHES + XTRA & goto end
if %ERRORLEVEL% EQU 14 echo FAIL + MISMATCHES + XTRA & goto end
if %ERRORLEVEL% EQU 13 echo OKCOPY + FAIL + MISMATCHES & goto end
if %ERRORLEVEL% EQU 12 echo FAIL + MISMATCHES& goto end
if %ERRORLEVEL% EQU 11 echo OKCOPY + FAIL + XTRA & goto end
if %ERRORLEVEL% EQU 10 echo FAIL + XTRA & goto end
if %ERRORLEVEL% EQU 9 echo OKCOPY + FAIL & goto end
if %ERRORLEVEL% EQU 8 echo FAIL & goto end
if %ERRORLEVEL% EQU 7 echo OKCOPY + MISMATCHES + XTRA & goto end
if %ERRORLEVEL% EQU 6 echo MISMATCHES + XTRA & goto end
if %ERRORLEVEL% EQU 5 echo OKCOPY + MISMATCHES & goto end
if %ERRORLEVEL% EQU 4 echo MISMATCHES & goto end
if %ERRORLEVEL% EQU 3 echo OKCOPY + XTRA & goto end
if %ERRORLEVEL% EQU 2 echo XTRA & goto end
if %ERRORLEVEL% EQU 1 echo OKCOPY & goto end
if %ERRORLEVEL% EQU 0 echo No Change & goto end


:END
REM END OF BATCH FILE

8

আমি এটি ব্যবহার:

robocopy .....
call :REPORT_ERRORLEVEL
goto :EOF

:REPORT_ERRORLEVEL
echo.
if ERRORLEVEL 16 echo ***FATAL ERROR*** & goto :EOF
if ERRORLEVEL 8 echo **FAILED COPIES** & goto :EOF
if ERRORLEVEL 4 echo *MISMATCHES* & goto :EOF
if ERRORLEVEL 2 echo EXTRA FILES & goto :EOF
if ERRORLEVEL 1 echo Copy successful & goto :EOF
if ERRORLEVEL 0 echo –no change– & goto :EOF

8

উপরের কিছু পোস্টার বিট মাস্কের সূক্ষ্মতা মিস করেছে। বিশেষত প্যারাড্রয়েড মিস করেছে যে ত্রুটিযুক্ত 3 একটি সম্পূর্ণ সফল অনুলিপি নির্দেশ করে।

বিট 0x01 নোট করুন যদি সেটটি নির্দেশ করে যে কিছু ব্যর্থতা থাকলেও কিছু ফাইল অনুলিপি করা হয়েছে। সুতরাং যে কোনও বিজোড় সংখ্যাযুক্ত ত্রুটি সর্বদা ইঙ্গিত দেয় যে কমপক্ষে কিছু ফাইল অনুলিপি করা হয়েছে। আরও মনে রাখবেন যে বিট 0x02 কেবলমাত্র ইঙ্গিত দেয় যে গন্তব্যে এমন ফাইল রয়েছে যা উত্সটিতে উপস্থিত নেই। এটি ঘটবে যদি / ই স্যুইচ ব্যবহার করা হয় এবং পূর্ববর্তী অনুলিপি নেওয়া হওয়ার পর থেকে উত্স থেকে ফাইলগুলি মুছে ফেলা হয়। যদি / এমআইআর স্যুইচ ব্যবহার করা হয় তবে এটি হওয়া উচিত নয় কারণ এতে উত্সটি আয়না করতে গন্তব্যস্থলে ফাইল মুছে ফেলা উচিত (তবে আমি এটি পরীক্ষা করে দেখিনি)।

সুতরাং ত্রুটিযুক্ত 1 এবং 3 উভয়ই ত্রুটিযুক্ত ফাইলগুলির সফল অনুলিপি নির্দেশ করে। এছাড়াও 0 এবং 2 এর ত্রুটিযুক্ত ইঙ্গিত দেয় যে গন্তব্যটি আপ টু ডেট এবং কোনও ফাইল অনুলিপি করা হয়নি।

এর মূল্যের জন্য আমি আমার সাধারণ ব্যাকআপের জন্য নিম্নলিখিতগুলি নিয়ে এসেছি:

যদি ত্রুটিযুক্ত 16 ইকো ব্যাকআপ ব্যর্থ হয় - উপরের কারণটি দেখুন এবং শেষ হয়ে গেল o

যদি ত্রুটিযুক্ত 8 প্রতিধ্বনি সব ঠিকঠাক না হয় - ব্যাকআপ অসম্পূর্ণ & সম্পন্ন হয়ে গেল

যদি ত্রুটিমুক্ত 4 প্রতিধ্বনি সব ঠিকঠাক না হয় - কিছু ফাইল মেলেনি এবং হয়ে গেছে

যদি ত্রুটিযুক্ত 3 ইকো ব্যাকআপ সফলভাবে সম্পন্ন হয় & সম্পন্ন হয়ে যায়

যদি ইতিমধ্যে ত্রুটিযুক্ত 2 ইকো ব্যাকআপ আপ টু ডেট থাকে - কোনও ফাইল অনুলিপি করা হয়নি এবং শেষ হয়েছে

যদি ত্রুটিযুক্ত 1 ইকো ব্যাকআপ সফলভাবে সম্পন্ন হয় & সম্পন্ন হয়ে যায়

যদি ইতিমধ্যে ত্রুটিযুক্ত 0 ইকো ব্যাকআপ আপ টু ডেট থাকে - কোনও ফাইল অনুলিপি করা হয়নি এবং শেষ হয়েছে

আমি 'অতিরিক্ত' ফাইলগুলি নিয়ে বিরক্ত না করা বেছে নিয়েছি।

'মেলে না' ত্রুটিটি কী তা আমার কোনও ধারণা নেই কারণ এটি এখনও ঘটেনি তবে আমি কেবল ক্ষেত্রে এটির জন্য অনুমতি দিয়েছি।


6

আমি অতিথি জন এর সাথে একমত - আপনি যদি ফলাফলটি 8 বা তার বেশি হয় তবে আপনি কেবলমাত্র একটি ত্রুটি নির্দেশ করতে চান।

সুতরাং একটি এসকিউএল এজেন্ট কাজের জন্য উপযুক্ত 0 (সাফল্য) বা 1 (ব্যর্থ) ফলাফলের একটি রোবোকপির ফলাফল ম্যাপ করতে, আমি এটি ব্যবহার করছি:

  IF %ERRORLEVEL% LSS 8 EXIT /B 0
  EXIT /B 1

2

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

(robocopy  .\Artifacts\Fitnesse %FitDestinationFolder% /MIR)
IF %%ERRORLEVEL%% LEQ 3 set errorlevel=0
IF %%ERRORLEVEL%% NEQ 0 EXIT /b %%ERRORLEVEL%%
EXIT 0

1
আমি আমার পোষ্ট-বিল্ড ইভেন্টে একটি অনুরূপ রোবোকপি স্ক্রিপ্ট ব্যবহার করছি .. সুতরাং নির্ভরশীল লাইব্রেরিগুলি গ্রাসকারী। এক্স অ্যাপ্লিকেশন প্রকল্পে অনুলিপি করা হয় - যা কেবলমাত্র ইনভার্সন-অফ-নিয়ন্ত্রণ / পরিষেবা লোকেটার প্যাটার্নের মাধ্যমে উল্লেখ করা হয়।
bkwdesign

1

গিটল্যাব সিআই এর আগে এটির আগে সিএমডি / সি যোগ করুন।

cmd /c (robocopy c:\dirA c:\dirB *.*) ^& IF %ERRORLEVEL% LEQ 1 exit 0

অন্যথায় এক্সিট 0 সে সময়ে সিআই পাইপলাইনটি বন্ধ করে দেয়।


0

ভিজ্যুয়াল স্টুডিও 2010+ থেকে অন্য ফোল্ডারে কীভাবে সমাপ্ত ফাইলগুলি অনুলিপি করা যায় তার একটি উদাহরণ যেমন ভিজ্যুয়াল স্টুডিও একটি ভাল অনুলিপিটিতে 0 নয় 1 আশা করে।

cmd /c (robocopy $(TargetDir) X:\$(TargetName) $(TargetFileName) $(TargetFileName).config *.dll *.json *.xml /xx) ^& IF %ERRORLEVEL% LEQ 1 exit 0 
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.