كيف يمكنني الحصول على قائمة الدليل من DOS في بيرل؟

StackOverflow https://stackoverflow.com/questions/2025784

  •  19-09-2019
  •  | 
  •  

سؤال

أحتاج إلى الحصول على أسماء الدليل من المسار الذي تم تمريره إلى البرنامج النصي PERL كوسيطة وقت التشغيل. هنا هو الرمز الذي أستخدمه:

$command ="cd $ARGV[0]";
system($command);

$command="dir /ad /b";
system($command);
@files=`$command`;

ولكن لا يزال بإرجاع أسماء الدليل داخل الدليل الذي أقوم بإدارة هذا البرنامج النصي PERL. باختصار، كيف يمكنني الحصول على أسماء الدليل من الدليل المستهدف يتم تمرير مسارها إلى هذا البرنامج النصي PERL؟

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

المحلول

هذا يجب أن يعمل أيضا
$command = "dir /ad /b $ARGV[0]" ;

نصائح أخرى

انطلاقا من ما تحاول القيام به في وظيفة سؤالك

$dir = $ARGV[0];
chdir($dir);
while(<*>){
 chomp;
 # check for directory;
 if ( -d $_ ) {
    print "$_\n" ;
 }
}

في سطر الأوامر

c:\test> perl myscript.pl c:\test

هناك طرق أخرى للقيام بإدراج قائمة الدليل. انظر هذه من الوثائق

  1. perldoc -f opendir, perldoc -f readdir

  2. perldoc perlopentut

  3. perldoc -f glob

  4. perldoc perlfunc (انظر إلى المشغلين لاختبار الملفات. -x, -d, -f إلخ)

مشكلتك هي أن تشغيل "القرص المضغوط" عبر "النظام" لا يغير دليل العمل لعملية بيرل. للقيام بذلك، استخدم وظيفة "Chdir":

chdir($ARGV[0]);

$command="dir /ad /b";
system($command);
@files=`$command`;

استعمال ملف :: Doslob. (الأساسية منذ قبل perl v5.5) لتجنب gotchas مثل تخطي الملفات مطابقة /^./.

perl -MFile::DosGlob=glob -lwe "chdir 'test_dir'; print for grep {-d} <*>"
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top