[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]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这样的格式啊?
还有这个批处理只对当前目录有效 如何针对 子目录也有效呢? 求高手指点

本帖最后由 powerbat 于 2012-3-8 20:12 编辑

回复 28# fyubo

是有可能wmic分配的内存不够用了。
看来wmic也太矬了。。。
vbs版
http://www.bathome.net/thread-15803-1-1.html

TOP

批处理将文件重命名为文件修改时间(精确到秒)
powerbat 发表于 2012-3-7 22:40



    错误:
代码 = 0x80020009
说明 = 发生意外。
设备 = Dispatch
请按任意键继续. . .

文件夹里面 数量有几千个的时候 这个是不是内存溢出了?

TOP

批处理将文件重命名为文件修改时间(精确到秒)
http://www.bathome.net/thread-15792-1-1.html

TOP

回复  fyubo
powerbat 发表于 2012-3-7 19:42



    如果要想对子目录也有效呢 烦请你再改下吧

TOP

回复 20# fyubo
  1. @echo off
  2. set "file=jpg,mpg"
  3. set "Ext=*.%file:,= *.%"
  4. rem 先重命名一次,加一段文件名中不会出现的字符串,防止可能的文件名重复问题。
  5. for /f "delims=" %%a in ('dir /b %Ext%') do (
  6.     ren "%%~fa" "powerbat@bathome_%%~nxa"
  7. )
  8. set "FileD=%~d0" & set "FileP=%~p0"
  9. set "Ext=and (extension='%file:,=' or extension='%')"
  10. set "Filter=drive='%FileD%' and path='%FileP:\=\\%' %Ext%"
  11. for /f "tokens=1,3* delims=.+ " %%a in ('wmic datafile where "%Filter%" get name^,LastModified') do (
  12.     set "t=%%a"
  13.     rem 用for过滤掉wmic结果中的不可见字符
  14.     for /f "delims=" %%i in ("%%c") do (
  15.         set "f=%%~fi"
  16.         set "p=%%~dpi"
  17.         set "n=%%~ni"
  18.         set "x=%%~xi"
  19.         setlocal enableDelayedExpansion
  20.         set "t=!t:~,4!-!t:~4,2!-!t:~6,2! !t:~8,2!.!t:~10,2!.!t:~12!"
  21.         if not exist "!p!!t!!x!" (
  22.             ren "!f!" "!t!!x!"
  23.         ) else  if "!t!" neq "!n!" (
  24.             set n=1
  25.             for %%u in ("!p!!t!_*!x!") do set /a n+=1
  26.             ren "!f!" "!t!_!n!!x!"
  27.         )
  28.         endlocal
  29.     )
  30. )
  31. pause
复制代码

TOP

回复  fyubo


   

这个是配合你批处理用的,不是要用批处理嘛,所做的就一个操作,把参数指定的文 ...
dnfreeuser 发表于 2012-3-7 13:14



    经测试  这个效果刚刚的  谢谢拉

TOP

回复 22# fyubo


这个是配合你批处理用的,不是要用批处理嘛,所做的就一个操作,把参数指定的文件名改为文件修改时间

其他统统不管,枚举文件什么的,都要你批处理做(都放exe里了,你要批处理干嘛呢?你说是吧?)
修改了会删掉扩展名的BUG和文件时间为标准时间的BUG,用法如下:
  1. @echo off
  2. for /r %%i in (*.jpg,*.mpg) do time.exe "%%i"
  3. pause
复制代码

TOP

本帖最后由 fyubo 于 2012-3-7 11:44 编辑
回复  fyubo


    把文件拖入(或文件名作为参数)

说明都不看....
dnfreeuser 发表于 2012-3-7 11:32



    呵呵 exe 还有这样的用法啊可是怎么把我的文件名的后缀名也给改了呢  哥们再给改下把 保留文件的后缀名
这个还只能一个个的拉 拉进去一个目录 没有效果 把目录名给改了 里面的文件没有变化

TOP

回复 19# fyubo


    把文件拖入(或文件名作为参数)

说明都不看....

TOP

本帖最后由 fyubo 于 2012-3-7 10:07 编辑
powerbat 发表于 2012-3-6 22:06



    经测试 这个完美高效 就是如果部分文件夹里面存在已经命名过的文件 他会自动在后面加上_1这样的符号 我想让他不加这个 就是命名一致的时候 不要加_1而是直接跳过去  在哪个地方改
if else 后面这个

还有这句
set "file=jpg,avi"怎么把他改为针对所有文件呢 我用了通配符什么的 都不行 BAT不是很懂只是简单的会 汗

TOP

c++做了个小程序,把文件拖入(或文件名作为参数),会自动帮你改成修改日期这个名字


time.exe 1.txt
...
dnfreeuser 发表于 2012-3-7 08:54


哥们
    你这个程序我一打开 就闪一个CMD框子 不见了  需要安装什么控件吗?

TOP

回复 16# powerbat


    确实考虑欠周,呵呵。

TOP

c++做了个小程序,把文件拖入(或文件名作为参数),会自动帮你改成修改日期这个名字

time.exe 1.txt
会自动替换成1.txt的修改日期这个名字

TOP

回复 14# find


    不是wmic本身的效率问题,而是他的用法不恰当,对每个文件都要调用3个外部命令(for /f内部调用cmd、cmd调用wmic、findstr),你想效率会高吗?
1

评分人数

    • apang: 感谢指正技术 + 1

TOP

返回列表