同じ名前のファイルを見つけるスクリプトをPowerShellで記述しようとしています。その後、そのファイルのグループの重複する名前の数を知りたいです。私はそのようなファイルを見つけることに成功しました:
foreach ($i in Get-ChildItem *.)
{
Write-Host (Get-ChildItem $i).BaseName
}
しかし、その後はLinuxのようなコマンドが必要ですcat file | sort | uniq -d
。この -d
パラメータはPSでの私の目標です。
次のコマンドを試してみましたが、機能しません。
$var = (Write-Host (Get-ChildItem $i).BaseName | Sort-Object -Unique).Count
# Let's say there are files '1.mp4,1.mkv,2.mp4'
# I want variable var's value is 1, because only one group that has same file names
これはあなたが必要なことをするはずです、
$var = Get-ChildItem | Group-Object -Property BaseName | Where-Object { $_.Count -gt 1} | Select-Object -ExpandProperty Name
$var = (Write-Host (Get-ChildItem $i).BaseName | Sort-Object -Unique).Count
#変数varの値は1にしたいのは、同じファイル名を持つ1つのグループだけだからです。
Jfrmilnerによるもう1つの答えは、BaseName
をvar
に格納しますnot質問で要求したとおりのカウント。
次のコマンドは、カウント(コマンドBaseNameを共有する個別のファイルセットの数)をvar
に保存します。これは、より便利な一般的なコマンドです。
$var = (Get-ChildItem $i).BaseName | Group-Object | ?{ $_.Count -gt 1 } | Measure-Object | Select-Object -ExpandProperty Count
例1-共通のベース名(テスト)を共有する1セットのファイル
> Get-ChildItem
Directory: F:\test
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 12/02/2020 12:18 1272 test.txt
-a---- 16/02/2020 17:51 72 test.cmd
-a---- 19/11/2019 21:50 19 output.txt
-a---- 08/12/2019 18:47 119 GetBits.cmd
-a---- 31/12/2019 14:31 26876158 SystemEvents.xml
-a---- 08/01/2020 21:30 845 notepad++ regexp answer template.txt
-a---- 12/02/2020 11:00 17755 usb.csv
-a---- 01/03/2020 10:05 264 index.jpg
-a---- 01/03/2020 10:09 264 New.txt
> (Get-ChildItem $i).BaseName | Group-Object | ?{ $_.Count -gt 1 } | Measure-Object | Select-Object -ExpandProperty Count
1
>
例2-共通のベース名を共有する2つのファイルセット(テストと新規)
> Get-ChildItem
Directory: F:\test
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 12/02/2020 12:18 1272 test.txt
-a---- 16/02/2020 17:51 72 test.cmd
-a---- 19/11/2019 21:50 19 output.txt
-a---- 08/12/2019 18:47 119 GetBits.cmd
-a---- 31/12/2019 14:31 26876158 SystemEvents.xml
-a---- 08/01/2020 21:30 845 notepad++ regexp answer template.txt
-a---- 12/02/2020 11:00 17755 usb.csv
-a---- 01/03/2020 10:05 264 index.jpg
-a---- 01/03/2020 10:09 264 New.txt
-a---- 08/03/2020 15:35 0 1
-a---- 08/03/2020 15:52 0 New.xxx
> (Get-ChildItem $i).BaseName | Group-Object | ?{ $_.Count -gt 1 } | Measure-Object | Select-Object -ExpandProperty Count
2
>