我有一个文件夹,每天都会在文件夹中添加一个新文件,文件名相同但增量扩展名如.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\
答案 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
。