AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 776666
Accepted
newbie
newbie
Asked: 2016-05-14 10:23:35 +0800 CST2016-05-14 10:23:35 +0800 CST 2016-05-14 10:23:35 +0800 CST

使用 Windows CMD 或简单的 .TXT 重命名文件以将修改日期添加到文件名

  • 772

我正在尝试重命名大量文件,以将文件资源管理器中“修改日期”列中的日期合并到 YYYYMMDD 格式的每个文件名中。我能够使用以下步骤从内部所有文件的所需文件夹生成报告:

  1. 单击提示和技巧文件夹
  2. 按住 Shift 键并右键单击“提示和技巧”文件夹
  3. 点击“在此处打开命令窗口”
  4. 类型dir>filename.txt
  5. 点击进入
  6. 打开 Tips and Tricks 文件夹并查找具有您创建的文件名的文本文件

然后,我将报告作为分隔文本文件拉入 Excel 并处理了内容,因此我现在在一个列中有“最后修改”日期,在另一列中有文件名:

修改日期| 文件名

2009 年 1 月 9 日 | ArcGIS_TT_Projections_Transformations.doc

2014 年 2 月 18 日 | ArcGIS_TT_Re-Projection_WMAS.docx

2009 年 1 月 9 日 | ArcGIS_TT_Set_Selectable_Layers.doc

2009 年 1 月 9 日 | ArcGIS_TT_Spatial_Join.doc

2010 年 4 月 21 日 | ArcGIS_TT_View_CLU_History_Layer.doc

我只使用如下重命名脚本取得了成功:

@echo off
setlocal enableDelayedExpansion
for %%F in ("ArcGIS_TT_Projections_Transformations*.txt") do (
  set "name=%%F"
  ren "!name!" "!name:ArcGIS_TT_Projections_Transformations=ArcGIS_TT_Projections_Transformations_20090109!"
)
pause

但我试图避免对 61 个文件重复该过程。有没有人建议我可以使用 Windows CMD 提示符或简单的 .txt 来更自动地将日期修改信息拉入文件名?

谢谢你的帮助!

batch-file windows-command-prompt rename executable date-modified
  • 2 2 个回答
  • 46043 Views

2 个回答

  • Voted
  1. Gerald Schneider
    2020-05-27T03:50:47+08:002020-05-27T03:50:47+08:00

    在 Powershell 中,您可以使用 One-Liner 执行此操作:

    Get-ChildItem |Foreach-Object { Rename-Item $_ -NewName ("{0}-{1}{2}" -f $_.BaseName,$_.LastWriteTime.ToString('yyyyMMdd'),$_.Extension)  }
    

    解释:

    • Get-ChildItem:获取目录中的所有项目。您也可以添加-Recurse以从子目录中获取文件
    • Foreach-Object:对每个文件运行以下代码块
    • $_:当前迭代的文件作为对象
    • $_.BaseName : 不带扩展名的文件名
    • $_.LastWriteTime:作为 DateTime 对象的最后写入时间
      该方法.ToString()允许您根据需要进行格式化
    • $_.Extension : 文件的扩展名
    • 8
  2. Best Answer
    user5870571
    2016-05-14T13:51:31+08:002016-05-14T13:51:31+08:00

    这是您需要使用的代码来迭代文本文件,获取每个文件的修改日期,使用修改日期作为文件名的一部分复制每个文件,并删除原始文件。你非常接近,但你错过了一些东西。

    要获取文件的修改日期,我们可以使用set "MDate=%%~tF".

    要解析由您提供的日期,set "MDate=%%~tF"您需要指定要在输出中使用的由 %MDate% 存储的值的哪些部分。您可以使用该命令set "ParsedDate=!MDate:~6,4!!MDate:~0,2!!MDate:~3,2!"将set "MDate=%%~tF"MM/DD/YYYY hh:mm 的输出转换为 YYYYMMDD。

    之后,我们可以使用文件名中的 %ParsedDate% 的值将文件复制到新文件。

    您应该看到文件的两个副本。如果要删除原始文件,我们只需要运行命令即可for %%F in ("C:\test\*.txt") do ( del %%F )。这将为您留下重命名的文本文件。要将 .txt.new 转换为 .txt,请使用命令ren "C:\test\*.new" *.。

    因为我们在一个 for 循环中,所以我们需要改变我们处理变量的方式(这基于你到目前为止所写的内容,你已经知道了)。我们将 % 更改为 ! 用于循环内的变量名。因此,如果您有变量名example,您将!example!在循环内引用该变量,而不是%example%.

    为了使循环内的变量起作用,我们还需要setlocal enabledelayedexpansion在循环之前添加命令。

    那应该涵盖所有内容。如果这解决了您的问题,请随时投票或将答案标记为正确。

    下面提供了完整的批处理文件。

    setlocal enabledelayedexpansion
    
    for %%F in ("C:\test\*.txt") do ( 
        set "MDate=%%~tF"
        set "ParsedDate=!MDate:~6,4!!MDate:~0,2!!MDate:~3,2!"
        REM To add time
        set "ParsedDate=!MDate:~6,4!!MDate:~3,2!!MDate:~0,2!!MDate:~11,2!!MDate:~14,2!"
        copy %%F %%~dpnF_!ParsedDate!%%~xF.new )
    
    for %%F in ("C:\test\*.txt") do ( 
        del %%F )
    
    ren "C:\test\*.new" *.
    
    exit
    
    • 3

相关问题

  • 只删除 ASP 文件

  • 在 bat 文件中等待几秒钟的更好方法?[复制]

  • 如何编写dos批处理脚本来创建文件夹结构?

  • 使用 XCACLS 设置长文件名的权限

  • 如何将程序输出通过管道传输到屏幕和 Windows 下的文件 [关闭]

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve