Jadi katakanlah ada banyak folder yang berisi sub folder yang berbeda. Contoh di bawah ini memiliki folder root dari sub-direktori pengguna 1 dan 3 di bawah folder itu. Bagaimana saya bisa membuat skrip perulangan untuk memindahkan item dari hanya sub-direktori yang berisi string "unggah" ke atas satu tingkat ke folder pengguna.

->user1
--->user1upload
--->randomfolder1
--->randomfolder2
->user2
--->user2upload
--->randomfolder1
--->randomfolder2

Sejauh ini saya memiliki kode berikut yang memindahkan semua file di sub-direktori ke folder pengguna root.

$files = Get-ChildItem '*\*\*'
Get-ChildItem $files | Move-Item -Destination { $_.Directory.Parent.FullName }
$files | Remove-Item -Recurse

Saya ingin menghilangkan folder lain dari ini sehingga hanya folder dengan 'unggah' dalam namanya yang konten filenya dipindahkan ke folder pengguna root. Bagaimana saya bisa melakukan ini?

EDIT: juga mencoba ini tanpa hasil

$files = Get-ChildItem '*\*\*' | Select-String -Pattern "upload"
Get-ChildItem $files | Move-Item -Destination { $_.Directory.Parent.FullName }

EDIT2 (21/3/2019) Yang jelas, dia untuk program SFTP. Ada daftar folder pengguna di C:/usrs dan saya ingin memindahkan file dari c:/usrs/user1/user1upload ke C:/usrs/user1

0
D. Diaz 20 Maret 2019, 20:08

1 menjawab

Jawaban Terbaik

Ini menggunakan PowerShell 5 untuk menentukan -Directory. Ini dapat dilakukan dengan cara yang berbeda jika Anda belum menggunakan PowerShell 5.

Cari direktori, lalu cari file di dalam direktori.

Jika Anda yakin file akan dipindahkan dengan benar, hapus -WhatIf dari cmdlet Move-Item.

Get-ChildItem -Directory -Path $Env:USERPROFILE -Filter '*upload*' |
    ForEach-Object {
        Get-ChildItem -File -Path $_.FullName |
            ForEach-Object {
                Move-Item -Path $_.FullName -Destination $_.PSParentPath -WhatIf
            }
    }

Saya pikir Anda berada di direktori "pengguna" di mana Anda biasanya tidak memiliki izin untuk mengakses semua. Satu lagi tingkat pencarian direktori.

Get-ChildItem -Directory -Path 'C:\Users\*\*upload*' |
    ForEach-Object {
        Get-ChildItem -File -Path $_.FullName |
            ForEach-Object {
                Move-Item -Path $_.FullName -Destination $(Split-Path -Parent $_.PSParentPath) -WhatIf
            }
    }
0
lit 21 Maret 2019, 13:21