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

[日期时间] 批处理如何将文件的最后修改时间按指定格式添加到文件名的后面?

本帖最后由 pcl_test 于 2016-4-24 13:47 编辑

有个问题请教大神:批处理将文件属性中的修改时间添加到文件名的后面去?如:"行走记录.txt"的修改时间是2016-03-15 11:25,

文件名变成"行走记录2016年03月15日11点25分.txt"

请大侠赐教,小女不胜感激!!

本帖最后由 pcl_test 于 2016-7-15 23:57 编辑
  1. /*&cls
  2. @echo off
  3. dir /a-d /b *.txt|cscript -nologo -e:jscript "%~f0"
  4. pause&exit
  5. */
  6. function az(n){return n<10?'0'+n:n;}
  7. function FormatDate(str){
  8.     var dlm = new Date(str);
  9.     var y = dlm.getFullYear()+'年';
  10.     var M = az(dlm.getMonth()+1)+'月';
  11.     var d = az(dlm.getDate())+'日';
  12.     var h = az(dlm.getHours())+'时';
  13.     var m = az(dlm.getMinutes())+'分';
  14.     return y+M+d+h+m;
  15. }
  16. var fso = new ActiveXObject('Scripting.FileSystemObject');
  17. while(!WSH.StdIn.AtEndOfStream){
  18.     var file = fso.GetFile(WSH.StdIn.ReadLine());
  19.     var dlm = FormatDate(file.DateLastModified);
  20.     if(/(\d{4}年\d+月\d+日\d+时\d+分)\.[^\.]+$/.test(file.Name)){
  21.         if(RegExp.$1 != dlm){
  22.             file.Name = file.Name.replace(/(.+)\d{4}年\d+月\d+日\d+时\d+分(\.[^\.]+)/, '$1'+dlm+'$2');
  23.         }
  24.     }else{
  25.         file.Name = file.Name.replace(/(.+)(\.[^\.]+)/, '$1'+dlm+'$2')
  26.     }
  27. }
  28. WSH.echo('Done');
复制代码

TOP

回复 9# happy886rr


    然而他的问题在你写代码之前就私信给我了

TOP

本帖最后由 WHY 于 2016-4-26 08:39 编辑
  1. dir *.txt | ren -newName {
  2.     $d = $_.LastWriteTime.ToString('yyyy年MM月dd日HH点mm分');
  3.     $_.Name -replace '(\d{4}年\d+月\d+日\d+点\d+分)?(\.txt)$', ($d + '$2')
  4. }
复制代码

TOP

回复 8# Nsqs
我的代码是在他用过你的代码之后,才能使用。好似弦上之箭。

TOP

回复 7# happy886rr


    这样是错的

TOP

本帖最后由 happy886rr 于 2016-4-24 18:21 编辑

回复 6# wslbbdb
弦上之箭
  1. setlocal enabledelayedexpansion&for %%a in (*.txt) do (set "n=%%~na"&set "t=%%~ta"&ren "%%a" "!n:~0,-17!!t:~0,4!年!t:~5,2!月!t:~8,2!日!t:~-5,2!点!t:~-2!分%%~xa")
复制代码

TOP

只修改当前目录下的文件,不修改子目录中的文件!就这些了,大神帮帮我啊!

TOP

还有一个问题啊:我想要的效果是文件名中只加入最新的修改日期和时间,文件名中以前的日期自动删除,只保留最新的修改日期,怎么办呢?

TOP

@echo off&pushd %~dp0&call set "ext=txt"
for /f "delims=" %%1 in ('dir/a-d/b *.%ext%')do for /f "tokens=1-5 delims=:/- " %%2 in ("%%~t1")do ren %%1 %%~n1%%2年%%3月%%4日%%5点%%6分%%~x1

谢谢你!帮了我大忙了!
1

评分人数

    • pcl_test: 勿重复贴码,勿挤牙膏PB -8

TOP

  1. @dir /b /a-d | hash /g con /do:"echo ren ""%s"" ""%s%s.%s""",file,@name:base,tw:"%Y年%m月%d日%H时%M分",@name:ext
复制代码

TOP

  1. @echo off&pushd %~dp0&call set "ext=txt"
  2. for /f "delims=" %%1 in ('dir/a-d/b *.%ext%')do for /f "tokens=1-5 delims=:/- " %%2 in ("%%~t1")do ren %%1 %%~n1%%2年%%3月%%4日%%5点%%6分%%~x1
复制代码

TOP

返回列表