আমি কীভাবে ডিরেক্টরি ট্রি ক্রল করব এবং এমএক্সডি আপেক্ষিকপথগুলিকে সত্যে পরিবর্তন করতে পারি?


9

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

আমি একটি স্বতন্ত্র আরকি স্ক্রিপ্ট লিখতে চাই যা ডিরেক্টরিগুলির মাধ্যমে ক্রল হয়, প্রতিটি এমএক্সডি খোলে, আপেক্ষিকপথগুলি সত্যে সেট করে, তারপরে এমএক্সডি সংরক্ষণ করে। এমন কোনও লিপি আছে যা কোথাও এটি করে?

ম্যাপডোকামেন্ট অবজেক্টে আপেক্ষিকপথের সম্পত্তি পঠনযোগ্য। এটি পরিবর্তন করার অন্য কোনও উপায় আছে?


আমি এ সম্পর্কে নিশ্চিত যে এই কার্যপ্রবাহটি ব্যবহার করা বা না করা সম্ভব। তবে আমি যা কাজ করতে পারি তা হ'ল আপনি যদি প্রতিটি .mxd স্বয়ংক্রিয়ভাবে খুলেন তবে সেই মূল .mxd থেকে সমস্ত ডেটা উত্স এবং তথ্য অনুলিপি করুন একটি নতুন ফাঁকা .mxd- এ যা আপেক্ষিক পাথ চেক করেছে এবং তারপরে নতুনটিকে পুনরায় সংরক্ষণ করতে পারে save আপনার প্রথম উপায়টি যদি সম্ভব না হয়ে শেষ হয় তবে কেবলমাত্র একটি কাজের জন্য ধারণা।
এমএলউরি

আমি মনে করি না এটি সম্ভব। আপনি নিখুঁত পাথ এবং তাদের লেখক ব্যবহার করে সমস্ত দস্তাবেজের একটি তালিকা পেতে পারেন এবং কঠোর ই-মেইলে তাদের স্প্যাম করতে পারেন though
শান

উত্তর:


6

নিম্নলিখিত পাইথন স্ক্রিপ্টটি ব্যবহার করা সম্ভব ( ইএসআরআই ফোরামে নীল ক্লেমনসকে ধন্যবাদ দিয়ে )। আপনি প্রয়োজন হবে comtypes গ্রন্থাগারের বন্ধকৃত Pierssen কনসাল্টিং থেকে মডিউল।

from Snippets import GetLibPath, InitStandalone
from comtypes.client import GetModule, CreateObject
import os

m = GetModule(GetLibPath() + 'esriCarto.olb')
InitStandalone()
file_dir = r'C:\dir'
for filename in os.listdir(file_dir):
   fullpath = os.path.join(file_dir, filename)
   p = CreateObject(m.MapDocument, interface=m.MapDocument)
   p.Open(fullpath)
   newpath = os.path.join(file_dir,'Changed_' + filename)
   p.SaveAs(newpath,True,False)
   del p

পাইথসনের স্নিপেটস মডিউলটি ব্যবহার করার জন্য স্থানীয় ক্যানোনিকাল থ্রেডটিও দেখুন আমি পাইথন থেকে আরকঅবজেক্টগুলি কীভাবে অ্যাক্সেস করব?
ম্যাট উইলকি

2

10.0-এ সম্ভব নয় , তবে পাইথনের আরকোবজেক্টগুলি ব্যবহার করার মতো কিছু অপেক্ষাকৃত সহজ কাজগুলির জন্য অপেক্ষাকৃত সহজ কাজগুলির জন্য যেখানে একটি নেট অ্যাপ্লিকেশন লিখতে হবে ওভারকিল হবে, তবে প্রয়োজনীয় কার্যকারিতা আরকি / আর্কিগিসিপিটিং মডিউলগুলিতে প্রকাশিত হয়নি। ব্যবহার করুন os.walk ডিরেক্টরি ট্রি অংশ হামাগুড়ি দিয়া জন্য।

আরকোবজেক্টস বিটের জন্য, এমএক্সডি IMapDocument.Open()খোলার জন্য (এটি অর্কম্যাপে খোলা না থাকা) খুলুন এবং সত্যতে IMxDocumentসেট RelativePathsকরুন, এবং IMapDocument.Save()এটি সংরক্ষণ করতে ব্যবহার করুন।


আপনি কি তা যাচাই করেছেন যে এটি আসলে আপেক্ষিকের পথগুলি ঠিক করে দেয়?
জেসন শিয়েরার

আমি নিজে চেষ্টা করে দেখিনি, না, তবে এই থ্রেডটি পরামর্শ দেয় যে এটি কাজ করা উচিত: forums.esri.com/Thread.asp?c=93&f=1154&t=260812
blah238

এছাড়াও আমি নিশ্চিত যে কিরক ইতিমধ্যে এটি কীভাবে করতে জানে: forums.esri.com/Thread.asp?c=93&f=992&t=64946 :)
blah238

@ blah238 এটি ভিবিএ, আমার যা প্রয়োজন তা স্ট্যান্ডোলোন আরকি স্ক্রিপ্ট।
কर्क কুইকেনডাল

1
প্রশ্নটি আরকিপি দিয়ে এটি করার প্রসঙ্গে ছিল, নেট নয়, এবং আমি যেমন বুঝতে পেরেছি যে 10.0 তে আরকি দিয়ে করা সম্ভব নয় (আমার উত্তরের প্রথম লিঙ্কটি দেখুন)।
blah238
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.