使用现有文件名的一部分批量重命名文件

时间:2018-02-13 10:04:21

标签: windows file cmd zip rename

StackOverflow(发布)新手,不是新手,无数次拯救我。不幸的是,这次我无法找到指出正确方向的信息。

我每天收到一个包含多个文件名的zip文件。我需要一种方法,每天使用现有文件名的一部分和当前日期重命名每个文件。因此文件将来自:

示例 -

thisisjust_atest.pdf
another_test.pdf
just_anothertest.pdf
yayone_moretest.pdf

atest - 2018-02-13.pdf
test - 2018-02-13.pdf
anothertest - 2018-02-13.pdf
moretest - 2018-02-13.pdf

我打算通过VB脚本以某种方式执行此操作,以便在将文件排序后通过电子邮件发送文件,但这只是因为我没有太多经验。很高兴指出正确的方向。

非常感谢任何帮助,提前谢谢。

2 个答案:

答案 0 :(得分:0)

@echo off
setlocal enabledelayedexpansion
REM get date in desired format:
for /f "tokens=2 delims==" %%I in ('wmic os get localdatetime /value') do set "today=%%I"
set "today=%today:~0,4%-%today:~4,2%-%today:~6,2%"

REM for every matching file...
for %%A in (*_*.pdf) do (
  REM ...get desired part...
  for /f "tokens=2 delims=_" %%B in ("%%~nA") do (
    REM ... and add datestring:
    ECHO ren "%%A" "%%B - %today%%%~xA"
  )
)

注意:如果输出完全符合您的要求,请删除ECHO

答案 1 :(得分:0)

这在PowerShell中非常简单。使用正则表达式获取现有名称的所需部分。然后,连接当前日期以获取新文件名。

如果您确信正确完成了重命名,请从-WhatIf cmdlet中删除Rename-Item

Get-ChildItem -Filter *.pdf -File |
    ForEach-Object {
        $newbase = $_.Name -replace '.*_([^_]*)\.pdf','$1'
        $newname = "$newbase - $(Get-Date -UFormat %Y-%m-%d).pdf"
        Rename-Item -Path $_.FullName -NewName $newname -WhatIf
    }

请注意,如果通过删除名称的第一部分来创建重复名称,则不会解决此问题。

请注意,即使原始文件名包含多个下划线字符,这也会有效。

如果必须从cmd.exe shell(.bat文件)运行此命令,请将PowerShell代码放入renamenews.ps1等文件中。然后使用:

调用它
powershell -NoLogo -NoProfile -File renamenews.ps1