Powershell 查找和移动项目

Powershell find and move items

嘿,我需要使用 powershell 脚本移动很多文件,我有点需要这方面的帮助。

根如下

> tree .
\
├───Folder1
│   ├───Sub1
│   │   └───Stockfile
│   └───Sub2
└───Folder2
    ├───Sub1
    │   └───Stockfile
    └───Sub2

脚本需要找到库存文件并将它们移动到每个主文件夹的 Sub2 文件夹中。

我制作了以下脚本来显示列表中的所有库存文件:

$var = get-childitem -Filter *stock* -recurse
foreach ($file in $var) {
write-host ($file.FullName)
}

假设文件夹都称为 sub1 和 sub2。

$var = get-childitem -Filter *stock* -recurse
foreach ($file in $var) {
    $parent = Split-Path $file.fullname -parent
    Move-Item $file.FullName -destination $parent\..\sub2.txt
}

我知道这不是很漂亮,但它确实有效 ;)

尝试以下操作:

Get-ChildItem -File -Recurse -Filter *_stock.csv |
  Move-Item -WhatIf -Destination { $_.FullName -replace '^(.*)\Sub1\','\Sub2\' }

该方法从每个库存文件的完整路径中提取到 ...\Sub1 的路径前缀,并使 ...\Sub2 成为目标(目录)路径。

这样,股票文件从 ...\Sub1 子树中的任何位置直接移动到 ...\Sub2

注:

  • -WhatIf 向您展示了 首先发生的事情;删除它以执行实际移动。

  • 假设库存文件路径仅包含[=36​​=]一个 Sub1组件,并且在Sub1 子树。

  • -replace 将其第一个操作数解释为 正则表达式 ,这就是 \ 字符的原因。必须转义为 \ 才能被识别为文字;实际文件夹名称中的字符也可能需要转义(但在这种情况下不需要)。

    • 如果您事先不知道文件夹名称,您可以使用 [regex]::Escape($folderName)
    • 安全地转义它

我是这样实现的,非常感谢。

    $var = get-childitem -Filter *_stock.csv -recurse
foreach ($file in $var)
 { Move-Item $file.FullName ($file.FullName -replace '^(.*)\Sub1\','\Sub2\') }