سؤال

لا يمكنني أن أجد طريقة على سطر الأوامر لأقول "انسخ جميع الملفات من الدليل أ إلى الدليل ب ، ولكن إذا كان الملف موجودًا بالفعل في الدليل ب ، فلا تكتبه ، بغض النظر عن الملف الأحدث ، ولا تحركني ".

لقد مررت من خلال النسخ ، Move ، Xcopy & Robocopy ، والأقرب الذي يمكنني الحصول عليه هو أنه يمكنك إخبار Robocopy "نسخ A إلى B ، ولكن لا تكتب ملفات أحدث مع ملفات أقدم" ، لكن هذا لا يعمل بالنسبة لي . لقد نظرت إلى XXCOPY ، لكنني تجاهلته ، حيث لا أريد أن أحصل على تبعية لجهة خارجية على حدث مرئي بعد البناء الذي سيتطلب من مستخدمي SVN الآخرين تثبيت هذه الأداة من أجل القيام بالإنشاء.

أرغب في إضافة سطر أوامر إلى حدث ما بعد البناء في Visual Studio 2010 بحيث يتم إنشاء الملفات التي يتم إنشاؤها من T4 قوالب جديدة EF يتم توزيع كائنات النموذج على مجلدات المشروع التي تنتمي إليها ، ولكن تم تجديد الملفات للكائنات الموجودة لا تحدد ملفات الوجهة المحتملة.

نظرًا لأن قالب T4 يتم تجديده ، فإن الملف المصدر دائمًا ما يكون أحدث ، ولا يمكنني استخدام المفتاح "الأحدث" بشكل موثوق ، لا أعتقد ذلك.

أستخدم فئات جزئية لتلك العناصر التي يمكنني ، ولكن هناك أشياء أخرى أقوم بإنشائها والتي لا يمكنها استخدام فئات جزئية (على سبيل المثال إنشاء ملف editortemplate أو DisplayTemplate *.ascx).

أي شخص لديه أي مشاكل مماثلة حلها؟

هل كانت مفيدة؟

المحلول

For %F In ("C:\From\*.*") Do If Not Exist "C:\To\%~nxF" Copy "%F" "C:\To\%~nxF"

نصائح أخرى

robocopy, أو "نسخة الملفات القوية" ، هو أمر النسخ المتماثل لدليل سطر الأوامر. لقد كان متاحًا كجزء من مجموعة موارد Windows التي تبدأ بـ Windows NT 4.0 ، وتم تقديمها كميزة قياسية من Windows Vista و Windows 7 و Windows Server 2008.

   robocopy c:\Sourcepath c:\Destpath /E /XC /XN /XO

لتوضيح (باستخدام Hydrargyrum و Hailgallaxar و Andy Schmidt):

  • /E يجعل RoboCopy نسخ متكررة النسخ الفرعية ، بما في ذلك تلك الفارغة.
  • /XC يستبعد الملفات الموجودة بنفس الطابع الزمني ، ولكن أحجام الملفات المختلفة. الروبوكية عادة ما يكتب هؤلاء.
  • /XN يستبعد الملفات الموجودة أحدث من النسخة الموجودة في دليل الوجهة. الروبوكية عادة ما يكتب هؤلاء.
  • /XO يستبعد الملفات الموجودة أقدم من النسخة في دليل الوجهة. الروبوكية عادة ما يكتب هؤلاء.

مع استبعاد الطبقات القديمة التي تم تغييرها ، وأحدث ، فإن Robocopy تفعل بالضبط ما يريده الملصق الأصلي - دون الحاجة إلى تحميل بيئة نصية.

مراجع: تقنية, ويكيبيديا
التحميل من: رابط تنزيل Microsoft (LINK آخر مرة تم التحقق منها في 30 مارس 2016)

حل Belisarius جيد.

لتوضيح هذا الإجابة قليلاً:

  • /E يجعل RoboCopy نسخ متكررة النسخ الفرعية ، بما في ذلك تلك الفارغة.
  • /XC يستبعد الملفات الموجودة بنفس الطابع الزمني ، ولكن أحجام الملفات المختلفة. الروبوكية عادة ما يكتب هؤلاء.
  • /XN يستبعد الملفات الموجودة أحدث من النسخة الموجودة في الدليل المصدر. الروبوكية عادة ما يكتب هؤلاء.
  • /XO يستبعد الملفات الموجودة أقدم من النسخة في دليل المصدر. الروبوكية عادة ما يكتب هؤلاء.

مع استبعاد الطبقات القديمة التي تم تغييرها ، وأحدث ، فإن Robocopy تفعل بالضبط ما يريده الملصق الأصلي - دون الحاجة إلى تحميل بيئة نصية.

يمكنك تجربة هذا:

echo n | copy /-y <SOURCE> <DESTINATION>

-y ببساطة يطالب قبل الكتابة ويمكننا أن ننشر في كل هذه الأسئلة. لذلك هذا من شأنه أن ينسخ فقط الملفات غير الموجودة. قون

هنا في نموذج ملف الدُفعات:

@echo off
set source=%1
set dest=%2
for %%f in (%source%\*) do if not exist "%dest%\%%~nxf" copy "%%f" "%dest%\%%~nxf"

أريد فقط توضيح شيء من الاختبار الخاص بي.

كتب Hydrargyrum:

  • /XN يستبعد الملفات الموجودة أحدث من النسخة الموجودة في الدليل المصدر. الروبوكية عادة ما يكتب هؤلاء.
  • /يستبعد XO الملفات الموجودة أقدم من النسخة الموجودة في الدليل المصدر. الروبوكية عادة ما يكتب هؤلاء.

هذا هو في الواقع للخلف. تقوم XN "باستبعاد الملفات الأحدث" ولكنها تستبعد الملفات الأحدث من النسخة في وجهة الدليل. XO "يستبعد أقدم" ، لكنه يستبعد الملفات الأقدم من النسخة في وجهة الدليل.

بالطبع قم بإجراء الاختبار الخاص بك كما هو الحال دائمًا.

هناك طريقة غريبة للقيام بذلك باستخدام Xcopy:

echo nnnnnnnnnnn | xcopy /-y source target

فقط قم بتضمين العديد من الملفات التي تقوم بنسخها ، وسوف تجيب على جميع أسئلة الكتابة فوقها.

robocopy src dst /MIR /XX

/xx: استبعاد الملفات "الإضافية" و dirs (موجودة في الوجهة ولكن ليس المصدر). هذا سيمنع أي حذف من الوجهة. (هذا هو الافتراضي)

يمكن تنزيل Robocopy هنا للأنظمة التي لم يتم تثبيتها بالفعل. (أي Windows Server 2003.)

http://www.microsoft.com/download/en/details.aspx؟displaylang=en&id=17657(لا توجد إعادة تشغيل مطلوبة للتثبيت)

تذكر أن تضع طريقك إلى exe exe. يمكنك القيام بذلك عن طريق النقر بزر الماوس الأيمن "جهاز الكمبيوتر الخاص بي"> خصائص> متقدم> "متغيرات البيئة" ، ثم ابحث عن متغير نظام المسار وأضف هذا إلى النهاية: "؛ C: Program Files Windows Resource Kits Tools" أو في أي مكان أنت تثبيته. تأكد من ترك سلاسل متغير المسار الموجود بالفعل هناك وإلحاق المسار الإضافي.

بمجرد تعيين المسار ، يمكنك تشغيل الأمر الذي يقترحه Belisarius. إنه يعمل بشكل رائع.

لن يسمح لي بالتعليق مباشرة على الرسائل غير الصحيحة - ولكن اسمحوا لي أن أحذر الجميع ، من أن تعريف خيارات /XN و /XO يتم عكسه مقارنة بما تم نشره في الرسائل السابقة.

يتوافق خيار Exclude الأقدم/الأحدث مع المعلومات المعروضة في تسجيل Robocopy: سوف يتكرر Robocopy من خلال المصدر ثم الإبلاغ عما إذا كان كل ملف في المصدر "أقدم" أو "أحدث" من الملف الموجود في الوجهة.

وبالتالي ، سوف يستبعد /XO ملفات المصدر الأقدم (وهو أمر بديهي) ، وليس "أقدم من المصدر" كما تم المطالبة به هنا.

إذا كنت ترغب في نسخ ملفات المصدر الجديدة أو المتغيرة فقط ، ولكن تجنب استبدال ملفات الوجهة الأكثر حداثة ، فإن /XO هو الخيار الصحيح للاستخدام.

هناك طريقة بسيطة تتمثل في استخدام خيار /miR ، لعكس الإدارات. في الأساس ، سوف ينسخ الملفات الجديدة فقط إلى الوجهة. في COMAND التالي ، استبدل المصدر والوجهة بالمسارات إلى المجلدات الخاصة بك ، سيبحث البرنامج النصي عن أي ملف بأي ملحقات.

robocopy <source directory> <destination directory> *.* /MIR

هذا هو ما عملت بالنسبة لي. يمكنني استخدام هذا "لإضافة" ملفات إلى محرك الأقراص الآخر ، دون أي كتابة فوق.

ملف الدُفعات: robocopy-missingfiles.bat

@echo off
echo Copying 
echo      "%1"
echo   to "%2"
echo.
echo Press Cntr+C to abort
Pause
echo.
@echo on
robocopy %1 %2 /Xo /XN /XC /J /SL /S /MT:8 /R:1 /W:1 /V /DCOPY:DAT /ETA /COPY:DATO /FFT /A-:SH /XD $RECYCLE.BIN "System Volume Information"

مثال:

robocopy-missingfiles.bat f:\Working-folder\ E:\Backup-folder\

لا اختبار قبل التنفيذ.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top