我已经批量更改了多个文件,这些文件都以我需要它们的文件夹的前缀开头。
这些文件位于另一个位置,例如桌面上的文件夹。
例如:
101AA0001.dat
101AA0002.dat
102AA0001.dat
102AA0002.dat
例如,目标文件夹将是:
C:\destfolder\101\或 C:\destfolder\102\
101开头的文件需要放到101文件夹,102开头的文件放到102文件夹。
我可以找到一些基于文件名创建文件夹的脚本。但在这种情况下,文件夹已经存在。我也确定这些文件不存在,所以我不必覆盖文件或其他东西。
我想对于非常了解 PowerShell 的人来说这很容易,但我不知道该怎么做。有人可以帮帮我吗?这可以为我节省很多时间。
我尝试使用以下规则移动文件:
Move-Item -Path C:\Users\Username\Desktop\test*.dat -Destination C:\Users\Username\Desktop\test2\ -include "*.dat"
但它会复制除文件之外的整个文件夹。
最佳答案
您可以使用如下代码轻松做到这一点:
$sourceFolder = Join-Path -Path $env:USERPROFILE -ChildPath 'Desktop'
$destination = 'C:\destfolder'
Get-ChildItem -Path $sourceFolder -File -Filter '*.dat' | ForEach-Object {
$targetFolder = Join-Path -Path $destination -ChildPath $_.Name.Substring(0, 3)
# if the target folder does not exist yet, create it
if (!(Test-Path -Path $targetFolder -PathType Container)) {
$null = New-Item -Path $targetFolder -ItemType Directory
}
$_ | Move-Item -Destination $targetFolder -WhatIf
}
-WhatIf
开关显示会发生在控制台中而不实际执行移动。如果您对输出的内容感到满意,请移除该开关。
关于powershell - 将带前缀的文件放在带编号的文件夹中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59355862/