从powershell的子文件夹中移动包含特定文本的文件



我试图循环通过子文件夹从一个文件夹(在一个目录中)与excel文件,其中包含在文件名中的特定名称,并将它们移动到另一个文件夹。我有以下代码,但它似乎不工作:

$RootFolder = "C:Usersfiles"
$SubFolders = Get-ChildItem -Path $RootFolder -Directory
$TextToFind = 'text'
$DestinationDirectory = 'C:Usersmove_here'
Foreach($SubFolder in $SubFolders)
{ Get-ChildItem -Path $SubFolder -Filter '*.xlsx' -File -Recurse|
where {(Get-Content $_.FullName) -match $TextToFind} |
Move-Item -Destination $DestinationDirectory }

如果我没有弄错的话,它应该足以改变变量的位置,使移动工作。在脚本下面修改:

$RootFolder = "C:Usersfiles"
$SubFolders = Get-ChildItem -Path $RootFolder -Directory
$TextToFind = 'text'
$DestinationDirectory = 'C:Usersmove_here'
Foreach($SubFolder in $SubFolders)
{ Get-ChildItem -Path $SubFolder -Filter '*.xlsx' -File -Recurse|
where {$Subfolder -match $TextToFind} |
Move-Item -Destination $DestinationDirectory }

这可能是我不完全理解这个问题,但为什么不使用-Filter来代替Where-Object子句呢?

$RootFolder = "C:Usersfiles"
$DestinationDirectory = 'C:Usersmove_here'
$TextToFind = 'text'
$SubFolders = Get-ChildItem -Path $RootFolder -Directory
foreach ($folder in $SubFolders) {
Get-ChildItem -Path $folder.FullName -Filter "*$TextToFind*.xlsx" -File -Recurse |
Move-Item -Destination $DestinationDirectory -WhatIf
}

我已经将-WhatIf开关添加到Move-Item cmdlet中,因此在测试时没有实际移动。一旦您满意控制台中显示的内容是OK的,请移除-WhatIf安全开关并再次运行

最新更新