Powershell查找并移动物品

时间:2016-11-10 16:00:11

标签: powershell find move

嘿,我需要使用powershell脚本移动大量文件,我需要帮助。

根目录如下

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

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

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

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

3 个答案:

答案 0 :(得分:1)

假设文件夹全部称为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\1.txt
}

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

答案 1 :(得分:1)

尝试以下方法:

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

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

这样,库存文件就会从...\Sub1子树中的任何位置直接移到...\Sub2

注意:

  • -WhatIf向您展示首先发生的内容;将其移除以执行实际移动。

  • 假设库存文件路径仅包含一个 Sub1组件,并且Sub1子树中没有具有重复名称的库存文件。

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

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

答案 2 :(得分:0)

我以这种方式工作,非常感谢。

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