使用powershell从文件名中获取时间戳

Araneus0390

我需要根据文件名中的日期对文件进行分组。例子:

- input (folder)
-- random_folder_name_1 (folder)
--- 01-Apr-19, 10_33_37_Sample_1.pdf
-- random_folder_name_2 (folder)
--- some_other_file.pdf
--- 04-Apr-19, 14_33_37_Sample_15.pdf
...

所有文件都有一个模板:%datestamp%, %timestamp%_%keyword%我需要将它们排序为:

- output (folder)
-- %datestamp% (folder)
--- %keyword%.pdf

我实现了遍历input文件夹并搜索pdf-files,但无法获得日期戳。

$origin_folder = "input"
$destination_folder = "output"

$origin = Join-Path -Path $(Get-Location) -ChildPath "$origin_folder"
$destination = Join-Path -Path $(Get-Location) -ChildPath "$destination_folder"

$files = Get-ChildItem -Path $origin -Recurse -Filter *.pdf
# RegEx for date stamp as day-3_leters_of_month-year
$regex = "\d{2}-\D{3}-\d{2}"

foreach ($file in $files) {
    $source_file = $file.FullName
    $datestamp = [regex]::Matches($file.BaseName, $regex)
    Write-Output "$datestamp"
}

由于某种原因$datestamp是空字符串。那有什么问题?

另外,如何从文件名中减去正则表达式?假设从文件名%datestamp%, %timestamp%_%keyword%.pdf减去%datestamp%, %timestamp%_以获得%keyword%.pdf

最终脚本:工作版本

$origin_folder = "input"
$destination_folder = "output"

$origin = Join-Path -Path $(Get-Location) -ChildPath "$origin_folder"
$destination = Join-Path -Path $(Get-Location) -ChildPath "$destination_folder"

# Get all files in subfolders
$files = Get-ChildItem -Path $origin -Recurse -Filter *.pdf

# Date Regular Expression
# '2 digits of day'-'3 symbols of month'-'2 digits of year'
# Equals to template 'dd-MMM-yy'
$date_regex = "\d{2}\-\w{1,3}\-\d{2}"

# Ballast Regular Expressions
# Equals to template 'dd-MMM-yy, hh_mm_ss_'
$ballast_regex = "\d{2}\-\w{1,3}\-\d{2}, \d{2}_\d{2}_\d{2}_"

# Walk through all found files
foreach ($file in $files){
    # Get the full address of file which needs to be copied
    $source_file = $file.FullName

    # Get the datestamp from filename
    $datestamp = [regex]::Matches($file.BaseName, $date_regex)
    # Convert into usable format with digits only in filename
    $datestamp = [datetime]::parseexact($datestamp, 'dd-MMM-yy', $null).ToString('yyyy-MM-dd')

    # Take the name of sample from filename
    $keyword = $file.Name -replace $ballast_regex

    # Create the folder based on date stamp
    $destination_subfolder = Join-Path -Path $destination -ChildPath $datestamp

    # Create the folder based on datestamp if it doesn't exist
    If(!(Test-Path -Path $destination_subfolder))
        {   
            # Create folder silently
            # To make it "as usual" : remove " | Out-Null" from the end
            New-Item -Path $destination_subfolder -ItemType Directory -Force | Out-Null
        }

    # Path of file where it will be copied, but with changed name to sample name only
    $destination_file = Join-Path -Path $destination_subfolder -ChildPath $keyword

    # Copy actual file
    Copy-Item $source_file -Destination $destination_file
}
吉列尔莫·加西亚·洛佩兹

我改变了你的正则表达式

$regex = "\d{2}-\D{3}-\d{4}"

对此:

$regex = "\d{2}\-\w{1,3}\-\d{2,4}"

现在它正确地获取日期。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在文件名中包括时间戳

来自分类Dev

在文件名中包含时间戳

来自分类Dev

使用Powershell脚本解析文件名以获取日期时间

来自分类Dev

如何使用PowerShell中的文件内容获取文件名

来自分类Dev

根据文件名中的时间戳值复制文件

来自分类Dev

Python:解析文件名中嵌入的时间戳

来自分类Dev

在文件名中包含当前时间戳?

来自分类Dev

使用Gulp向文件名添加时间戳

来自分类Dev

如何更改文件名时间戳?

来自分类Dev

使用powershell在linux发行版中获取文件名和文件扩展名

来自分类Dev

在ssh中使用cron作业将文件名移动到云存储中时,如何向文件名添加时间戳

来自分类Dev

使用Powershell脚本在文件夹中获取某些文件名

来自分类Dev

代码从文件夹中的所有文件名中删除时间戳

来自分类Dev

在UNIX中删除超过5天的文件(文件名中的日期,而不是时间戳)

来自分类Dev

fluentd - 如何获取带有时间戳的日志文件名

来自分类Dev

在tcl中获取文件名和时间

来自分类Dev

使用scandir获取按时间排序的文件名

来自分类Dev

Linux如何在文件名中列出大于特定时间戳的文件?

来自分类Dev

按文件名中的字符串时间戳过滤文件

来自分类Dev

Windows批处理根据文件名中的时间戳保留最新的N个文件

来自分类Dev

使用通配符移动文件并将时间戳添加到文件名

来自分类Dev

使用.conf文件logstash在日志文件中获取时间戳

来自分类Dev

正则表达式:从文件名中删除时间戳

来自分类Dev

如何根据时间戳对grep命令中显示的文件名进行排序?

来自分类Dev

WinstonJS 将时间戳集成到 FileTransport 的日志文件名中

来自分类Dev

使用Grunt将时间戳添加到文件名的末尾

来自分类Dev

使用Curl命令输出带有时间戳的文件名

来自分类Dev

使用正则表达式搜索带有时间戳的文件名

来自分类Dev

Python服务-使用时间戳写入文件名

Related 相关文章

  1. 1

    在文件名中包括时间戳

  2. 2

    在文件名中包含时间戳

  3. 3

    使用Powershell脚本解析文件名以获取日期时间

  4. 4

    如何使用PowerShell中的文件内容获取文件名

  5. 5

    根据文件名中的时间戳值复制文件

  6. 6

    Python:解析文件名中嵌入的时间戳

  7. 7

    在文件名中包含当前时间戳?

  8. 8

    使用Gulp向文件名添加时间戳

  9. 9

    如何更改文件名时间戳?

  10. 10

    使用powershell在linux发行版中获取文件名和文件扩展名

  11. 11

    在ssh中使用cron作业将文件名移动到云存储中时,如何向文件名添加时间戳

  12. 12

    使用Powershell脚本在文件夹中获取某些文件名

  13. 13

    代码从文件夹中的所有文件名中删除时间戳

  14. 14

    在UNIX中删除超过5天的文件(文件名中的日期,而不是时间戳)

  15. 15

    fluentd - 如何获取带有时间戳的日志文件名

  16. 16

    在tcl中获取文件名和时间

  17. 17

    使用scandir获取按时间排序的文件名

  18. 18

    Linux如何在文件名中列出大于特定时间戳的文件?

  19. 19

    按文件名中的字符串时间戳过滤文件

  20. 20

    Windows批处理根据文件名中的时间戳保留最新的N个文件

  21. 21

    使用通配符移动文件并将时间戳添加到文件名

  22. 22

    使用.conf文件logstash在日志文件中获取时间戳

  23. 23

    正则表达式:从文件名中删除时间戳

  24. 24

    如何根据时间戳对grep命令中显示的文件名进行排序?

  25. 25

    WinstonJS 将时间戳集成到 FileTransport 的日志文件名中

  26. 26

    使用Grunt将时间戳添加到文件名的末尾

  27. 27

    使用Curl命令输出带有时间戳的文件名

  28. 28

    使用正则表达式搜索带有时间戳的文件名

  29. 29

    Python服务-使用时间戳写入文件名

热门标签

归档