powershell - 将带前缀的文件放在带编号的文件夹中

标签 powershell

我已经批量更改了多个文件,这些文件都以我需要它们的文件夹的前缀开头。
这些文件位于另一个位置,例如桌面上的文件夹。

例如:

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/

相关文章:

c# - 哪个 DLL 包含 Microsoft.Powershell.Command 命名空间下的异常?

powershell - 将名称中包含相同值的文件分组

powershell - 获取内容并显示控制字符,例如`r - 可视化字符串中的控制字符

powershell - 如何使用动态路径、可选参数和数组参数执行另一个 powershell 脚本?

powershell - 为什么 Powershell 环境路径与系统环境路径不同?

powershell - 拆分并将文本/数字添加到文件名

java - 如何在 Powershell 命令中使用 Postgres COPY 命令的 PROGRAM 子句

powershell - 从文件到函数内部的全局范围的点源函​​数

vb.net - 无法通过vb.net应用程序运行Exchange Powershell

PowerShell SNMP 查询支持的语言