これがPowerShellに相当するものです：
`` `
$ dir1 = 'c：\ path \ to \ dir1'
$ dir2 = 'c：\ path \ to \ dir2'
$ cmd1 = 'あなたのpowershellコマンドはここ{} {}'

get -childitem -path $ dir1 -recurse |where -object {$ _。extension -eq '.csv'} |foreach-object {
    $ file1 = $ _。fullname
    $ file2 = join -path -path $ dir2 -childpath $ file1.substring（$ dir1.length）
    ＆$ cmd1 -f $ file1、$ file2
}
`` `
説明：

get -childitem -path $ dir1 -recurse dir1のすべてのファイルとディレクトリを再帰的にリストします
where -object {$ _。extension -eq '.csv'}は、リストを.csvファイルのみにフィルターします
foreach-objectループフィルタリングされたリストに
$ _は各.csvファイルを表します
$ _。fullName現在の.csvファイルの完全なパスを取得します
結合パスは、dir2のパスを構築します
$ file1.substring（$ dir1.length）dir1でファイルの相対パスを取得します
＆サブプロセスを呼び出して、引数としてファイルパスを使用してコマンド$ cmd1を実行します
Here's the PowerShell equivalent:
```
$dir1 = 'C:\path\to\dir1'
$dir2 = 'C:\path\to\dir2'
$cmd1 = 'your Powershell command here {} {}'

Get-ChildItem -Path $dir1 -Recurse | Where-Object { $_.Extension -eq '.csv' } | ForEach-Object {
    $file1 = $_.FullName
    $file2 = Join-Path -Path $dir2 -ChildPath $file1.Substring($dir1.Length)
    & $cmd1 -f $file1, $file2
}
```
Explanation:

Get-ChildItem -Path $dir1 -Recurse recursively lists all files and directories in dir1
Where-Object { $_.Extension -eq '.csv' } filters the list to only .csv files
ForEach-Object loops over the filtered list
$_ represents each .csv file
$_.FullName gets the full path of the current .csv file
Join-Path constructs the path in dir2
$file1.Substring($dir1.Length) gets the relative path of the file in dir1
& invokes a subprocess to run the command $cmd1 with the file paths as arguments