我正在尝试将文件列表从一个目录移动到另一个目录。问题是,当项目移动到新目录时,我想自动组织它们。
例如..我有一个包含数千个文件名的文件夹。
所有文件名都与用户的用户 ID 相关。某些用户在此文件夹中有多个文件,因此它会在名称的末尾附加一个数字。IE susy.txt
, susy1.txt
, susy2.txt
, carl.txt
, carl1.txt
, 等等...
我想要做的是为每个拥有多个文件的用户创建一个特定的文件夹(在新目录中),并将所有相关文件移动到该文件夹中。所以我注意到有多个 susy 文件。所以我想创建一个名为 Susy 的文件夹并将susy.txt
, susy1.txt
, 和susy2.txt
放入其中......所有文件依此类推。
甚至可以将其作为批处理文件执行,如果可以的话,有人可以指出我这样做的正确方向吗?我对编写批处理脚本有少量的知识,并想以此为契机进一步了解。
这与我之前提出的一个问题非常相似。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]
}
据我所知和基本理解,这应该可行......但我收到一条错误消息,提示 Move-Item : Cannot create a file when that file has already exists。
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]
}
我好奇。我觉得这可以在我上面的 3 行代码中完成。这似乎有点多余。但我知道什么。
谢谢