我正在尝试重命名大量文件,以将文件资源管理器中“修改日期”列中的日期合并到 YYYYMMDD 格式的每个文件名中。我能够使用以下步骤从内部所有文件的所需文件夹生成报告:
- 单击提示和技巧文件夹
- 按住 Shift 键并右键单击“提示和技巧”文件夹
- 点击“在此处打开命令窗口”
- 类型
dir>filename.txt
- 点击进入
- 打开 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 来更自动地将日期修改信息拉入文件名?
谢谢你的帮助!
在 Powershell 中,您可以使用 One-Liner 执行此操作:
解释:
-Recurse
以从子目录中获取文件该方法
.ToString()
允许您根据需要进行格式化这是您需要使用的代码来迭代文本文件,获取每个文件的修改日期,使用修改日期作为文件名的一部分复制每个文件,并删除原始文件。你非常接近,但你错过了一些东西。
要获取文件的修改日期,我们可以使用
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
在循环之前添加命令。那应该涵盖所有内容。如果这解决了您的问题,请随时投票或将答案标记为正确。
下面提供了完整的批处理文件。