Powershell:将指定目录中的所有文件放入单独的、唯一命名的子目录中
Powershell: Place all files in a specified directory into separate, uniquely named subdirectories
我有一个现有目录,比方说 "C:\Users\Test",其中包含文件(具有各种扩展名)和子目录。我正在尝试编写一个 Powershell 脚本,它将 "C:\Users\Test" 中的每个文件放入一个唯一命名的子目录中,例如“\001”、“\002”等,同时忽略其中的任何现有子目录和文件.示例:
在 运行ning 脚本之前:
C:\Users\Test\ABC.xlsx
C:\Users\Test\QRS.pdf
C:\Users\Test\XYZ.docx
C:\Users\Test\Folder1\TUV.gif
在 运行ning 脚本之后:
C:\Users\Test[=11=]1\ABC.xlsx
C:\Users\Test[=11=]2\QRS.pdf
C:\Users\Test[=11=]3\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 递增到文件总数。或者可能需要一种完全不同的方法。
$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
就是您要找的。
好的,我想我明白了。 运行 以下脚本按顺序产生所需的结果。诀窍是在 运行 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'))
}
我有一个现有目录,比方说 "C:\Users\Test",其中包含文件(具有各种扩展名)和子目录。我正在尝试编写一个 Powershell 脚本,它将 "C:\Users\Test" 中的每个文件放入一个唯一命名的子目录中,例如“\001”、“\002”等,同时忽略其中的任何现有子目录和文件.示例:
在 运行ning 脚本之前:
C:\Users\Test\ABC.xlsx
C:\Users\Test\QRS.pdf
C:\Users\Test\XYZ.docx
C:\Users\Test\Folder1\TUV.gif
在 运行ning 脚本之后:
C:\Users\Test[=11=]1\ABC.xlsx
C:\Users\Test[=11=]2\QRS.pdf
C:\Users\Test[=11=]3\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 递增到文件总数。或者可能需要一种完全不同的方法。
$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
就是您要找的。
好的,我想我明白了。 运行 以下脚本按顺序产生所需的结果。诀窍是在 运行 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'))
}