Jos*_*eld 3 string powershell move subdirectory
我正在使用PowerShell,我正在努力解决这个问题.
在目录C:\ _dir_1中,我有许多子文件夹(sub_1,sub_2,...,sub_n).它们每个都包含几个文本文件.对于每个子文件夹i = 1,2,...,n,我想将包含字符串"My-String"的文本文件移动到目录C:\ dir_2\sub_i.
例如,如果路径C:\ dir1\sub_5中的文件X包含字符串"My-String",我想将其移动到位置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\$_"}}
Run Code Online (Sandbox Code Playgroud)
所以,基本上,我尝试做的是:在dir_1中的foreach子文件夹,获取包含该字符串的文件,并将它们移动到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))
}
Run Code Online (Sandbox Code Playgroud)
Select-String可以为其管道输入获取文件路径.我们将所有正在$dir1使用的文件提供-recurse给子文件夹中的所有子文件.$results将包含匹配对象的数组.其中一个属性是匹配文件的路径.
通过所有这些$results,然后我们每个都从路径中提取父文件夹.然后将该文件夹与路径组合$dir2以将其移动到目标位置.
我们在这里有几个假设.如果需要,我们可以考虑一些.我会先提到一个我认识的问题.
-Recurse创建此警告.| 归档时间: |
|
| 查看次数: |
2587 次 |
| 最近记录: |