【问题标题】:power shell to move specific filespowershell 移动特定文件
【发布时间】:2019-06-15 22:03:02
【问题描述】:

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 
} 

【问题讨论】:

  • 请编辑问题并添加更多详细信息。包括您目前编写的脚本、一些示例数据、期望结果和实际结果。

标签: powershell


【解决方案1】:

用于Get-ChildItem 的过滤器中没有通配符。使用通配符创建一个新列表并将此列表用于Get-ChildItem

$NewAryFiles = $aryfiles  | foreach {"*$_*"}
$sourceFiles = Get-ChildItem -Path $sourceDir -Recurse -Include $NewAryFiles | Select-Object -ExpandProperty FullName

要使用用户ID 的名称创建文件夹,请使用New-ItemNew-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
    }
}

【讨论】:

  • 我可以再问一件事.. 假设在同一个文件中使用用户 ID,我添加名字和姓氏...所以它至少会查找 2 件事,以太名字和 id或姓氏和id,当在文件名中找到时,将它们与现在一样移动,但要添加相应的名字和姓氏?整个想法是我有一个文件夹,其中包含员工的一堆文件,包括他们的名字姓氏和文件名中的用户 ID。我只想将它们整理到一个新文件夹中,命名为 FirstName, LastName UserID :)
  • 吉普这是可能的。但在这种情况下,我建议使用 .CSV 文件。它是一个表格,powershell 可以使用每列的标题来处理。创建$SourceFileget-ChildItem 需要| where {...} 而不是-filter 匹配$_.Name 与每个标题。但是,由于 csv 是一个全新的章节,我建议您对其进行一些测试,并可能创建一个新问题。
猜你喜欢
  • 2015-03-18
  • 2022-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-29
相关资源
最近更新 更多