标题: [代码合集] 求这个重命名文件名的批处理 如何实现文件名更改为文件修改时间 [打印本页]
作者: fyubo 时间: 2012-3-6 13:33 标题: 求这个重命名文件名的批处理 如何实现文件名更改为文件修改时间
@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这样的格式啊?
还有这个批处理只对当前目录有效 如何针对 子目录也有效呢? 求高手指点
作者: 冷玉公子 时间: 2012-3-6 17:36
set "t=%%~ta"
这句是拿到文件的 日期/时间 文件的修改时间没有秒的
要针对子目录也有效的话改下这句
for /f "delims=" %%a in ('dir /b "*.%%i"') do (
改成
for /f "delims=" %%a in ('dir /s /b "*.%%i"') do (
就是加个/s搜索开关。
/S 显示指定目录和所有子目录中的文件。
作者: fyubo 时间: 2012-3-6 17:58
有的啊 怎么把这个秒也加里面
作者: fyubo 时间: 2012-3-6 18:01
set "t=%%~ta"
这句是拿到文件的 日期/时间 文件的修改时间没有秒的
要针对子目录也有效的话改下这句
...
冷玉公子 发表于 2012-3-6 17:36
你再帮我看下怎么加上去秒
作者: fyubo 时间: 2012-3-6 19:39
本帖最后由 fyubo 于 2012-3-6 19:47 编辑
set "t=%%~ta"
这句是拿到文件的 日期/时间 文件的修改时间没有秒的
要针对子目录也有效的话改下这句
...
冷玉公子 发表于 2012-3-6 17:36
还有这个/s参数 当存在文件名更要命名的名字一样的时候 在CMD里面就会出现
存在一个重名文件,或是找不到文件
存在一个重名文件,或是找不到文件
存在一个重名文件,或是找不到文件
存在一个重名文件,或是找不到文件
存在一个重名文件,或是找不到文件
存在一个重名文件,或是找不到文件
.....
当出现这个提示100个之后 程序就不下面走了 这个是什么原因呢 怎么解决呢
作者: apang 时间: 2012-3-6 19:40
wmic可以得到文件修改时间,精确到秒。不过很罗嗦。。。
楼主试试,若可行,删除第10行、11行中的echo。即将echo ren改成ren- @echo off&setlocal enabledelayedexpansion
- set n=1
- for %%i in (jpg,mpg) do (
- for /f "delims=" %%a in ('dir /b /s "*.%%i"') do (
- set "var=%%a"&set "var=!var:\=\\!"
- for /f "tokens=2 delims==" %%b in ('wmic datafile "!var!" get "Last Modified" /value ^|findstr /i "Last"') do (
- set var=%%b
- set "t=!var:~,4!-!var:~4,2!-!var:~6,2! !var:~8,2!:!var:~10,2!:!var:~12,2!"
- )
- if not exist "!t!%%~xa" (echo ren "%%~fa" "!t!%%~xa"
- ) else (echo ren "%%~fa" "!t!_!n!%%~xa"&set /a n=n+1)
- )
- )
- pause
复制代码
作者: fyubo 时间: 2012-3-6 19:56
本帖最后由 fyubo 于 2012-3-6 20:00 编辑
wmic可以得到文件修改时间,精确到秒。不过很罗嗦。。。
楼主试试,若可行,删除第10行、11行中的echo。即 ...
apang 发表于 2012-3-6 19:40
wmic 是可以 这个代码是可以实现我的目的 可是运行起来 速度比不调用wmic要慢不知道多少倍了 我上万个文件修改 估计得半天 只看到CMD里面 走的好慢1秒大约2个
而REN基本上是一秒能十个
作者: apang 时间: 2012-3-6 20:11
回复 7# fyubo
呵呵,你的要求还蛮高哈。
作者: fyubo 时间: 2012-3-6 20:23
回复 fyubo
呵呵,你的要求还蛮高哈。
apang 发表于 2012-3-6 20:11
是啊 我就是喜欢精益求精 有没有好办法 呵呵
作者: apang 时间: 2012-3-6 20:42
回复 9# fyubo
普通方法好像不行,不信你在CMD窗口输入dir 看有秒显示不;同样%%~ta扩展得到的时间也不会有秒显示。
作者: fyubo 时间: 2012-3-6 20:57
回复 fyubo
普通方法好像不行,不信你在CMD窗口输入dir 看有秒显示不;同样%%~ta扩展得到的时间也不会 ...
apang 发表于 2012-3-6 20:42
难道这个就是BAT的瓶颈么
作者: powerbat 时间: 2012-3-6 22:06
本帖最后由 powerbat 于 2012-3-6 23:08 编辑
- @echo off
- set "file=jpg,mpg"
- set "fileD=%~d0" & set "fileP=%~p0"
- 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 (
- set "t=%%a"
- rem 用for过滤掉wmic结果中的不可见字符
- for /f "delims=" %%i in ("%%c") do (
- setlocal enableDelayedExpansion
- set "t=!t:~,4!-!t:~4,2!-!t:~6,2! !t:~8,2!.!t:~10,2!.!t:~12!"
- for %%t in ("!t!") do (
- endlocal
- if not exist "%%~dpi%%~t%%~xi" (
- ren "%%~fi" "%%~t%%~xi"
- ) else (
- set n=1
- for %%u in ("%%~dpi%%~t_*%%~xi") do set /a n+=1
- setlocal enableDelayedExpansion
- for %%u in (!n!) do endlocal& ren "%%~fi" "%%~t_%%~u%%~xi"
- )
- )
- )
- )
- pause
复制代码
作者: fyubo 时间: 2012-3-6 22:36
无可用范例。
请按任意键继续. . .
powerbat 发表于 2012-3-6 22:06
作者: find 时间: 2012-3-6 22:43
回复 8# apang
VBS调用WMI效率是否会高些?
作者: powerbat 时间: 2012-3-6 22:51
本帖最后由 powerbat 于 2012-3-6 23:06 编辑
回复 13# fyubo
本机测试后代码有个地方没改到,已更新。
作者: powerbat 时间: 2012-3-6 22:59
回复 14# find
不是wmic本身的效率问题,而是他的用法不恰当,对每个文件都要调用3个外部命令(for /f内部调用cmd、cmd调用wmic、findstr),你想效率会高吗?
作者: dnfreeuser 时间: 2012-3-7 08:54
c++做了个小程序,把文件拖入(或文件名作为参数),会自动帮你改成修改日期这个名字
time.exe 1.txt
会自动替换成1.txt的修改日期这个名字
作者: apang 时间: 2012-3-7 09:04
回复 16# powerbat
确实考虑欠周,呵呵。
作者: fyubo 时间: 2012-3-7 09:53
c++做了个小程序,把文件拖入(或文件名作为参数),会自动帮你改成修改日期这个名字
time.exe 1.txt
...
dnfreeuser 发表于 2012-3-7 08:54
哥们
你这个程序我一打开 就闪一个CMD框子 不见了 需要安装什么控件吗?
作者: fyubo 时间: 2012-3-7 10:03
本帖最后由 fyubo 于 2012-3-7 10:07 编辑
powerbat 发表于 2012-3-6 22:06
经测试 这个完美高效 就是如果部分文件夹里面存在已经命名过的文件 他会自动在后面加上_1这样的符号 我想让他不加这个 就是命名一致的时候 不要加_1而是直接跳过去 在哪个地方改
if else 后面这个
还有这句
set "file=jpg,avi"怎么把他改为针对所有文件呢 我用了通配符什么的 都不行 BAT不是很懂只是简单的会 汗
作者: dnfreeuser 时间: 2012-3-7 11:32
回复 19# fyubo
把文件拖入(或文件名作为参数)
说明都不看....
作者: fyubo 时间: 2012-3-7 11:39
本帖最后由 fyubo 于 2012-3-7 11:44 编辑
回复 fyubo
把文件拖入(或文件名作为参数)
说明都不看....
dnfreeuser 发表于 2012-3-7 11:32
呵呵 exe 还有这样的用法啊可是怎么把我的文件名的后缀名也给改了呢 哥们再给改下把 保留文件的后缀名
这个还只能一个个的拉 拉进去一个目录 没有效果 把目录名给改了 里面的文件没有变化
作者: dnfreeuser 时间: 2012-3-7 13:14
回复 22# fyubo
这个是配合你批处理用的,不是要用批处理嘛,所做的就一个操作,把参数指定的文件名改为文件修改时间
其他统统不管,枚举文件什么的,都要你批处理做(都放exe里了,你要批处理干嘛呢?你说是吧?)
修改了会删掉扩展名的BUG和文件时间为标准时间的BUG,用法如下:- @echo off
- for /r %%i in (*.jpg,*.mpg) do time.exe "%%i"
- pause
复制代码
作者: fyubo 时间: 2012-3-7 17:25
回复 fyubo
这个是配合你批处理用的,不是要用批处理嘛,所做的就一个操作,把参数指定的文 ...
dnfreeuser 发表于 2012-3-7 13:14
经测试 这个效果刚刚的 谢谢拉
作者: powerbat 时间: 2012-3-7 19:42
回复 20# fyubo - @echo off
- set "file=jpg,mpg"
-
- set "Ext=*.%file:,= *.%"
- rem 先重命名一次,加一段文件名中不会出现的字符串,防止可能的文件名重复问题。
- for /f "delims=" %%a in ('dir /b %Ext%') do (
- ren "%%~fa" "powerbat@bathome_%%~nxa"
- )
-
- set "FileD=%~d0" & set "FileP=%~p0"
- set "Ext=and (extension='%file:,=' or extension='%')"
- set "Filter=drive='%FileD%' and path='%FileP:\=\\%' %Ext%"
- for /f "tokens=1,3* delims=.+ " %%a in ('wmic datafile where "%Filter%" get name^,LastModified') do (
- set "t=%%a"
- rem 用for过滤掉wmic结果中的不可见字符
- for /f "delims=" %%i in ("%%c") do (
- set "f=%%~fi"
- set "p=%%~dpi"
- set "n=%%~ni"
- set "x=%%~xi"
- setlocal enableDelayedExpansion
- set "t=!t:~,4!-!t:~4,2!-!t:~6,2! !t:~8,2!.!t:~10,2!.!t:~12!"
- if not exist "!p!!t!!x!" (
- ren "!f!" "!t!!x!"
- ) else if "!t!" neq "!n!" (
- set n=1
- for %%u in ("!p!!t!_*!x!") do set /a n+=1
- ren "!f!" "!t!_!n!!x!"
- )
- endlocal
- )
- )
- pause
复制代码
作者: fyubo 时间: 2012-3-7 22:21
回复 fyubo
powerbat 发表于 2012-3-7 19:42
如果要想对子目录也有效呢 烦请你再改下吧
作者: powerbat 时间: 2012-3-7 22:40
批处理将文件重命名为文件修改时间(精确到秒)
http://www.bathome.net/thread-15792-1-1.html
作者: fyubo 时间: 2012-3-8 00:06
批处理将文件重命名为文件修改时间(精确到秒)
powerbat 发表于 2012-3-7 22:40
错误:
代码 = 0x80020009
说明 = 发生意外。
设备 = Dispatch
请按任意键继续. . .
文件夹里面 数量有几千个的时候 这个是不是内存溢出了?
作者: powerbat 时间: 2012-3-8 18:54
本帖最后由 powerbat 于 2012-3-8 20:12 编辑
回复 28# fyubo
是有可能wmic分配的内存不够用了。
看来wmic也太矬了。。。
vbs版
http://www.bathome.net/thread-15803-1-1.html
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |