سازماندهي فايل هاي EXE با استفاده از AutoIt 3
تو يكي از انجمن هاي مورد علاقم تاپيكي هست بنام “تاپیک تجربیات خاص !!” يكي از پست هاي اونجا اين بود
هیچ وقت چیزهایی رو که از اینترنت میگیرید روی هم تلنبار نکنید ،و نگید که بعدا مرتب میکنم .بلکه سعی کنید بعد از دریافت اطلاعات بلافاصله اونها رو توی پوشه های مجزا و با نامهایی که براتون معنی دارن ذخیره کنید تا بعدا تو هچل پیدا کردن اونها نیفتید.
دقيقا همينه براي مثال فايلي كه براي SQL Server Compact 4.0 دانلود ميشه اينه SSCERuntime_x86-ENU.exe خوب حالا فرض كنيد بعد چند وقت ميخواهيد دنبال SQL Server Compact 4.0 تو PC تون بگرديد و…
بشخصه براي راحتي فولدري بنام SQL Server Compact 4.0 ميسازم و فايل مربوطه رو داخلش و اينجوري به فايلام سروسامون ميدم
ولي انجام اين كار زمانبره دنبال روشي براي اتومات كردن اين پروسه بودم كه با AutoIt آشنا شدم
AutoIt v3 يك زبان برنامهنويسي اسكريپتي است كه هدف از طراحي آن، خودكارسازي عمليات مربوط به پنجرههاي گرافيكي كاربر (GUI) و اسكريپتنويسي عمومي است. اين زبان تركيبي از قابليتهايي چون شبيهسازي ارسال keystroke به پنجرههاي هر برنامهي دلخواه، حركت دادن اشارهگر موس، و دستكاري يا كنترل پنجرهها و عناصر كنترلي درون هر پنجره (از قبيل دكمهها، منوها، جعبههاي متني و غيره) بهره ميگيرد به نحوي كه هيچ زبان ديگري (مثلاً VBScript يا SendKeys و غيره) قادر به ارائه اين قابليتها به اين سادگي و در اين حد از توانمندي و قابليت اطمينان نميباشد و …
و اما كاري كه بايد بكنيم
دانلود آخرين ورژن از اينجا و همچنيا اديتور مخصوص خودش از اينجا
سورس زير رو با پسوند AU3 ذخيره كند (من تو دسكتاپ ذخيره كردم) و بعد كامپايل كردن با اديتور مخصوص فايل EXE ي كنار فايل AU3 ميسازه
;گرفتن مقدار نام محصول بر اساس آدرس فايل $ProductName=FileGetVersion($CmdLine[1],"ProductName") ;اعتبار سنجي نام محصول If(Not StringIsSpace($ProductName) and StringLen($ProductName)>0 ) Then ;گرفتن آدرس فايل بدون نام فايل $Dir=GetDir($CmdLine[1]) ;اضافه كردن بك اسلش به انتهاي آدرس If StringRight( $Dir, 1 ) <> "\" Then $Dir = $Dir & "\" EndIf ;ساختن مسير مقصد نهايي $final=$Dir & $ProductName ;برسي عدم وجود مسير ساخته شده در مرحله قبل If StringInStr( FileGetAttrib( $final ), "D" ) = 0 Then ;ساختن فولدر DirCreate ( $final ) EndIf FileMove ($CmdLine[1],$final) EndIf ;تابع براي گرفتن آدرس فايل بدون نام فايل ;http://www.autoitscript.com/forum/topic/123538-get-the-file-name-and-the-file-directory-from-a-file-path/ Func GetDir($sFilePath) If Not IsString($sFilePath) Then Return SetError(1, 0, -1) EndIf Local $FileDir = StringRegExpReplace($sFilePath, "\\[^\\]*$", "") Return $FileDir EndFunc
مرحله بعدي فراخواني اين اسكريپته براي راحتي كار ما يه گزينه به Context Menu اضافه ميكنيم و البته متصلش(Associate) ميكنيم فقط به فايل هاي EXE (بكاپ از رجيستري فراموش نشه)
در نهايت بعد از كليك كردن روي فايلهاي EXE خروجي به اين شكل ميشه
جالب بود
پاسخحذفبرای من خطا میگیره.
پاسخحذف$ProductName=FileGetVersion($CmdLine[1],"ProductName")از این خط ایراد میگیره. میگه ایندکس آرایه خارج از محدوده هست. ممنون. مطلب جالبی بود.
احتمال داره قسمت Regedit رو درست انجام نداديد
پاسخحذفبراي ديباگ داخل اديتور همين خط دستور $CmdLine[1] رو انتخاب كن و Ctrl+Shift+D رو بزن تا برات مقدارش رو نشون بده (msgbox برات ميسازه) بعد مقدار ايدنكس رو بجاي 1 برابر 0 بزار كه تعداد پارامترهاي وروديت رو نشون ميده اگه صفر بود يعني قسمت Regeditرو درست انجام ندادي.
دستور $CmdLineRaw هم كلا پارامتر هاي ورودي رو نشونت ميده.
احتمال داره قسمت Regedit رو درست انجام نداديد
پاسخحذفبراي ديباگ داخل اديتور همين خط دستور $CmdLine[1] رو انتخاب كن و Ctrl+Shift+D رو بزن تا برات مقدارش رو نشون بده (msgbox برات ميسازه) بعد مقدار ايدنكس رو بجاي 1 برابر 0 بزار كه تعداد پارامترهاي وروديت رو نشون ميده اگه صفر بود يعني قسمت Regeditرو درست انجام ندادي.
دستور $CmdLineRaw هم كلا پارامتر هاي ورودي رو نشونت ميده.