PDA

نسخه کامل مشاهده نسخه کامل : کپی کردن پوشه



van123
08-04-2019, 10:42
با درود و تبریک سال نو
من میخوام با استفاده از بچ فایل یا اپ خاصی بتونم یه پوشه را روزانه کپی کنم
قابل ذکر هست پوشه مورد نظر شامل چندین فایل و پوشه هست و هر پوشه چندین فایل و پوشه را شامل می شود
من با استفاده از بچ فایل فقط تونستم فایل ها را کپی کنم و پوشه های و زیرمجموعه آن کپی نشد
ضمنا من با استفاده از تسک اسکزول باید تنظیم کنم روزانه این کار اتومات انجام شود
ممنون میشم راهنمایی فرمایید

بطور خلاطه یک پوشه با تمام پوشه های زیرمجمعش باید روزانه کپی کنم بصورت اتومات

تشکر

shaahani
08-04-2019, 21:48
بچ فایل یا فایل اجرایی دسته ای با پسوند Bat رو در notepad ویندوز شبیه به متن زیر نوشته و با پسوند bat ذخیره نمایید.


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

توجه داشته باشید که کلید y/ انتهای فرمان xcopy برای آن است که اگر فایل ها قبلا موجود بوده اند، جایگزین شوند، برای جایگزین نشدن میتوان از y-/ استفاده نمود.
و یا با نگذاشتن این سویچ در زمان کپی برداری از کاربر در این مورد سوال شود.

این فرمان تمام محتویات داخل شاخه 2 از درایو c را به داخل شاخه 2 از درایو d منتقل می نماید. (در صورت عدم وجود شاخه 2 در درایو D آنرا می سازد)

shaahani
08-04-2019, 21:57
همچنین با استفاده از تسک اسکجولر (Task Scheduler) ویندوز و استفاده از create basic task به ویزارد ساده ای برای اجرای روزانه اسکریپت نوشته دستیابی پیدا خواهید نمود و با استفاده از آن خواهید توانست بطور روزانه و در زمان های مشخص بطور مداوم اسکریپت مورد نیازتان را اجرا نمایید.

[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]

[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]

shaahani
09-04-2019, 00:51
شما میتوانید یک به انتهای فولدر کپی شده تاریخ و زمان اضافه کنید، تا در مکان مقصد، شاخه های متفاوتی از شاخه مورد نظر ایجاد شود که هرکدام داری زمان و تاریخ متفاوتی باشد.

جهت اینکار ابتدا برای یافتن فرمت مورد استفاده خود، اسکریپت زیر را در فایلی ذخیره و اجرا نمایید و با انجام تغییرات، نسبت به فرمت زمانی کامپیوتر خود به یک قالب مناسب جهت اضافه کردن تاریخ و زمان به انتهای شاخه های خود دست پیدا نمایید :


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]

پس از رسیدن به قالب مناسب متغییر datetimef را به اسکریپت اصلی خود اضافه نمایید تا در زمان های ایجاد مختلف؛ شاخه های متفاوتی ایجاد گردد به صورت زیر :


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]

van123
10-04-2019, 14:23
بچ فایل یا فایل اجرایی دسته ای با پسوند Bat رو در notepad ویندوز شبیه به متن زیر نوشته و با پسوند bat ذخیره نمایید.


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

توجه داشته باشید که کلید y/ انتهای فرمان xcopy برای آن است که اگر فایل ها قبلا موجود بوده اند، جایگزین شوند، برای جایگزین نشدن میتوان از y-/ استفاده نمود.
و یا با نگذاشتن این سویچ در زمان کپی برداری از کاربر در این مورد سوال شود.

این فرمان تمام محتویات داخل شاخه 2 از درایو c را به داخل شاخه 2 از درایو d منتقل می نماید. (در صورت عدم وجود شاخه 2 در درایو D آنرا می سازد)


با درود فراوان
ممنون از توضیحات کامل و کافی شما.
ممنونم:n16:


اگه امکان داره راجب به خطوط فرمانش توضیح مختصری داده شود تا در صورت امکان و نیاز پارامتری را تغییر دهم

shaahani
10-04-2019, 16:17
با درود فراوان
ممنون از توضیحات کامل و کافی شما.
ممنونم:n16:


اگه امکان داره راجب به خطوط فرمانش توضیح مختصری داده شود تا در صورت امکان و نیاز پارامتری را تغییر دهم

درود

فرمان ECHO OFF باعث خاموش شدن بخش مسیر جاری می شود که بطور معمول در داس ویندوز نمایش داده می شود، مثلا "C:\users\PC>"
کاراکتر @ قبل از یک فرمان باعث می شود، دستور وارد شده در فایل Bat به نمایش در نیاید.

بخش For یک حلقه است برای ایجاد فرمت صبح و بعد از ظهر در ساعت جاری سیستم و ذخیره آن در متغییر Mytime
پس از آن این متغییر مورد استفاده قرار گرفته و در متغییر am_pm وضعیت صبح یا بعد از ظهر بودن زمان از آن استخراج می شود.
سپس متغییر mytime مجدد اصلاح می شود تا بخش am یا pm آن حذف گردیده و دوباره در خودش بصورت اصلاح شده مقدار دهی می شود.

در سه خط بعدی :


set sec=%time%
if "%time:~0,1%"==" " set sec=0%time:~1,11%
set sec=%sec:~5,6%

زمان جاری وارد متغیر Sec می شود.
در خط if شرطی گذاشته شده است که اگر زمان ساعت تک رقمی بوده و از 0 تا 9 صبح باشد، به ابتدای آن یک صفر اضافه کند تا حالت زیبا تری پیدا کند ومثلا 8 با 08 جایگزین شود.
(البته با توجه به استفاده از فرمت AM/PM و اینکه محل کاراکتر زمان همچنان با یک فاصله خالی نوشته شده است، این خط دستور ضروری نیست اما بخاطر رعایت احتیایط در بعضی از سیستم عامل هاست که ممکن است بجای اختصاص دو کاراکتر به زمان در ساعت های تک رقمی، تنها یک کاراکتر اختصاص دهند و محاسبات انتخاب ثانیه به مشکل بخورد)

در خط سوم متغییر sec با ثانیه و صدم به همراه صدم و هزارم ثانیه مقدار دهی می شود.

تا اینجای اسکریپت برای نمایش زیبای ساعت و تاریخ در بخش بالایی پنجره بود.
میتوانید این بخش را به صورت زیر نوشته و اجرا کنید تا عملکرد هر دستور را با دقت بیشتری مشاهده نمایید :


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

shaahani
10-04-2019, 16:48
برای کپی برداری محتویات یک شاخه از فرمان Xcopy استفاده شده است اگر شما فرمان مورد نظر را با اسلش علامت سوال وارد نمایید تمامی آپشن های آن به نمایش در میاید.

[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]

این دستور به این صورت است که بعد از فرمان xcopy میبایست آدرس شاخه مبدا که قرار است تمام محتویات آن کپی شود با یک فاصله و ترجیحا بین دو علامت "" (کوتیشن) نوشته شود.
پس از آن یک فاصله قرار گرفته و آدرس شاخه مقصد که قرار است تمام محتویات کپی شده به داخل آن وارد شود را بطور کامل می نویسیم به صورت زیر :


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید


آپشن هایی که من استفاده کردم
/e
کپی شاخه های موجود در شاخه های زیرین همراه با شاخه های خالی که داخل آنها فایلی وجود ندارد.

/h
کپی فایل های مخفی

/i
اگر شاخه مقصد وجود نداشته باشد، آنرا ایجاد نماید.

/j
کپی کردن بدون بافر کردن فایل ها، برای کپی فایل های بزرگ مناسب است

/y
اور رایت کردن فایل ها و پوشه های جدید به روی قبلی ها بدون پرسش کردن، درصورتی که فایل ها قبلا وجود داشته باشند، جایگزین خواهند شد.

shaahani
10-04-2019, 17:07
اینم فراموش کردم بگم، وقتی میخواهید متغیری را مقدار دهی کنید میبایست از set استفاده نمایید:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

برای مقدار دهی یک متغییر مانند am_pm بعد از کلمه set آن را باید بصورت خالی نوشت تا تعریف گردد. set am_pm=AM
برای فراخوانی یک متغیر باید آنرا بین دو علامت %% نوشت تا مقدار آن بازگشته و مورد استفاده قرار گیرد.

وقتی بین دو علامت %% علاوه بر نام متغییر از : استفاده می شود به مانند حالت زیر

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
یعنی هر چه در متغیر رشته ای mytime وجود دارد را از کاراکتر ششم (از سمت چپ متن) به طول دو کاراکتر جداسازی کن و مقدار آن را بازگردانی کن.

van123
11-04-2019, 10:55
خیلی توضیحاتتون بکارم اومد
ممنونم ازت
:n12::n12::n12::n12::n12::n12::n12::n12:

van123
13-04-2019, 14:51
درود
ببخشید آیا امکان این هست که چک بشه و فایل های تکراری کپی نشه

بطور کلی کاری که من انجام میخام بدم اینه
یه پوشه دارم به اسم مثلا X که شامل:
سال 95-96-97 و الانم 98
هرسال 12 ماه داره
و هر ماه من یسری عکس تو هر پوشه نگه داری میکنم تو کامیوتر A

حال میخام
پوشه X رو روزانه کپی کنه در کامپیوتر B تحت شبکه

خب حالا بلطف شما اون دستوری که دادین انجام میشه
ولی بدلیل حجم بالا میخام از کپی تکراری فایل جلوگیری بشه
بنظرتون راهی هست؟
حال یا با چک کردن محتوای فایل یا حجم فایل؟

shaahani
13-04-2019, 16:49
درود
ببخشید آیا امکان این هست که چک بشه و فایل های تکراری کپی نشه

بطور کلی کاری که من انجام میخام بدم اینه
یه پوشه دارم به اسم مثلا X که شامل:
سال 95-96-97 و الانم 98
هرسال 12 ماه داره
و هر ماه من یسری عکس تو هر پوشه نگه داری میکنم تو کامیوتر A

حال میخام
پوشه X رو روزانه کپی کنه در کامپیوتر B تحت شبکه

خب حالا بلطف شما اون دستوری که دادین انجام میشه
ولی بدلیل حجم بالا میخام از کپی تکراری فایل جلوگیری بشه
بنظرتون راهی هست؟
حال یا با چک کردن محتوای فایل یا حجم فایل؟
خواهش میکنم، خوشحالم که مفید بوده و امیدوارم موفق باشید.
کلاس کامپیوتر که ندارین احتمالا ؟ خخخ

ببنید امکان مقایسه بایت به بایت و یا سایز دقیق فایل وجود نداره، اگه قراره تا این حد حساس باشه، باید براش یک نرم افزار ساخته بشه که این کار رو انجام بده.

اما قابلیت هایی وجود داره که میتونید از اونها در همین فرمان استفاده کنید.
یکی از اونها سویچ /d هست، اگر این سویچ رو بدون وارد کردن تاریخ در جلوی آن وارد کنید ، به این معنی است که تاریخ اجرای فرمان، مبدا قرار میگیرد.
اگر فایل مورد نظر موجود باشه ابتدا بررسی میکنه که تاریخ Modify شدن فایل ها با همدیگه برابر باشند و اگه فایل منبع جدید تر از فایل مقصد باشه ، اقدام به بازنویسی فایل میکنه.
وقتی یک فایل مورد ویرایش قرار بگیره تاریخ Date Modified اون تغییر پیدا میکنه، کاری که این سویچ میکنه فقط مقایسه تاریخ این خصوصیت فایل هاست.
اگر جلوی این سویچ تاریخ قرار بدید نیز بررسی میکنه اگه تاریخ تغییر فایل بعد از آن تاریخ مشخص شده باشد، کپی برداری را انجام می دهد.

بنابراین اگر بخواهید همچنان بدون پرسش اسکریپت شما کپی برداری و بازنویسی فایل ها را انجام دهد، اما فایل هایی که تغییر پیدا نکرده اند را کپی نکند، باید دستور را بصورت زیر با سویچ d وارد نمایید :


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

شما همواره میتوانید، پرسش در مورد فایل هایی که قرار است باز نویسی شوند را در اسکریپت فعال نموده تا از کاربر در مورد فایل هایی که قرار است بازنویسی شوند سوال شود.

به مثال های پایین توجه فرمایید:



برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
فرمان بالا، فایل هایی که تغییر نکرده اند را مورد بازنویسی قرار نمی دهد، اما در مورد فایل هایی که تغییر کرده اند و قرار است بازنویسی شوند، سوال می پرسد.


مثال دو :


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
فرمان بالا تمامی فایل ها را در صورتی که از قبل موجود باشد، بازنویسی میکند، اما از شما در مورد تک تک فایل ها در زمان اجرا سوال می پرسد که آیا بازنویسی فلان فایل انجام شود و یا خیر.



برای مقایسه بایت به بایت، فایل ها از روی اندازه ، دستورات داس ویندوز کافی نبوده و نیاز به ساخت برنامه تحت ویندوز پیش می آید.

در مورد نام شاخه ها نیز دیگه توضیح نمی دم، خودتون میتونید اسکریپت را به گونه ای در بیارید که شاخه های مورد نظر را کپی کنه. حالا چه بطور سالانه باشه و یا اینکه بطور کلی بخواهد محتویات یک شاخه را برداشته و با تاریخ ماه و سال زدن، در یک شاخه مقصد بریزد.
برای تبدیل زمان شمسی به میلادی نیز، اینکار را باید خودتون بصورت دستی انجام دهید، و بررسی کنید که مثلا اول ماه و یا سال شمسی، چه روزی در تاریخ میلادی است و کامپیوتر را بر حسب تاریخ میلادی تنظیم نمایید. برای استفاده مستقیم از تاریخ شمسی نیز باز نیاز به برنامه نویسی تحت ویندوز است و ویندوز به تنهایی جوابگوی نیاز نخواهد بود.