嘿,我需要使用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)
}
答案 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\') }