2

我想重命名目录中的所有 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)    
4

2 回答 2

1

如果批处理文件与 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 行和第 3set createtime行分别用 null 替换/:(分别),因为它们是文件名的无效字符。-如果您愿意,您可以通过将此值插入=字符的右侧,将它们替换为其他内容(例如)。

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

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

于 2012-12-01T04:43:42.063 回答
0

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

于 2012-12-01T05:10:44.600 回答