windows - 在目录中移动和操作文件 Powershell

  显示原文与译文双语对照的内容
107 0

我正在尝试将文件列表从一个目录移动到另一个目录。 当项目被移动到新目录时,我想自动组织它们。

我。i 我有上千个档案的文件夹。

所有文件名都相对于用户的用户名。 有些用户在这个文件夹中有多个文件,所以它在 NAME的末尾附加一个数字。 换句话说,susy.txtsusy1.txtsusy2.txtcarl.txtcarl1.txt,等等 。

我试图为每个拥有多个文件的用户创建一个特定文件夹( 在新目录中),并将所有相关文件移动到该文件夹。 所以我注意到有多个超对称的文档。 所以我想创建一个名为超对称的文件夹,并将 susy.txtsusy1.txtsusy2.txt 放入其中。 等等所有文件。

是否可以作为批处理文件,如果有的话,有人可以指向我做这个的正确方向。 我在编写批处理脚本时有少量的知识,并想把这个作为一个机会来学习更多。


这与我之前问过的一个问题非常相似。 Powershell文件中的文件和文件夹操作。 我对我收到的回复非常感谢,他们帮助了我。 我在 Inbar的答案正是我所需要的,当时。 但是,我被迫做了修改,我自己尝试过。

Inbar的 Adi


Get-ChildItem |?{$_.Name -match '(D+)d*.txt'} | %{
 md $matches[1] -ea SilentlyContinue 
 Move-Item $_ $matches[1]
}

Short,我所需要的。 但是它只适用于那些要被组织但在同一父文件夹中的文件。

这是我尝试的:


Get-ChildItem –path"P:My DocumentsOrg TestTest1" | 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 DocumentsOrg TestTest.ps1:3 char:3
 + Move-Item -Path P:'My Documents''Org Test'Test1$_ -destination P:'M.. .
 + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 + CategoryInfo : WriteError: (P:My Documents...t1Johnny123.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 DocumentsPST Org ScriptTest2" -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行代码中完成。 这看起来有点多余。 但我怎么知道。

谢谢

时间: 原作者:

87 2

尝试这个:


$srcPath = 'P:My DocumentsPST Org ScriptTest1'
$dstPath = 'P:My DocumentsPST Org ScriptTest2'
Get-ChildItem $srcPath | Where {$_.Name -match '(D+)d*.txt'} | 
 Foreach {$targetDir = Join-Path $dstPath $matches[1]
 md $targetDir -ea 0
 Move-Item $_ $targetDir -WhatIf}

原作者:
59 4

我已经使用以下方法解决了我的问题:


Get-ChildItem –path P:'My Documents''PST Org Script'Test1 | Foreach-Object{ 
 move-item -Path $_.fullname -Destination"P:My DocumentsPST Org ScriptTest2" -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]
} 

但是我觉得,通过在原始问题中输入的方法的变化,有一种更简单的方法。

原作者:
...