Perl で 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 等)

あなたの問題は、「CD」を経由して「システム」を実行すると、perlのプロセスの作業ディレクトリを変更しないということです。これを行うには、 "CHDIR" 機能を使用します:

chdir($ARGV[0]);

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

ファイル:: DosGlobする(perlのバージョン5.5前からコア)を使用します/^\./.

perl -MFile::DosGlob=glob -lwe "chdir 'test_dir'; print for grep {-d} <*>"
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top