Saya ingin menggabungkan dua direktori dan tanda bintang "*", untuk digunakan dalam cmdlet Copy-Item. Saat ini saya memiliki sesuatu seperti berikut

$fooDir = "foo"
$barDir = "bar"
$srcDir = Join-Path -Path $fooDir -ChildPath $barDir
$srcFiles = Join-Path -Path $srcDir -ChildPath "*"

$destDir = "buzz"
Copy-Item -Path "$srcFiles" -Destination $destDir -Recurse

Bisakah saya mengurangi dua baris Join-Path dengan cara yang sama amannya lintas platform? Atau lebih baik lagi, dapatkah saya memberi tahu Cmdlet Copy-Item bahwa saya ingin file direktori disalin tanpa memerlukan tanda bintang?

Sintaks Join-Path $fooDir $basrDir "*" tampaknya tidak berfungsi dengan tanda bintang.

1
Toby 10 Mei 2021, 00:57

1 menjawab

Jawaban Terbaik

Jika skrip lintas platform Anda hanya berjalan di PowerShell (Core) v6+ di Windows, Anda memang dapat memanfaatkan Gabung -Path's -AdditionalChildPath parameter, yang, dalam kombinasi dengan -Path, Anda dapat menggunakan secara posisi sebagai berikut:

$srcFiles = Join-Path $fooDir $barDir *

Namun, Anda juga dapat memanfaatkan fakta bahwa PowerShell memungkinkan Anda menggunakan \ dan / secara bergantian sebagai pemisah jalur di jalur sistem file, jadi gunakan / secara eksplisit bekerja di Windows juga, bahkan di Windows PowerShell:

$srcFiles = "$fooDir/$barDir/*"

Perhatikan bahwa jika Anda ingin memastikan bahwa file dan subdirektori tersembunyi juga disalin, pastikan juga untuk meneruskan parameter -Force ke Copy-Item panggilan.

1
mklement0 9 Mei 2021, 23:09