enter image description here 我有一个在txt文件中包含用户ID的列表,以及一个包含许多文件和文件夹的文件夹,其中文件名包含用户ID。我正在尝试创建一个脚本,该脚本将从txt文件中查找每个用户的ID,在包含所有文件的文件夹中查找包含用户ID的文件,然后将匹配的文件移至以完整文件夹或具有以下名称的文件名命名的EXPORTED文件夹中被发现。 文件名包含名字,姓氏和用户ID
我在下面尝试过此操作,但这只会从txt文件中仅移动具有确切用户ID的文件夹...它不会移动文件列表中包含用户ID的文件/文件夹
$aryfiles = Get-Content "e:\new\text.txt"
$sourcedir = "e:\new\"
$destinationDir = "e:\new\new"
$sourceFiles = Get-ChildItem -Path $sourceDir -Recurse -Include $aryfiles | Select-Object -ExpandProperty FullName
foreach ($sourceFile in $SourceFiles) {
Move-Item $sourcefile -Destination $destinationDir
}
答案 0 :(得分:0)
用于Get-ChildItem
的过滤器中没有通配符。使用通配符创建一个新列表,并将该列表用于Get-ChildItem
:
$NewAryFiles = $aryfiles | foreach {"*$_*"}
$sourceFiles = Get-ChildItem -Path $sourceDir -Recurse -Include $NewAryFiles | Select-Object -ExpandProperty FullName
要使用用户ID的名称创建文件夹,请使用New-Item
。 New-Item
创建一个输出,您可以捕获该输出以使用新生成的文件夹。
$aryfiles | foreach {
$SourceFile = Get-ChildItem -Path $sourceDir -Recurse -filter "*$_*"
$NewFolder = New-Item -ItemType "directory" -Path $destinationDir -Name $_
foreach ($File in $SourceFile) {
Move-Item -Path $($File.FullName) -Destination $NewFolder
}
}