我正试图将文件列表从一个目录移动到另一个目录。问题是,当项目移动到新目录时,我想自动组织它们。跨目录移动和操作文件 - Powershell
Ex .. 我有一个包含数千个文件名的文件夹。
所有文件名都是相对于用户的用户ID。有些用户在此文件夹中有多个文件,因此它会在名称的末尾附加一个数字。 I.E. susy.txt
,susy1.txt
,susy2.txt
,carl.txt
,carl1.txt
,等...
我所试图做的是创造具有多个文件中的每个用户的特定文件夹(在新目录),并将所有相关文件成夹。所以我注意到有多个susy文件。所以我想要创建一个名为Susy的文件夹,并将susy.txt
,susy1.txt
和susy2.txt
放入其中......等等所有文件。
它甚至有可能做到这一点作为一个批处理文件,如果有的话可以有人指出我在这样做的正确方向吗?我在编写批处理脚本方面有少量知识,并希望以此为契机了解更多信息。
这与我以前问过的问题非常相似。 File and Folder Manipulation in Powershell。我非常感谢收到的回复,他们对我非常有帮助。 的答案Adi Inbar正是我当时所需要的。但是,我不得不作出修改,我自己也尝试过。
阿迪因巴尔的回答:
Get-ChildItem | ?{$_.Name -match '(\D+)\d*\.txt'} | %{
md $matches[1] -ea SilentlyContinue
Move-Item $_ $matches[1]
}
短甜及过这一点,正是我需要的。但它只适用于要组织的文件,但保留在同一个父文件夹中。
这是我曾尝试:
Get-ChildItem –path "P:\My Documents\Org Test\Test1" | Where{$_.Name -match '(\D+)\d*\.txt'} | Foreach{
md P:\'My Documents'\'Org Test'\Test2\$matches[1] -ea SilentlyContinue
Move-Item $_ P:\'My Documents'\'Org Test'\Test2\$matches[1]
}
据我所知,并基本了解这应该工作。但是我收到一个错误说布展项目:当文件已存在无法创建文件。
At P:\My Documents\Org Test\Test.ps1:3 char:3
+ Move-Item -Path P:\'My Documents'\'Org Test'\Test1\$_ -destination P:\'M ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : WriteError: (P:\My Documents...t1\Johnny123.txt:FileInfo) [Move-Item], I
+ FullyQualifiedErrorId : MoveFileInfoItemIOError,Microsoft.PowerShell.Commands.MoveItemCommand
我相信这是在我的舌头上,但我无法得到它。我有非常基本的PowerShell脚本经验,只需要一个快速修复。
编辑:
我已经能够使用该脚本来 “解决” 我的问题:
Get-ChildItem –path P:\'My Documents'\'PST Org Script'\Test1 | Foreach-Object{
move-item -Path $_.fullname -Destination "P:\My Documents\PST Org Script\Test2" -ea SilentlyContinue }
cd P:\'My Documents'\'PST Org Script'\Test2
Get-ChildItem | ?{$_.Name -match '(\D+)\d*\.txt'} | %{
md $matches[1] -ea SilentlyContinue
Move-Item $_ $matches[1]
}
我很好奇。我觉得这可以在我上面的三行代码中完成。这似乎有点多余。但是我知道什么。
感谢