为目录中具有特定扩展名的多个文件创建的前缀文件日期时间



我想重命名目录中的所有sql文件,方法是在它们前面加上文件的创建日期和时间。

我是命令提示符的新手,从我阅读的内容中想出了以下代码,但它不起作用。

for /f "delims=*" %%I in ('dir *.sql /b /s') do (    
set dt=%%~tI     
for /f "delims=/: " %%a in ('%dt%') do (set mydate=%%a)     
for /f "delims=/: " %%b in ('%dt%') do (set mytime=%%b)     
ren %%~nI.sql %mydate%%mytime%_%%~nI.sql)    

如果批处理文件与 sql 文件位于同一目录中,则应该可以这样工作:

@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
for /f "tokens=*" %%f in ('dir /b *.sql') do (
  set createtime=%%~tf
  set createtime=!createtime:/=!
  set createtime=!createtime::=!
  rename "%%f" "!createtime! %%f"
)

第 2 行和第 3 行set createtime分别将 /: 替换为 null,因为它们是文件名的无效字符。如果您愿意,可以用其他东西代替它们(例如 - ),将此值插入=字符的右侧。

请注意,此处(以及示例中)使用的 %%~t 修饰符实际上获取文件的修改时间,而不是创建时间。 仅当您的 sql 文件在创建后被修改时,这才会引起注意。

此外,如果脚本多次执行,这里没有任何内容可以阻止它为相同的文件添加额外的时间戳前缀,因此请记住这一点。

ren "%file" "%date:~0,2%.%date:~

3,2%.%date:~6,4%-%time-somename.sql"

最新更新