windows - 根据包含 2 个下划线的文件名创建一个文件夹,然后将该文件放入该文件夹中

标签 windows powershell

我尝试使用 PowerShell 为以下文件创建一个文件夹

4_2017-07-16_01-22-52.mp4
4_2017-07-16_01-23-50.mp4
4_2017-07-16_01-24-54.mp4
4_2017-07-16_01-26-21.mp4

我用的是这个方法

https://stackoverflow.com/a/41468253/13002495

问题是它将创建一个目录4然后将文件移动到其中我需要有一个如下所示的目录

4_2017-07-16 或类似 4_2017_07_16 的目录

这是第一种方法。

第二种方法,如果你可以帮助有一个脚本来创建以下目录

2017目录,然后是子目录02,然后是子目录16,然后是子目录4,然后将文件移动到子目录4

因此将如下所示

2017
--------07
------------16
---------------------04 ----> files will be here 

这两种方法你能帮忙吗?

最佳答案

你可以尝试这样的事情:

$folder = 'FILES_FOLDER'

Get-ChildItem -Path $folder | ForEach-Object {
    $subFolders = $_.Name.Split("-_")
    $path = Get-Location
    $order = 1, 2, 3, 0

    $order | ForEach-Object {
        $path = Join-Path -Path $path -ChildPath $subFolders[$_]

        if (-not (Test-Path -Path $path -PathType Container)){
            New-Item -Path $path -ItemType Directory
        }
    }

    Move-Item -Path $_.FullName -Destination $path
}

这会将所有文件移动到:

2017/07/16/4/4_2017-07-16_01-22-52.mp4
2017/07/16/4/4_2017-07-16_01-23-50.mp4
2017/07/16/4/4_2017-07-16_01-24-54.mp4
2017/07/16/4/4_2017-07-16_01-26-21.mp4

说明:

  • 使用 Split 拆分 "-""_" 上的文件。可以看看about_split了解更多信息。
  • 使用 Get-Location 获取当前文件夹路径,用于附加到当前路径以创建子目录。
  • 创建一个 $order 数组以创建正确的子文件夹顺序,如问题所示。
  • 迭代此 $order 数组并创建新目录(如果不存在)。可以使用Test-Path检查子文件夹是否存在,以及 New-Item创建一个新目录。
  • 使用 Move-Item 将文件移动到最终子目录。这些子目录将位于您当前的工作目录中。显然,您也可以将其更改为另一个目录位置。

关于windows - 根据包含 2 个下划线的文件名创建一个文件夹,然后将该文件放入该文件夹中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60517132/

相关文章:

Powershell 无法访问 SQL Server 2012 Microsoft.SqlServer.DTSRuntimeWrap

powershell - 通过服务器上的 Powershell 在 SCCM 中执行安装命令

powershell - 在 PowerShell 中为命名空间管理器设置默认命名空间

python - 为什么 python27.dll 不是 python 安装文件夹的一部分,而是在 Windows 系统文件夹中

windows - AutoHotKey:如何获取 find 命令的错误级别?

windows - BAT脚本在不同机器上运行不同命令

excel - 使用 Powershell 删除 Excel 中的前四行

python - 无法在 Python 中导入 dll 模块

windows - 如何让 MSXML IXMLHTTPRequest 处理 HTTP 重定向?

powershell - PsIsContainer 的别名?