我试图重命名一大批文件,将文件资源pipe理器中的“修改date”列中的date合并到每个YYYYMMDD格式的文件名中。 我能够使用以下步骤从所有文件的所需文件夹生成报告:
dir>filename.txt 然后,我将报告作为分隔文本文件拖到Excel中,然后操纵内容,现在我在一列中有“最后修改”date,另一列中有文件名:
修改date | 文件名
1/9/2009 | ArcGIS_TT_Projections_Transformations.doc
- 在现有的MySQL服务器上更改主机名是否有任何问题?
- 如何在不先停止SQL实例的情况下重命名数据库以刷新连接
- 有些东西将文件重命名为filename.ext.suspected
- 迁移到新的服务器2008文件服务器,但保留旧的服务器名称(在域AD下)
- 使用通配符窗口重命名文件夹
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
4/21/2010 | 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的build议,我可以用来更自动地拉入date修改信息到文件名?
谢谢你的帮助!
Ok @newbie,这里是你需要用来迭代文本文件的代码,获取每个文件的修改date,使用修改的date作为文件名的一部分复制每个文件,并删除原始文件。 你非常接近,但是你错过了一些东西。
要获得文件的修改date,我们可以使用set "MDate=%%~tF" 。
要parsing由set "MDate=%%~tF"提供的date,您将需要指定要在输出中使用%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 )运行for %%F in ("C:\test\*.txt") do ( del %%F )的命令for %%F in ("C:\test\*.txt") do ( del %%F ) 。 这将使您重命名文本文件。 要将.txt.new转换为.txt,请使用命令ren "C:\test\*.new" *. 。new ren "C:\test\*.new" *. 。
因为我们在for循环中,所以我们需要改变我们如何解决varables(根据你已经写的东西,你已经知道了)。 我们改变%! 为循环内的variables名称。 所以如果你有variables名的example你可以使用!example!来引用这个variables!example! 在循环内而不是%example% 。
要使循环内的variables正常工作,我们还需要在循环之前添加setlocal enabledelayedexpansion命令。
这应该涵盖一切。 如果这能解决您的问题,请随时注意或标记答案是正确的。
下面提供了完整的batch file。
setlocal enabledelayedexpansion for %%F in ("C:\test\*.txt") do ( set "MDate=%%~tF" set "ParsedDate=!MDate:~6,4!!MDate:~0,2!!MDate:~3,2!" copy %%F %%~dpnF_!ParsedDate!%%~xF.new ) for %%F in ("C:\test\*.txt") do ( del %%F ) ren "C:\test\*.new" *. exit