new*_*bie 5 rename batch-file windows-command-prompt executable date-modified
我正在尝试重命名大量文件,以将文件资源管理器中“修改日期”列中的日期合并到 YYYYMMDD 格式的每个文件名中。我能够使用以下步骤从内部所有文件的所需文件夹生成报告:
dir>filename.txt
然后我将报告作为带分隔符的文本文件拉入 Excel 并处理内容,因此我现在在一列中有“最后修改”日期,在另一列中有文件名:
修改日期| 文档名称
1/9/2009 | ArcGIS_TT_Projections_Transformations.doc
2/18/2014 | ArcGIS_TT_Re-Projection_WMAS.docx
1/9/2009 | ArcGIS_TT_Set_Selectable_Layers.doc
1/9/2009 | 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
Run Code Online (Sandbox Code Playgroud)
但我试图避免对 61 个文件重复该过程。有没有人建议使用 Windows CMD 提示或一个简单的 .txt,我可以用它来更自动地将日期修改信息提取到文件名中?
谢谢你的帮助!
在 Powershell 中,您可以使用 One-Liner 执行此操作:
Get-ChildItem |Foreach-Object { Rename-Item $_ -NewName ("{0}-{1}{2}" -f $_.BaseName,$_.LastWriteTime.ToString('yyyyMMdd'),$_.Extension) }
Run Code Online (Sandbox Code Playgroud)
解释:
-Recurse
以从子目录中获取文件.ToString()
允许您根据需要进行格式化以下是您需要用来迭代文本文件、获取每个文件的修改日期、使用修改日期作为文件名的一部分复制每个文件以及删除原始文件的代码。你们已经很接近了,但你错过了一些东西。
要获取文件的修改日期,我们可以使用set "MDate=%%~tF"
.
要解析提供的日期,set "MDate=%%~tF"
您需要指定要在输出中使用 %MDate% 存储的值的哪些部分。您可以使用该命令set "ParsedDate=!MDate:~6,4!!MDate:~0,2!!MDate:~3,2!"
将 MM/DD/YYYY hh:mm 的输出转换set "MDate=%%~tF"
为 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
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
38901 次 |
最近记录: |