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
 นี่คือ PowerShell ที่เทียบเท่า: ``` $dir1 = 'C:\path\to\dir1' $dir2 = 'C:\path\to\dir2' $cmd1 = 'คำสั่ง Powershell ของคุณที่นี่ {} {}' Get-ChildItem -Path $dir1 -เรียกซ้ำ | โดยที่วัตถุ { $_.Extension -eq '.csv' } | ForEach-Object { $file1 = $_.FullName $file2 = Join-Path -Path $dir2 -ChildPath $file1.Substring($dir1.Length) & $cmd1 -f $file1, $file2 } ``` คำอธิบาย: รับ -ChildItem -Path $dir1 -Recurse แสดงรายการไฟล์และไดเร็กทอรีทั้งหมดใน dir1 แบบวนซ้ำ Where-Object { $_.Extension -eq '.csv' } กรองรายการเป็นไฟล์ .csv เท่านั้น ForEach-Object วนซ้ำเหนือรายการที่กรอง $_ แทน ไฟล์ .csv แต่ละไฟล์ $_.FullName รับพาธแบบเต็มของไฟล์ .csv ปัจจุบัน Join-Path สร้างพาธใน dir2 $file1.Substring($dir1.Length) รับพาธสัมพัทธ์ของไฟล์ใน dir1 & เรียกใช้กระบวนการย่อยเพื่อ รันคำสั่ง $cmd1 โดยมีพาธของไฟล์เป็นอาร์กิวเมนต์
spam fails_task lang_mismatch pii not_appropriate hate_speech sexual_content quality toxicity humor helpfulness creativity violence