Powershell 仅针对包含特定字符串的文件夹名称移动子目录中的项目
Powershell move items in subdirectories only for a folder name that contains a certain string
假设有一堆包含不同子文件夹的文件夹。下面的示例有一个用户 1 的根文件夹和该文件夹下的 3 个子目录。如何创建一个循环脚本,将项目从仅包含字符串 "upload" 的子目录向上移动到用户文件夹。
->user1
--->user1upload
--->randomfolder1
--->randomfolder2
->user2
--->user2upload
--->randomfolder1
--->randomfolder2
到目前为止,我有以下代码将子目录中的所有文件移动到根用户文件夹。
$files = Get-ChildItem '*\*\*'
Get-ChildItem $files | Move-Item -Destination { $_.Directory.Parent.FullName }
$files | Remove-Item -Recurse
我想从中删除其他文件夹,这样只有名称中带有 'upload' 的文件夹才会将文件内容移至根用户文件夹。我该怎么做?
编辑:
也没有运气尝试过
$files = Get-ChildItem '*\*\*' | Select-String -Pattern "upload"
Get-ChildItem $files | Move-Item -Destination { $_.Directory.Parent.FullName }
编辑 2(2019 年 3 月 21 日)
需要明确的是,他的是一个 SFTP 程序。 C:/usrs 中有一个用户文件夹列表,我想将文件从 c:/usrs/user1/user1upload 移动到 C:/usrs/user1
这使用 PowerShell 5 来指定 -Directory
。如果您还没有使用 PowerShell 5,可以通过不同的方式完成。
搜索目录,然后在目录中搜索文件。
当您确信文件将被正确移动时,从 Move-Item
cmdlet 中删除 -WhatIf
。
Get-ChildItem -Directory -Path $Env:USERPROFILE -Filter '*upload*' |
ForEach-Object {
Get-ChildItem -File -Path $_.FullName |
ForEach-Object {
Move-Item -Path $_.FullName -Destination $_.PSParentPath -WhatIf
}
}
我以为您在 "user's" 目录中,您通常无权访问所有目录。多一级目录搜索。
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
}
}
假设有一堆包含不同子文件夹的文件夹。下面的示例有一个用户 1 的根文件夹和该文件夹下的 3 个子目录。如何创建一个循环脚本,将项目从仅包含字符串 "upload" 的子目录向上移动到用户文件夹。
->user1
--->user1upload
--->randomfolder1
--->randomfolder2
->user2
--->user2upload
--->randomfolder1
--->randomfolder2
到目前为止,我有以下代码将子目录中的所有文件移动到根用户文件夹。
$files = Get-ChildItem '*\*\*'
Get-ChildItem $files | Move-Item -Destination { $_.Directory.Parent.FullName }
$files | Remove-Item -Recurse
我想从中删除其他文件夹,这样只有名称中带有 'upload' 的文件夹才会将文件内容移至根用户文件夹。我该怎么做?
编辑: 也没有运气尝试过
$files = Get-ChildItem '*\*\*' | Select-String -Pattern "upload"
Get-ChildItem $files | Move-Item -Destination { $_.Directory.Parent.FullName }
编辑 2(2019 年 3 月 21 日) 需要明确的是,他的是一个 SFTP 程序。 C:/usrs 中有一个用户文件夹列表,我想将文件从 c:/usrs/user1/user1upload 移动到 C:/usrs/user1
这使用 PowerShell 5 来指定 -Directory
。如果您还没有使用 PowerShell 5,可以通过不同的方式完成。
搜索目录,然后在目录中搜索文件。
当您确信文件将被正确移动时,从 Move-Item
cmdlet 中删除 -WhatIf
。
Get-ChildItem -Directory -Path $Env:USERPROFILE -Filter '*upload*' |
ForEach-Object {
Get-ChildItem -File -Path $_.FullName |
ForEach-Object {
Move-Item -Path $_.FullName -Destination $_.PSParentPath -WhatIf
}
}
我以为您在 "user's" 目录中,您通常无权访问所有目录。多一级目录搜索。
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
}
}