如何使用批处理作业将文件"create date"添加到目录中的所有文件中?



>我有一个文件夹,每天都会向文件夹中添加一个文件名相同但扩展名递增的新文件,例如 .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

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

@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以使其正常工作。

@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的体操打算将/替换为_,因为这些是非法的文件名字符。空间同样被替换 - 它们是合法的,但往往是痛苦的。

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

尝试如下:

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:archivetest_%filedatetime%.txt")

相关内容

最新更新