PDA

View Full Version : بدست آوردن نام همه پوشه هاي درايو جاري از طريق دستورات cmd



حمید محمودی
پنج شنبه 31 تیر 1389, 15:54 عصر
سلام. فرض کنيد که توي درايو J(درايو مربوط به فلش) يه پوشه بنام Newfolder هست. و توي همين پوشه يه فايل BAT وجود داره.

حالا چطوري ميشه با کليک روي اين فايل BAT ليست تمام پوشه هاي موجود در درايو J رو بدست آورد؟

ميخام ليستشو بدست بيارم بعدشم دستوز attrib -s -h -r رو براي هر پوشه اجرا بکنم.

يه ويروس هست که هر دفعه پوشه ها رو Hide ميکنه. ميخام يه فايل Bat بسازم و اونو اجرا کنم تا تمون پوشه ها رو به حالت عادي برگردونه.

با برنامه نويسي راحت ميشه اين رو نوشت ولي از دست Sality امون نداريم که!! (فايل exe رو آلوده ميکنه)

FastCode
پنج شنبه 31 تیر 1389, 16:15 عصر
dir /s/b/ad

حمید محمودی
پنج شنبه 31 تیر 1389, 16:36 عصر
cd ..
dir /s/b/ad
attrib -s -h -r


حالا مثلا با این کد اومدیم لیست تمومشو بدست آوردیم حالا اون Attrib رو چطور میشه استفاده کرد تا از حالت مخفی بیرون بیان ( اینی که بالا نوشم درست نیست!!)

FastCode
پنج شنبه 31 تیر 1389, 16:38 عصر
من همین مقدار بلدم.
اگر bash بود میشد ولی batch ه.

حمید محمودی
پنج شنبه 31 تیر 1389, 16:44 عصر
نمیشه هر یک از اون مقادریری که dir بدست ۀورد رو بریزیم توی متغییر و برای attrib استفاده کنیم؟



اگر bash بود میشد ولی batch ه.



CMD کجا و Unix shell کجا:چشمک:

اگه این با bash هم بلید بگید ( خدا رو چه دیدی یه دفعه دیدی ما هم ویندوز رو گذاشتیم کنار (: )

FastCode
پنج شنبه 31 تیر 1389, 17:10 عصر
C:\>ATTRIB -H | dir/s/b/ad
نمیدونم کار میکنه یا نه.ولی این کاریه که من توی لینوکس میکنم.

eshpilen
پنج شنبه 31 تیر 1389, 17:25 عصر
به شل ویندوز از زمان ویندوزهای جدیدتر یکسری دستورات جدید منعطف و قدرتمند اضافه شده.
مثلا فرمان FOR خیلی منعطف تر و قدرتمندتر شد.

با فرمانی مشابه این شما میتونی کاری رو که میخوای انجام بدی:

FOR /R "j:\" %v IN (.) DO attrib -s -h -r "%v"

ضمنا بنظرم در ویندوزهای جدید دیگه از Windows PowerShell میشه برای نوشتن شل اسکریپت های بسیار قدرتمند استفاده کرد. چون ظاهرا میشه در این روش عملا از فریمورک دات نت برای نوشتن شل اسکریپت استفاده کرد. هرچند من با Windows PowerShell آشنایی خاصی ندارم اما قبلا راجع بهش در ویکیپدیا خونده بودم: http://en.wikipedia.org/wiki/Windows_PowerShell
البته در اینکه شل یونیکس خیلی قدرتمند هست شکی نیست. از ابتدا اینطور بوده. ضمنا شل یونیکس (بخصوص BASH معروف) با تعداد زیادی از برنامه های قدرتمند خط فرمان گنو/لینوکس در تقریبا هر زمینه ای که نیاز باشه ترکیب شده و قدرت مضاعفی پیدا کرده. در خط فرمان شل لینوکس تقریبا هرکاری رو که ذاتا به واسط گرافیکی نیاز نداشته باشه میشه انجام داد.
بهرحال فعلا میکروسافت با گسترش فرمانهای شل ویندوز و اضافه کردن امکان اسکریپت نویسی با دات نت به شل، به رقابت با شل یونیکس نزدیکتر شده.

FastCode
پنج شنبه 31 تیر 1389, 17:39 عصر
درسته.
ولی از IL هم سخت تره:
http://technet.microsoft.com/en-us/library/ff730941.aspx

حمید محمودی
پنج شنبه 31 تیر 1389, 17:44 عصر
نمیدونم کار میکنه یا نه
توی ویندوز که کار نمیکنه!




FOR /R "j:\" %v IN (.) DO attrib -s -h -r "%v"
با اجرای دستور بالا میگه که :



v" was unexpected at this time.


راستی گفتم درایو J فقط یه مثال بود. نام درایو مشخص نیست که چیه. حالا به جای J در حلقه چی باید نوشت؟



متشکرم

eshpilen
پنج شنبه 31 تیر 1389, 18:52 عصر
ویندوز شما چیه؟
من در XP SP2 تست کردم کار میکنه.

eshpilen
پنج شنبه 31 تیر 1389, 19:13 عصر
درسته.
ولی از IL هم سخت تره:
http://technet.microsoft.com/en-us/library/ff730941.aspx

این لینک که شما گذاشتی الان حاوی یه مطلب دربارهء چگونگی ایجاد GUI در اسکریپت های شل هست که معیار منصفانه ای برای ارزیابی راحتی اسکریپت نویسی در شل نیست. چون معمولا با شل بصورت اینترفیس متنی کار میکنن و زبانهای شل برای کاربرد GUI طراحی نمیشن. اگر بخوایم در شل یونیکس هم GUI ایجاد کنیم فکر میکنم اگر سختتر نباشه راحتتر هم نیست.
باید چنتا نمونه از کارهای ذاتا سازگار با شل رو برای ارزیابی بررسی کنیم.

حمید محمودی
پنج شنبه 31 تیر 1389, 19:16 عصر
ویندوز شما چیه؟

XP SP3

اگه این دستور رو بیام کپی کنم توی cmd و اجراش بکنم کار میکنه. اما اگه اونو توی فایل bat ذخیره کنم و فایل رو اجراش کنم همون پیغام بالا رو میده!!
چکار باید بکنم؟؟؟

راستی این قسمتو نمیشه کاری کرد؟؟



راستی گفتم درایو J فقط یه مثال بود. نام درایو مشخص نیست که چیه. حالا به جای J در حلقه چی باید نوشت؟

FastCode
پنج شنبه 31 تیر 1389, 19:27 عصر
راستی گفتم درایو J فقط یه مثال بود. نام درایو مشخص نیست که چیه. حالا به جای J در حلقه چی باید نوشت؟
متشکرم

اسم درایو دیگه.
مگه چیز دیگه ای هم میشه؟

حمید محمودی
پنج شنبه 31 تیر 1389, 19:39 عصر
مگه چیز دیگه ای هم میشه؟


اون درایو رو من عرض کردم مال فلش هستش.
مثلا روی سیستم شما 4تا پارتیشن داری و فلش خودتونو زدید به USB پورت در این حالت
فرض کنید بنده هم یک فلش رو به پورت USB خودم (که سیستم بنده مثلا 7تا پارتیشن داره) متصل کردم

در این صورت باز نام درایو فلش شما با من یکی میشه؟؟

eshpilen
پنج شنبه 31 تیر 1389, 19:43 عصر
XP SP3

اگه این دستور رو بیام کپی کنم توی cmd و اجراش بکنم کار میکنه. اما اگه اونو توی فایل bat ذخیره کنم و فایل رو اجراش کنم همون پیغام بالا رو میده!!
چکار باید بکنم؟؟؟

راستی این قسمتو نمیشه کاری کرد؟؟

این برای فایل bat:

FOR /R "\" %%v IN (.) DO attrib -s -h -r "%%v"
داخل بچ فایل باید علامت % دوتایی باشه.
ضمنا الان توی هر درایوی اون فایل bat رو اجرا کنی روی همون درایو کار میکنه، چون نام درایو رو حذف کردم.

فکر میکنم اگر بجای بک اسلش نقطه بذاری، در دایرکتوری جاری کار میکنه.
یعنی شما بچ فایل رو بذاری توی یک فولدر خاص اجرا کنی (یا از طریق خط فرمانی فراخوانیش کنی که دایرکتوری جاریش اون فولدر هست)، تنها روی فولدرهایی که زیرمجموعهء اون فولدر هستن کار میکنه.

حمید محمودی
پنج شنبه 31 تیر 1389, 20:33 عصر
ممنون از دوستان مشکل حل شد.


اما تا یادم نرفته بپرسم :

به جای استفاده از کد زیر که میاد کلیه پوشه های موجود در درایو جاری رو براش attrib رو ست میکنه ؟



FOR /R "\" %%v IN (.) DO attrib -s -h -r "%%v"


چه کدی میشه نوشت که فقط نام پوشه های اصلی رو(نه subfolder) بده تا بشه attrib رو براش اجرا کرد. مثلا فرض کنید که داخل درایو مربوطه فقط 3 تا پوشه داریم که داخل این پوشه ها درمجموع چندصد فولدر وجود داره. حالا چه کدی رو میشه نوشت که فقط همین 3 پوشه اصلی رو براش attrib -s -h -r اجرا کرد؟؟ (البته این عدد 3 فرضی است)

eshpilen
پنج شنبه 31 تیر 1389, 22:19 عصر
FOR /F "delims=" %v in ('dir /b /ad') do attrib -s -h -r "%v"

این فرمان رو در هر پوشه ای اجرا کنی فقط روی دایرکتوریهای سطح اول اون پوشه عمل میکنه.
بازم یادت نره که اگر میخوای توی بچ فایل باشه باید علامتهای % رو دوتایی کنی.
اگر میخوای کارایی های پیشرفتهء دیگر فرمان FOR رو بدونی در خط فرمان بزن help for

shedayat
شنبه 02 مرداد 1389, 14:03 عصر
اصلا نیازی به حلقه تکرار نبود. خود دستور attrib همچین امکانی رو بهت می ده تا بتونی خاصیت پوشه و زیر پوشه رو تغییر بدی. :چشمک:

attrib -h -s -r /s /d

حمید محمودی
شنبه 02 مرداد 1389, 14:41 عصر
خود دستور attrib همچین امکانی رو بهت می ده تا بتونی خاصیت پوشه و زیر پوشه رو تغییر بدی.
خوب اگه بخاییم فقط پوشه های اصلی (نه subfolder) رو اتریب رو براش ست کنیم چی؟


(http://www.barnamenevis.org/forum/Get.Mahsoft.Org/Unhider.bat)

FastCode
شنبه 02 مرداد 1389, 19:07 عصر
/s
رو بر میداریم.

eshpilen
شنبه 02 مرداد 1389, 19:41 عصر
FastCode جان یه چیزی میگی سعی کن اول خودت تست کنی ببینی کار میکنه یا نه. امتحان کردن اینطور چیزا که خیلی آسونه کامپیوتر هم زیر دستته!

shedayat
شنبه 02 مرداد 1389, 23:53 عصر
خوب اگه بخاییم فقط پوشه های اصلی (نه subfolder) رو اتریب رو براش ست کنیم چی؟


(http://www.barnamenevis.org/forum/Get.Mahsoft.Org/Unhider.bat)
و خداوند این همه زبان های برنامه نویسی رو به وجود آورد. :چشمک:
چه کاریه با این همه زبون برنامه نویسی از جمله VB6 می تونی همچین کاری رو بدون دردسر انجام بدی. :لبخند:

eshpilen
یک شنبه 03 مرداد 1389, 00:25 صبح
هرچیزی رو بهر چیزی ساختند.
استفاده از فایلهای اسکریپت شل در جای خودش خیلی بهینه تره.
یه کارهایی رو میشه با زبان شل براحتی انجام داد که برنامه نویسیش خیلی حجیمتر، سخت تر و مستعد باگ های زیادی هست.
اگر خوب بلد باشی زمان و انرژی خیلی کمتری میبره.
منکه حاضر نیستم وقتم رو روی نوشتن برنامه های موردی، و پیش پا افتاده واسه کارهایی که با چند خط شل اسکریپت میشه حلشون کرد تلف کنم.
اینکه آدم یاد بگیره هرجایی از راحتترین و سریعترین راه استفاده کنه خیلی خوبه.
البته نیاز به یادگیری اولیهء بیشتری داره، اما تمام اینا جاهای زیادی به کار آدم میاد که خرجش رو درمیاره.
من از شل ویندوز استفاده های زیادی کردم. یادگیری شل ویندوز هفتاد هشتاد درصدش مساوی یادگیری فرامین DOS هست.
همینطور از شل لینوکس که اصولا میشه باهاش پشتک بالانس زد کلی استفاده کردم.
در کل حساب کنی کلی در وقت و انرژی خودم صرفه جویی کردم.
ضمنا یه جاهایی یا برای یه کارایی اصلا راه دیگه ای نیست یا راه دیگه صرفه نداره و بیخیالش میشی.
مثلا روی هاست خودم (لینوکس بود) یک webshell نصب کردم (البته اینکار روی اکثر سرورها غیرمجازه؛ مواظب باشید!) و چقدر باهاش دانلود کردم و فیلتر رد کردم و چنتا کار فنی قشنگ دیگه. اینقدر قدرتش زیاد بود که حتی بصورت تصادفی پسورد اکانت ادمین رو پیدا کردم و تا ماهها هزارتا سایت زیر دستم بود. طرف یه سایت هک میکنه کلی پز میده، هزارتاش زیر دستم بود ولی هیچ کاری نکردم (چون وقتم ارزشمندتر از این حرفا بود که واسه خودنمایی صرفش کنم). کلی جزییات فنی سرور و اطلاعات رو از طریق همون شل کسب کردم.
واسه تمام اینا میشه برنامه نوشت، ولی اصلا صرف نمیکنه و برای هرکدوم باید کلی وقت و انرژی گذاشت و یه برنامه نوشت. دست آخر میرسی به همون مفهوم شل. یعنی یه چیزی عمومی باید باشه که باهاش کارهای مدیریتی و اتوماسیون در سطح سیستم عامل رو انجام بدی و همهء فرمانها و برنامه های لازم به اضافهء یک زبان برنامه نویسی تحت شل در اون در دسترس باشه.

حمید محمودی
یک شنبه 03 مرداد 1389, 00:44 صبح
و خداوند این همه زبان های برنامه نویسی رو به وجود آورد.
چه کاریه با این همه زبون برنامه نویسی از جمله VB6 می تونی همچین کاری رو بدون دردسر انجام بدی.




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

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