Board logo

标题: [文件操作] 求助,批处理怎么取指定日期之间的文件夹名称?急 [打印本页]

作者: duanxu3    时间: 2018-12-25 11:28     标题: 求助,批处理怎么取指定日期之间的文件夹名称?急

求教大佬,新人一枚,
老板有个需求,让取指定日期 到某个日期之间的文件夹,并且排序。求教怎么解决,我试过很多方法,都不行,实在没办法了。刚学bat,懂得很少。虚心请教
作者: duanxu3    时间: 2018-12-25 11:34

顶上去 求教
作者: Batcher    时间: 2018-12-25 14:48

试过这几个代码没?
http://bbs.bathome.net/thread-12669-1-1.html
作者: Batcher    时间: 2018-12-25 15:19

文件夹名称就是日期吗?是哪种格式呢:
yyyymmdd
yyyy-mm-dd
...
作者: duanxu3    时间: 2018-12-25 15:28

本帖最后由 duanxu3 于 2018-12-25 15:58 编辑

回复 4# Batcher
作者: duanxu3    时间: 2018-12-25 15:57

本帖最后由 duanxu3 于 2018-12-25 16:10 编辑

回复 4# Batcher


    谢谢大佬,我写出来了,但是返回的文件排序方式按照升序的排序方式,但是我想让他按照降序排序,返回文件夹排序顺序的是20181219,20181220.其实我想返回20181220,20181219
  1. @echo off&setlocal enabledelayedexpansion
  2. set 起始日期=2018-12-27
  3. set 终止日期=2018-12-14
  4. set 日期=2018-11-19
  5. call:date2i  "%起始日期%" ans
  6. call:date2i  "%终止日期%" anc
  7. set ZYDQpath=\\172.30.40.2\3dversion\X64\
  8. for /f "skip=2 tokens=1-3*" %%a in ('dir/a-h/tc/4^|find "<DIR>"') do (
  9. call:date2ii "%%a" num
  10. if !num! gtr !anc! if !num! lss !ans! (echo %%~d) else echo no
  11. )
  12. pause
  13. ::exit
  14. :date2i <yyyy-mm-dd> <ret>
  15. setlocal&set tp=%~1
  16. for /f "tokens=1-3delims=-" %%a in ("%tp:-0=-%")do set/a y=%%a,m=%%b,d=%%c
  17. set/a "m=(m+9)%%12,y-=m/10+1900,i=365*y+y/4+(m*153+2)/5+d-1"
  18. endlocal&set %2=%i%&goto:eof
  19. )
  20. :date2ii <yyyy/mm/dd> <ret>
  21. setlocal&set tp=%~1
  22. for /f "tokens=1-3delims=/" %%a in ("%tp:/0=/%")do set/a y=%%a,m=%%b,d=%%c
  23. set/a "m=(m+9)%%12,y-=m/10+1900,i=365*y+y/4+(m*153+2)/5+d-1"
  24. endlocal&set %2=%i%&goto:eof
  25. )
复制代码

作者: Batcher    时间: 2018-12-25 16:24

回复 6# duanxu3


    试试这样可以吗 dir /a-h /tc /o-d
作者: duanxu3    时间: 2018-12-25 17:47

回复 7# Batcher


    这样不行,没有返回结果了
作者: Batcher    时间: 2018-12-25 19:19

回复 8# duanxu3


    那确实挺奇怪的,/o-d 只是指定排序方式而已。你打开一个CMD窗口执行,看看是dir没有得到正确格式的值,还是dir+find得到了错误的结果
作者: WHY    时间: 2018-12-26 13:38

本帖最后由 WHY 于 2018-12-26 16:59 编辑
  1. @echo off
  2. set "sDate=20180101"
  3. set "eDate=20181227"
  4. set "myPath=%~p0"
  5. for /f "tokens=1,2*delims=. " %%i in ('WMIC FSDir where "Drive='%~d0' and Path='%myPath:\=\\%'" get CreationDate^,Name^|findstr "^[0-9]"^|sort /r') do (
  6.     if "%%i" GTR "%sDate%000000" if "%%i" LSS "%eDate%999999" (
  7.         for /f "delims=" %%k in ("%%k") do echo;%%i %%~fk
  8.     )
  9. )
  10. pause
复制代码

作者: WHY    时间: 2018-12-26 13:41

本帖最后由 WHY 于 2018-12-26 17:00 编辑
  1. @echo off
  2. set "sDate=20180101"
  3. set "eDate=20181227"
  4. PowerShell "dir -Force | ?{$d=$_.CreationTime.ToString('yyyyMMdd');$_ -is [IO.DirectoryInfo] -and $d -ge '%sDate%' -and $d -le '%eDate%'} | sort -Des CreationTime | select FullName"
复制代码

作者: duanxu3    时间: 2018-12-27 15:37

回复 10# WHY


    谢谢大佬
作者: duanxu3    时间: 2018-12-27 15:40

回复 10# WHY


    大佬求问指定目录怎么写?比如我要指定某个目录 c:\test
作者: ivor    时间: 2018-12-27 16:59

本帖最后由 ivor 于 2018-12-27 17:04 编辑
WHY 发表于 2018-12-26 13:41@echo off

set "sDate=20180101"
set "eDate=20181227"
PowerShell "dir -Force | ?{$d=$_.CreationTime.ToString('yyyyMMdd');$_ -is [IO.DirectoryInfo] -and $d -ge '%sDate%' -and $d -le '%eDate%'} | sort -Des CreationTime | select FullName"


回复 13# duanxu3
  1. dir -Force -Path c:\test
复制代码
现在有问题还是用powershell解决比较快,代码又健壮。




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2