找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 47341|回复: 12

[日期时间] 【已解决】批处理怎么获取当前所有文件夹的修改时间并按时间顺序输出到文件

[复制链接]
发表于 2015-8-12 20:23:57 | 显示全部楼层 |阅读模式
本帖最后由 raozhao2008 于 2015-8-15 20:12 编辑

1.批处理怎么获取当前目录下及子目录下所有文件夹的修改时间              2.将文件夹名、修改时间 按时间的先后顺序 输出到文件
发表于 2015-8-13 00:58:17 | 显示全部楼层
本帖最后由 回家路上 于 2015-8-13 12:48 编辑

你想要的应该只是第二个问题吧,直接上第二个的脚本

  1. @echo off
  2. %1(for /f "tokens=1,2 delims=[" %%a in ('%~s0 :^|sort') do echo;%%b %%a)>结果.txt&pause&exit
  3. setlocal enabledelayedexpansion
  4. for /f "delims=" %%a in ('dir /ad /s /b') do (
  5.         for /f "tokens=1,2" %%b in ('dir /tc /od "%%a"^|findstr "%%~nxa"')  do (
  6.                 set name=%%~nxa                              
  7.                 echo;%%~ta[!name:~0,30!
  8.         )
  9. )
  10. endlocal
复制代码
修改,对齐一下
 楼主| 发表于 2015-8-13 08:25:33 | 显示全部楼层
回复 2# 回家路上


上次 第一个问题我换了个思路达到了目的,就是去获取文件的修改日期,但后来发现结果没有按时间排序,所以这次还是要获取文件夹的修改日期
发表于 2015-8-13 08:50:01 | 显示全部楼层
回复 3# raozhao2008


、汗、把我的代码的for循环提出来单独成批处理执行得到的就是修改日期呀

  1.         修改日期[文件名
  2.         修改日期[文件名
  3.         修改日期[文件名
  4.         修改日期[文件名
复制代码
 楼主| 发表于 2015-8-13 11:57:46 | 显示全部楼层
回复 2# 回家路上


试过你的代码,没反应啊

第一个for看不懂
发表于 2015-8-13 12:40:38 | 显示全部楼层
本帖最后由 回家路上 于 2015-8-13 12:43 编辑

回复 5# raozhao2008


把这个批处理放到【当前目录】,执行没反应?
结果.txt里没有生成按修改时间排序的文件。稍等一会儿,等执行完,出现:请按任意键继续. . .
没有反应是什么概念,连错误都没有??
如果有错误,就发错误。
第二个for提传来就是修改时间的获取

  1. @echo off & setlocal enabledelayedexpansion
  2. for /f "delims=" %%a in ('dir /ad /s /b') do (
  3.         for /f "tokens=1,2" %%b in ('dir /tc /od "%%a"^|findstr "%%~nxa"')  do (
  4.                 set name=%%~nxa                                            
  5.                 echo;!name:~0,30! %%~ta
  6.         )
  7. )
  8. pause
复制代码
 楼主| 发表于 2015-8-13 13:40:02 | 显示全部楼层
本帖最后由 raozhao2008 于 2015-8-13 13:41 编辑

回复 6# 回家路上


   为什么这代码 每个一个文件夹都有3个结果
  1. @echo off
  2. %1(for /f "tokens=1,2 delims=[" %%a in ('%~s0 :^|sort') do echo;%%b %%a)>>结果.txt&pause&exit
  3. for /f "delims=" %%a in ('dir /ad /s /b') do (
  4.         for /f "tokens=1,2" %%b in ('dir /tc /od "%%a"^|findstr "%%~nxa"')  do (
  5.                 echo;%%~ta[%%~nxa
  6.         )
  7. )
复制代码

另外,您能解释一下第一句 "%1......"  吗
发表于 2015-8-13 14:20:35 | 显示全部楼层
回复 7# raozhao2008


(1)
  1. dir /ad /s /b
复制代码
能遍历当前目录下及子目录下的
(2)
  1. %%~nxa
复制代码
是只去名,不包含路径的
这样,你如果有不同级但是名字相同的就会好像显示多次一样,可明显不可能是同一个的,修改时间都不一样。。
要显示全路径的话,把%%~nxa变为%%a
(3)要知道%1什么意思,先知道%~s0什么意思
%~s0指的是本文件,就是当前批处理文件
在批处理里,直接写一个bat文件的名称,就是执行这个文件
所以【%~s0 :】意思是,执行当前批处理,并且传参数“:”
这样在第二次进入的时候,%1就是接受的第一个参数,为“:”就是注释的意思。第一行就不执行了。(第一次%1是空)
  1. %~s0 :|sort
复制代码
就是把当前批处理的执行输出进行排序

就这些吧,还有不明白的?
 楼主| 发表于 2015-8-13 19:53:13 | 显示全部楼层
回复 8# 回家路上
  1. @echo off
  2. %1(for /f "tokens=1,2 delims=[" %%a in ('%~s0 :^|sort') do echo;%%b %%a)>>结果.txt&pause&exit
  3. for /f "delims=" %%a in ('dir /ad /s /b') do (
  4.         for /f "tokens=1,2" %%b in ('dir /tc /od "%%a"^|findstr "%%~nxa"')  do (
  5.                 echo;%%~ta[%%~nxa
  6.         )
  7. )
复制代码


新建几个文件夹,将其中一个文件夹重命名2次,在运行以上代码,怎么会出现3个此文件夹的结果
发表于 2015-8-13 20:10:26 | 显示全部楼层
回复 9# raozhao2008


懵了。
上图,路径结构图,效果图
文件,测试的文件夹
可以等待高手来解决。
发表于 2015-8-13 20:35:09 | 显示全部楼层
回复 10# 回家路上


改了一下

  1. @echo off
  2. %1(for /f "tokens=1,2 delims=[" %%a in ('%~s0 :^|sort') do echo;%%b  %%a)&pause&exit /b
  3. for /f "delims=" %%a in ('dir /ad /s /b') do (
  4.         for /f "tokens=1,2" %%b in ('dir /tc "%%a"^|findstr "[^.]\.$"')  do (
  5.                 echo;%%~ta[%%a
  6.         )
  7. )
复制代码
发表于 2015-8-13 20:45:48 | 显示全部楼层
回复 11# 回家路上


    第4行的for循环好像没什么用,还影响效率。删掉这个for循环试试呢?
发表于 2015-8-15 21:11:17 | 显示全部楼层
  1. @echo off
  2. %1"%~f0" : | sort > 结果.log & pause & exit
  3. for /f "tokens=*" %%i in ('dir /b /s /ad') do echo %%~ti %%i
复制代码
如果想按创建日期排序:
  1. @echo off & setlocal enabledelayedexpansion
  2. %1"%~f0" : | sort > 结果.log & pause & exit
  3. for /f "tokens=*" %%i in ('dir /s /ad /tc^|findstr /i /r /c:" 的目录$" /c:" \.$"') do (
  4.     for /f "tokens=1*delims=<" %%j in ("%%i") do (
  5.         if not "%%k"=="" (echo %%j!s:~,-4!) else set "s=%%i"
  6.     )
  7. )
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-18 18:28 , Processed in 0.031287 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表