プロが教えるわが家の防犯対策術!

【コマンドプロンプト】名前順のtreeをdir sort sedで実装出来ないでしょうか


windows10環境です。
treeで出力される結果が名前順でないことが不満です。
先日そういったものが必要で、dirで出力されたものをエクセルに持ち込み、親フォルダごとに罫線へ置換して行きましたが、コマンドプロンプトでクローズさせることはできないでしょうか。

1:フォルダ
2:フォルダ/ファイル1
3:フォルダ/ファイル2
4:フォルダ/ファイル3


1を除いて フォルダ/ を├ に置換したいと考えています。
また、フォルダは複数(同レベルも子レベルもあり)に対応したいです。

正規表現でどのように表現したらよいか検討がつかず、アドバイスが頂ければ嬉しいです。

A 回答 (4件)

No.2です。


PowerShellで書いてみました、ご参考にどうぞ。


---- tree.ps1 -- ここから
function print_tree{
Param(
[string]$path,
[string]$indent
)

$items = Get-ChildItem $path
$cnt = $items.Count
$i = 0
$idt = ""
$items | Sort-Object | %{
$i++
if($i -eq $cnt){
$indent + "└─" + $_.Name | Out-Host
$idt = " " # 半角スペース4個
}else{
$indent + "├─" + $_.Name | Out-Host
$idt = "│ " # 縦罫線+半角スペース2個
}
if($_.PSIsContainer){
print_tree $_.FullName ($indent + $idt)
}
}
}

if($args.Count -ne 1){
"Error : 引数の数が正しくありません" | Out-Host
"Usage : \test.ps1 path" | Out-Host
exit
}
if(-not (Test-Path $args[0]) ){
"Error : パスが正しくありません" | Out-Host
exit
}

$path = Get-item $args[0]
$path.FullName | Out-Host
print_tree $path.FullName ""
---------------- ここまで


コマンドプロンプトからの実行例

C:\powershell>powershell -ExecutionPolicy RemoteSigned .\tree.ps1 . ←引数にカレントを指定
C:\powershell
├─root
│ ├─aaa.txt
│ ├─FolderA
│ │ └─FileA1.txt
│ ├─FolderB
│ │ └─FileB1.txt
│ ├─FolderC
│ │ ├─FolderCA
│ │ │ ├─FileCA1.txt
│ │ │ └─FileCA2.txt
│ │ └─FolderCB
│ │ └─FileCB1.txt
│ └─zzz.txt
└─tree.ps1



PowerShellのコンソールからなら

PS C:\powershell> .\tree.ps1 .
    • good
    • 2
この回答へのお礼

本当にありがとうございます!
これをもとに色々学んでみたいと思います。
回答が遅くなってしまいましたが、ベストアンサーとさせて頂きます!

お礼日時:2019/08/29 08:12

sedはWindowsでは標準では無いはずです。


何か、インストールしているのでしょうか?

Windows Subsystem for Linux でsedをインスールして使っているのなら、同様に(Linuxでの) treeコマンドが使えるかもしれません。
(試していないのでわかりませんが)

「linux tree source」で検索すると、いくつかのLinuxディストリビューションで採用されているtreeコマンドのソースが見つかります。
http://mama.indstate.edu/users/ice/tree/
Windowsでそのまま動かせるかは、試してないのでわかりません。

「sed tree」で検索すると、いくつか見つかります。
大抵、(linuxの) findコマンドを使っているので、使えるようにする必要があります。


Python,Ruby,Perl等でもできます。
(私なら(使い慣れている)Perlを使います。)
    • good
    • 0
この回答へのお礼

sedは別件で使用したかった事があり、特別にインストールしておりました。

こういったパッケージ化されたものもあるのは知りませんでした。
今度機会があれば、こちらも使用してみたいとおもいます。

お礼日時:2019/08/29 08:14

Windows10なら最初からインストールされているPowerShellでスクリプト組めばできますよ。

    • good
    • 0
この回答へのお礼

ありがとうございます。PowerShell、使ったことがありませんでしたので、勉強してみます。

お礼日時:2019/08/24 11:14

sed ではできない (2 以降の「フォルダ/」の部分を置き換えることができないので).



awk は触ってないけどできてもおかしくない.

Perl なら確実にできる.
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
やはりsedだけではそのような表現は難しいのですね。

awkとのことで、上の方のアドバスと合わせて勉強してみます。

お礼日時:2019/08/24 11:15

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!