Powershell查找和移动项目
嘿,我需要使用powershell脚本移动很多文件,我需要这方面的帮助 根目录如下所示Powershell查找和移动项目,powershell,find,move,Powershell,Find,Move,嘿,我需要使用powershell脚本移动很多文件,我需要这方面的帮助 根目录如下所示 > tree . \ ├───Folder1 │ ├───Sub1 │ │ └───Stockfile │ └───Sub2 └───Folder2 ├───Sub1 │ └───Stockfile └───Sub2 脚本需要找到StockFile并将其移动到每个Main文件夹的Sub2文件夹中 我制作了以下脚本来显示列表中的所有StockFile: $va
> tree .
\
├───Folder1
│ ├───Sub1
│ │ └───Stockfile
│ └───Sub2
└───Folder2
├───Sub1
│ └───Stockfile
└───Sub2
脚本需要找到StockFile并将其移动到每个Main文件夹的Sub2文件夹中
我制作了以下脚本来显示列表中的所有StockFile:
$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\1.txt
}
我知道这并不漂亮,但它很管用;) 尝试以下操作:
Get-ChildItem -File -Recurse -Filter *_stock.csv |
Move-Item -WhatIf -Destination { $_.FullName -replace '^(.*)\\Sub1\\','$1\Sub2\' }
该方法从每个股票文件的完整路径中提取路径前缀,直到..\Sub1
,并将..\Sub2
作为目标(目录)路径
这样,股票文件将从..\Sub1
子树中的任何位置直接移动到..\Sub2
中
注:
向您显示首先会发生什么;将其移除以执行实际移动-WhatIf
- 假设库存文件路径只包含一个
组件,并且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\\','$1\Sub2\') }
Sub2
文件夹的名称是否一致?您如何“知道”目标文件夹的名称?它是否总是显式命名为Sub2
?文件夹不是命名为Sub1和Sub2。大约有400个文件夹,从TM开始,然后是6个随机数OK我删除了-WhatIf,因为它似乎有效。但是如果没有-WhatIf语句,我会得到以下消息:Move Item:找不到路径的一部分。[Move Item],DirectoryNotFoundException+FullyQualifiedErrorId:MoveFileInfoItemIOError,Microsoft.PowerShell.Commands.MoveItemCommandOk现在可以工作了,下一个挑战是从以TM*开头的文件夹中移动文件。因此,文件夹名称类似于TM123456、TM456789等等。这些文件夹中有两个子文件夹。如何从以TM开头的文件夹中移动文件?我刚刚意识到,使用ScriptBlock参数,完全不需要循环或ForEach对象就可以完成此操作-请查看我的更新。至于后续问题,请将其作为一个新问题发布(完成此操作后,请随时通知我).这就是我提出的解决方案,鉴于我的答案更为简洁,并提供了解释,请接受我的答案并删除此答案。请允许我向新来者提供标准建议。如果答案解决了您的问题,请单击大复选标记接受答案(✓) 在它旁边,也可以选择向上投票(向上投票需要至少15个信誉点)。如果您发现其他答案有帮助,请向上投票。接受和向上投票有助于未来的读者。请参阅。