Powershell:将指定目录中的所有文件放入单独的唯一命名的子目录中

问题描述 投票:0回答:2

我有一个现有目录,比方说“ C:\ Users \ Test”,其中包含文件(具有各种扩展名)和子目录。我正在尝试编写一个Powershell脚本,该脚本会将“ C:\ Users \ Test”中的每个文件放入一个唯一命名的子目录中,例如“ \ 001”,“ \ 002”等,而忽略任何现有子目录和其中的文件。示例:

运行脚本之前:

C:\Users\Test\ABC.xlsx
C:\Users\Test\QRS.pdf
C:\Users\Test\XYZ.docx
C:\Users\Test\Folder1\TUV.gif

运行脚本后:

C:\Users\Test\001\ABC.xlsx
C:\Users\Test\002\QRS.pdf
C:\Users\Test\003\XYZ.docx
C:\Users\Test\Folder1\TUV.gif

注意:每次在一批文件上运行脚本时,文件的名称,扩展名和数量都会有所不同。文件放置到新的编号子目录中的顺序并不重要,只是每个子目录都有一个简短的唯一名称。我还有另一个脚本,它将对所有子目录应用一致的顺序命名约定,但是首先我需要将所有文件放入单独的文件夹中,同时保持其本机文件名。

这是我到目前为止的位置:

$id = 1
Get-ChildItem | where {!$_.PsIsContainer}| % {
MD ($_.root +($id++).tostring('000'));
MV $_ -Destination ($_.root +(001+n))
}

MD表达式成功创建了子目录,但是我不确定如何编写MV表达式以将文件实际移入它们。我写了(001 + n)来说明我要使用的概念,其中n从0增加到文件总数。也许需要一种完全不同的方法。

windows powershell mkdir get-childitem
2个回答
0
投票
$id = 1
Get-ChildItem C:\Test\ -file  | % {
    New-Item -ItemType Directory -Path C:\Test -Name $id.tostring('000')
    Move-Item $_.FullName -Destination C:\Test\$($id.tostring('000'))
    $id++
}

Move-Item是您要寻找的。


0
投票

好吧,想想我知道了。依次运行以下脚本会产生所需的结果。诀窍是在运行MV表达式时重置$ id增量。不过,这可能会有所改善,因此,如果您有更好的方法,请告诉我!编辑:@ArcSet在单个脚本中提供了更好的答案!谢谢!

$id = 1
Get-ChildItem | where {!$_.PsIsContainer}| % {
MD ($_.root +($id++).tostring('000'))
}

$id = 1
Get-ChildItem | where {!$_.PsIsContainer}| % {
MV $_ -Destination($_.root +($id++).tostring('000'))
}
© www.soinside.com 2019 - 2024. All rights reserved.