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