如何使用批处理作业将文件“创建日期”添加到目录中的所有文件中?

时间:2014-01-23 02:42:47

标签: batch-file

我有一个文件夹,每天都会在文件夹中添加一个新文件,文件名相同但增量扩展名如.001,.002,.003等。但是,如果文件夹中没有文件,则从.001再次。

问题是它们都被命名为相同,如果我将它们移动到另一个文件夹来存档它,它只会一遍又一遍地覆盖同一个文件。我可以每天创建一个文件夹,日期只有一个文件,但这似乎有点多余。

有没有办法查看每个文件的创建日期并将其重命名为创建日期?

我已经走到了这一步,但看起来对于这种情况我必须使用静态文件名,如何遍历整个目录?

 SET filename = C:\test.001
 FOR %%f IN (%filename%) DO SET filedatetime=%%~tf
 rename c:\test.001 C:\test_%filedatetime%.txt
 move C:\*.txt C:\archive\

3 个答案:

答案 0 :(得分:1)

这提供了正确的排序顺序:

@echo off &setlocal disableDelayedExpansion
set "startfolder=%userprofile%\test"

cd /d "%startfolder%"
for %%a in (*) do (
    for /f "delims=." %%b in ('wmic datafile where "name='%startfolder:\=\\%\\%%~a'" get lastmodified^|find "."') do (
        echo(ren "%startfolder%\%%~a" "%%~b.txt"
    )
)

删除echo以使其正常运行。

答案 1 :(得分:0)

试试这样:

SET $path=The_path_who_contain_the_FILES

FOR /F "DELIMS=" %%f IN ('dir "%$path%" /a-d/b') DO (
          SET filedatetime=%%~tf
          move "%%~dpnxf" "C:\archive\test_%filedatetime%.txt")

答案 2 :(得分:0)

@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION 
SET "targetdir=c:\sourcedir"
SET "destdir=c:\destdir"

PUSHD "%targetdir%"

FOR %%a IN (*.*) DO (
 SET "timestamp=%%~ta"
 SET "timestamp=!timestamp:/=_!
 SET "timestamp=!timestamp::=_!
 SET "timestamp=!timestamp:.=_!
 SET "timestamp=!timestamp:,=_!
 SET "timestamp=!timestamp: =_!
 ECHO MOVE "%%a" "%destdir%\%%~na.!timestamp!"
)

GOTO :EOF

这应该适用于指定目标目录中名称不包含 ^ 的任何文件。

为了测试目的,所需的MOVE命令仅为ECHO。在确认命令正确无误后,将ECHO MOVE更改为MOVE以实际移动文件。附加>nul以取消报告消息(例如1 file moved

围绕timestamp的体操有意用 _ 替换 / ,因为这些是非法的文件名字符。 Space 同样被替换 - 它们是合法的,但往往很痛苦。

如果您希望目标文件名为name.003.timestamp,请从目标名称中删除~na