回答No.2をperlで組んだらこんな感じになりました。
powershell でも似たようなプログラムを組むことになるんじゃないかと思います。
printはデバッグの名残なので、全部無くても構いません。
少しpowershellの文法を見てみましたが、配列に追加する += とか、配列をソートする Sort-Object とかあるのでほとんどそのまま移植できそうな気がしました。
ただ、if修飾子(後置if)は無いっぽいのでそこは普通のif文にしなきゃいけないかもです。
#perlでは、単純変数は $x、配列変数は @x のように書いて使い分ける必要があります。
#$debug = 0; にすれば、表示が少し減ります。
あ、リネーム後の名前がかぶった時の処理をしてませんでした
かぶった場合、rename がエラーになって元ディレクトリ名のまま残ることになります。
---ソース(ren_dir.pl)----
use strict;
my $debug = 1;
my @dirs = ();
opendir(DIR, "." ) || die "Can't open current dir. \n";
foreach (readdir(DIR)) {
next if (/^\.{1,2}/); # "."(カレント)、".."親ディレクトリ はスキップ
if (-d) {push(@dirs, $_)}; # ディレクトリのみリストに追加
}
closedir(DIR);
foreach my $dir (@dirs) {
my @files = ();
print "dir $dir\n";
opendir(DIR, "./$dir" ) || die "Can't open dir. $dir\n";
foreach my $file (readdir(DIR)) {
print "file $file\n" if $debug;
if (-f "./$dir/$file") {
print "add $file\n" if $debug;
push(@files, $file); # ファイル名ならリストに加える
};
}
@files = sort @files; # ファイル名リストのソート
print "files: @files\n" if $debug;
my $to_name = shift @files; # 最初のファイル名を取り出す
print "rename $dir to $to_name\n\n";
rename($dir, $to_name);
}
----実行結果----
C:\Users\xxxxxxxx\Desktop\perl\ren_dir>dir
ドライブ C のボリューム ラベルは OS です
ボリューム シリアル番号は 44FA-B451 です
C:\Users\xxxxxxxx\Desktop\perl\ren_dir のディレクトリ
2021/01/12 15:31 <DIR> .
2021/01/12 15:31 <DIR> ..
2021/01/12 15:25 <DIR> abc
2021/01/12 14:27 <DIR> def
2021/01/12 15:35 828 ren_dir.pl
2021/01/12 15:25 <DIR> xyz
1 個のファイル 828 バイト
5 個のディレクトリ 163,903,242,240 バイトの空き領域
C:\Users\xxxxxxxx\Desktop\perl\ren_dir>perl ren_dir.pl
dir abc
file .
file ..
file test2.txt
add test2.txt
file test3.txt
add test3.txt
file test4.txt
add test4.txt
files: test2.txt test3.txt test4.txt
rename abc to test2.txt
dir def
file .
file ..
file testb1.txt
add testb1.txt
file testb2.txt
add testb2.txt
file testb3.txt
add testb3.txt
files: testb1.txt testb2.txt testb3.txt
rename def to testb1.txt
dir xyz
file .
file ..
file testc1.txt
add testc1.txt
file testc2.txt
add testc2.txt
file testc3.txt
add testc3.txt
files: testc1.txt testc2.txt testc3.txt
rename xyz to testc1.txt
C:\Users\xxxxxxxx\Desktop\perl\ren_dir>dir
ドライブ C のボリューム ラベルは OS です
ボリューム シリアル番号は 44FA-B451 です
C:\Users\xxxxxxxx\Desktop\perl\ren_dir のディレクトリ
2021/01/12 15:36 <DIR> .
2021/01/12 15:36 <DIR> ..
2021/01/12 15:36 826 ren_dir.pl
2021/01/12 15:25 <DIR> test2.txt
2021/01/12 14:27 <DIR> testb1.txt
2021/01/12 15:25 <DIR> testc1.txt
1 個のファイル 826 バイト
5 個のディレクトリ 163,903,238,144 バイトの空き領域