gpt4 book ai didi

string - 将包含字符串的文件 move 到与原始文件同名的子文件夹 (PowerShell)

转载 作者:行者123 更新时间:2023-12-02 08:17:38 25 4
gpt4 key购买 nike

我正在使用 PowerShell,这两天我一直在解决这个问题。

在目录 C:\dir_1 中,我有许多子文件夹(sub_1、sub_2、...、sub_n)。每个文件都包含几个文本文件。对于每个子文件夹 i=1,2,...,n,我想将包含字符串“My-String”的文本文件 move 到目录 C:\dir_2\sub_i。

例如,如果路径 C:\dir1\sub_5 中的文件 X 包含字符串“My-String”,我想将其 move 到位置 C:\dir_2\sub_5。目标文件夹已存在。

我尝试了以下代码的多次修改,但不起作用:

Get-ChildItem "C:\dir_1" | Where-Object {$_.PSIsContainer -eq $True} | Foreach-Object {Get-ChildItem "C:\dir_1\$_" | Select-String -pattern "My-String" | group path | select name | %{Move-Item $_.name "C:\dir_2\$_"}}

所以,基本上,我尝试做的是:foreach dir_1 中的子文件夹,获取包含该字符串的文件并将它们 move 到 dir_2 中具有相同名称的子文件夹中。我尝试对该代码进行一些小的修改,但我无法避免我的错误。主要错误是“move-item:不支持给定的路径格式”...有帮助吗?

最佳答案

我觉得我可以做得更好,但这是我的第一个方法

$dir1 = "C:\temp\data\folder1"
$dir2 = "C:\temp\data\folder2"

$results = Get-ChildItem $dir1 -recurse | Select-String -Pattern "asdf"

$results | ForEach-Object{
$parentFolder = ($_.Path -split "\\")[-2]
Move-Item -Path $_.Path -Destination ([io.path]::combine($dir2,$parentFolder))
}

Select-String 可以为其管道输入采用文件路径。我们使用 -recurse 向其提供 $dir1 下的所有文件,以获取子文件夹中的所有子文件。 $results 将包含匹配对象的数组。属性之一是匹配文件的路径。

有了所有这些 $results,我们就会遍历每个结果并从路径中提取父文件夹。然后将该文件夹与路径 $dir2 结合起来,以便将其 move 到目的地。

我们在这里采取了几个假设。如果需要的话,我们可以考虑一些。我会首先提到我知道可能会成为问题的一个。

  1. 您的文件夹在“sub_1、sub_2、...、sub_n”下不应有任何其他子文件夹,否则它们将尝试错误地 move 。这可以通过更多的字符串操作来解决。为了使用 -Recurse 使代码简洁,创建了这个警告。

关于string - 将包含字符串的文件 move 到与原始文件同名的子文件夹 (PowerShell),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29804721/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com