[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[代码合集] 求这个重命名文件名的批处理 如何实现文件名更改为文件修改时间

@echo off
setlocal enabledelayedexpansion
rem
set "file=jpg,mpg"
for %%i in (!file!) do (
set n=1
for /f "delims=" %%a in ('dir /b "*.%%i"') do (
set "t=%%~ta"
set "t=!t::=:!"
if not exist "!t!%%~xa" (
ren "%%~fa" "!t!%%~xa"
) else (
ren "%%~fa" "!t!_!n!%%~xa"
set /a n=n+1
)
)
)

pause



当前这个批处理只能把文件名命名为2012-03-06 13:28的形式 怎么加上秒 也就是变为2012-03-06 13:28:20这样的格式啊?
还有这个批处理只对当前目录有效 如何针对 子目录也有效呢? 求高手指点

set "t=%%~ta"
这句是拿到文件的 日期/时间 文件的修改时间没有秒的

要针对子目录也有效的话改下这句
for /f "delims=" %%a in ('dir /b "*.%%i"') do (
改成
for /f "delims=" %%a in ('dir /s /b "*.%%i"') do (
就是加个/s搜索开关。
/S          显示指定目录和所有子目录中的文件。

TOP

有的啊 怎么把这个秒也加里面

TOP

set "t=%%~ta"
这句是拿到文件的 日期/时间 文件的修改时间没有秒的

要针对子目录也有效的话改下这句
...
冷玉公子 发表于 2012-3-6 17:36



    你再帮我看下怎么加上去秒

TOP

本帖最后由 fyubo 于 2012-3-6 19:47 编辑
set "t=%%~ta"
这句是拿到文件的 日期/时间 文件的修改时间没有秒的

要针对子目录也有效的话改下这句
...
冷玉公子 发表于 2012-3-6 17:36



    还有这个/s参数 当存在文件名更要命名的名字一样的时候 在CMD里面就会出现
存在一个重名文件,或是找不到文件
存在一个重名文件,或是找不到文件
存在一个重名文件,或是找不到文件
存在一个重名文件,或是找不到文件
存在一个重名文件,或是找不到文件
存在一个重名文件,或是找不到文件
.....
当出现这个提示100个之后 程序就不下面走了 这个是什么原因呢 怎么解决呢

TOP

wmic可以得到文件修改时间,精确到秒。不过很罗嗦。。。
楼主试试,若可行,删除第10行、11行中的echo。即将echo ren改成ren
  1. @echo off&setlocal enabledelayedexpansion
  2. set n=1
  3. for %%i in (jpg,mpg) do (
  4.     for /f "delims=" %%a in ('dir /b /s "*.%%i"') do (
  5.         set "var=%%a"&set "var=!var:\=\\!"
  6.         for /f "tokens=2 delims==" %%b in ('wmic datafile "!var!" get "Last Modified" /value ^|findstr /i "Last"') do (
  7.             set var=%%b
  8.             set "t=!var:~,4!-!var:~4,2!-!var:~6,2! !var:~8,2!:!var:~10,2!:!var:~12,2!"
  9.         )
  10.     if not exist "!t!%%~xa" (echo ren "%%~fa" "!t!%%~xa"
  11.         ) else (echo ren "%%~fa" "!t!_!n!%%~xa"&set /a n=n+1)
  12.     )
  13. )
  14. pause
复制代码

TOP

本帖最后由 fyubo 于 2012-3-6 20:00 编辑
wmic可以得到文件修改时间,精确到秒。不过很罗嗦。。。
楼主试试,若可行,删除第10行、11行中的echo。即 ...
apang 发表于 2012-3-6 19:40



    wmic 是可以  这个代码是可以实现我的目的 可是运行起来 速度比不调用wmic要慢不知道多少倍了 我上万个文件修改 估计得半天 只看到CMD里面 走的好慢1秒大约2个
而REN基本上是一秒能十个

TOP

回复 7# fyubo


    呵呵,你的要求还蛮高哈。

TOP

回复  fyubo


    呵呵,你的要求还蛮高哈。
apang 发表于 2012-3-6 20:11



是啊 我就是喜欢精益求精   有没有好办法 呵呵

TOP

回复 9# fyubo

普通方法好像不行,不信你在CMD窗口输入dir 看有秒显示不;同样%%~ta扩展得到的时间也不会有秒显示。

TOP

回复  fyubo

普通方法好像不行,不信你在CMD窗口输入dir 看有秒显示不;同样%%~ta扩展得到的时间也不会 ...
apang 发表于 2012-3-6 20:42



   难道这个就是BAT的瓶颈么

TOP

本帖最后由 powerbat 于 2012-3-6 23:08 编辑
  1. @echo off
  2. set "file=jpg,mpg"
  3. set "fileD=%~d0" & set "fileP=%~p0"
  4. for /f "tokens=1,3* delims=.+ " %%a in ('wmic datafile where "drive='%fileD%' and path='%fileP:\=\\%' and (extension='%file:,=' or extension='%')" get name^,LastModified') do (
  5.     set "t=%%a"
  6.     rem 用for过滤掉wmic结果中的不可见字符
  7.     for /f "delims=" %%i in ("%%c") do (
  8.         setlocal enableDelayedExpansion
  9.         set "t=!t:~,4!-!t:~4,2!-!t:~6,2! !t:~8,2!.!t:~10,2!.!t:~12!"
  10.         for %%t in ("!t!") do (
  11.             endlocal
  12.             if not exist "%%~dpi%%~t%%~xi" (
  13.                 ren "%%~fi" "%%~t%%~xi"
  14.             ) else (
  15.                 set n=1
  16.                 for %%u in ("%%~dpi%%~t_*%%~xi") do set /a n+=1
  17.                 setlocal enableDelayedExpansion
  18.                 for %%u in (!n!) do endlocal& ren "%%~fi" "%%~t_%%~u%%~xi"
  19.             )
  20.         )
  21.     )
  22. )
  23. pause
复制代码

TOP

无可用范例。
请按任意键继续. . .
powerbat 发表于 2012-3-6 22:06

TOP

回复 8# apang


VBS调用WMI效率是否会高些?

TOP

本帖最后由 powerbat 于 2012-3-6 23:06 编辑

回复 13# fyubo


    本机测试后代码有个地方没改到,已更新。

TOP

返回列表