我有多个文件要将每个文件复制到同名的文件夹
例如,文件
orange_file100 , orange_file200 , orange_file300 , apple_file120 , apple_file150
我想将每个文件移动到包含部分文件名的文件夹,例如橙色和苹果,所以结果将是
orange\orange_file100
orange\orange_file200
orange\orange_file300
apple\apple_file120
apple\apple_file150
如果我使用Get-ChildItem
然后使用ForEach{Copy-Item)
,我该如何通过powershell执行此操作?
答案 0 :(得分:0)
您可以Get-Childitem
使用-File
或-Directory
来抓取文件夹中的文件或文件夹,这样您就不会抓住文件夹并尝试将其放入自身。
例如,下面的代码只会获取当前目录中的文件
Get-Childitem -File
然后,您可以使用一些正则表达式来拆分名称,以便获得水果名称,例如
$String.split('_')[0]
您应该将其插入列表或数组或其他内容以存储它,但现在您有一个文件和水果名称列表。
现在,您可以遍历列表并开始将文件移动或复制到正确的文件夹结构
Foreach($file in $FileList){
if($file.name -matches $Fruitname){
if($file.name -notmatch $pwd.path ){
mkdir $file.name
cd $file.name
move-item $file.fullname $pwd
}
}
}
上面的代码只是一个快速尝试。它可能不会在第一次工作,你应该做出调整,以了解你在做什么。
一些注意事项
$pwd
获取当前目录。我假设Get-Childitem
以正确的顺序返回文件列表,因此您将获得Orange_100,然后是Orange_200,依此类推Get-Childitem
返回一个powershell对象。可以使用$_.name
访问文件名,也可以使用$_.fullname
-matches
不起作用,您还可以尝试-like
或-in
记得要四处玩,找到最适合你的。