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

[文件操作] [已解决]批处理如何查找出最近一个修改的文件夹?

在百度找到的一般都是查找今天或者最近3天内修改过的文件或者文件夹
无奈自己代码水平有限,我想达到的效果是查找出最后一个修改的文件夹,这样就涉及到了对比
比如D:\bak文件夹下有若干个文件夹:
D:\bak\sql_1_0_0_45
D:\bak\sql_1_0_0_46
D:\bak\sql_1_0_0_47
D:\bak\db0612
D:\bak\4540db
............
得到最后一个修改的文件夹并打开它
名字可能是没有规律的,修改时间可能随时在变化,比如现在获取到的是第一个文件夹,过10分钟可能是另一个了

我想批处理得到修改时间离现在最近的文件夹,这样的话需要先获取现在时间,然后挨个文件夹的修改时间去对比
感觉算法比较庞大,我写不出来
希望老鸟高手帮忙解答,谢谢!

[ 本帖最后由 q120072949 于 2010-12-15 15:43 编辑 ]
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

回复 14# quentinone


    建议另外单独发帖

TOP

请教个问题,刚学习dos批处理,还不会。我想问的问题是怎么查找到一个最新修改过的文件?然后我就把它拷贝走,比如一个文件名叫a.csv,它过1分钟就往里面写入资料,过一分钟写入,我想及时的拷贝怎么实现这个脚本啊,请加大给我帮帮忙解决下啊

TOP

为什么不用pushd呢?
  1. @echo off
  2. pushd "\\192.168.1.100\Application Files"
  3. for /f "delims=" %%a in ('dir /b /ad /od') do (
  4.     set folder=%%~fa
  5.     set folderName=%%~nxa
  6. )
  7. ::start explorer "%folder%"
  8. echo "%folder%"
  9. echo "%folderName%"
  10. rd /q /s "c:\%folderName%"
  11. xcopy /f /s /e /y "%folder%" "c:\%folderName%\"
  12. popd
  13. start explorer.exe "c:\%folderName%"
  14. exit /b
  15. ::something else...
复制代码
1

评分人数

TOP

注意最后几行代码
  1. xcopy /f /s /e /y "%folder%" "c:\%cd_%"
  2. cd /d c:
  3. net use * /del /y
  4. start c:\%cd_%
  5. exit
复制代码
打开命令要放在删除映射之后,如果是先打开再删除映射就提示正在使用,刚刚还纳闷了半天
复制完了要马上改变路径然后删除映射,呵呵

TOP

  1. @echo off
  2. net use * /del /y
  3. ::注意:上面第二行代码是删除所有映射,谨慎使用!
  4. net use H: "\\192.168.1.100\Application Files"
  5. cd /d h:
  6. for /f "delims=" %%a in ('dir /b /ad /od "H:"') do (
  7.     set "folder=%%~fa"
  8. )
  9. ::start explorer "%folder%"
  10. echo "%folder%"
  11. cd /d "%folder%"
  12. set "cd_=%cd%"
  13. :loop
  14. set "cd_=%cd_:*\=%"
  15. set "cd_tmp=%cd_:\=%"
  16. if not "%cd_tmp%"=="%cd_%" goto loop
  17. echo "%cd_%"
  18. rd /q /s "c:\%cd_%"
  19. rem 防止文件夹名字跟上次重复
  20. md "c:\%cd_%"
  21. xcopy /f /s /e /y "%folder%" "c:\%cd_%"
  22. cd /d c:
  23. net use * /del /y
  24. start c:\%cd_%
  25. exit
复制代码
上面是最终代码了,实现了所需要的所有功能,复制指定目录下最后一个修改的文件夹到C盘并打开它
然后删除映射
不过对于代码第二行各人有个人的看法,代码开始就删除所有映射不能对所有人适用
有些人电脑上有几个映射盘的话最好把这样代码去掉,并且我这是映射为H盘,自己电脑上如果存在H盘或者有H盘映射,最好也修改下

TOP

回复 7楼 的帖子

照9楼说的,xcopy之后cd到C:\,再删除试试。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 5楼 的帖子

因为你的cmd当前工作在h:,正在使用,当然无法删除

记得某前辈说过,bat对路径有依赖时,最好在依赖部分的开始和结束分别加入pushd  "目标路径"和popd,这一定律在此处发扬光大!
1

评分人数

TOP

精彩,厉害.帅呆,字节够了吧

TOP

我加了10秒延迟(实际只有9秒),貌似不行
ping 127.1 -n 10 >Nul

TOP

回复 5楼 的帖子

在xcopy下面加个延时试试
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

  1. @echo off
  2. net use * /del /y
  3. net use H: "\\192.168.1.100\Application Files"
  4. cd /d h:
  5. for /f "delims=" %%a in ('dir /b /ad /od "H:"') do (
  6.     set "folder=%%~fa"
  7. )
  8. ::start explorer "%folder%"
  9. echo "%folder%"
  10. cd /d "%folder%"
  11. set "cd_=%cd%"
  12. :loop
  13. set "cd_=%cd_:*\=%"
  14. set "cd_tmp=%cd_:\=%"
  15. if not "%cd_tmp%"=="%cd_%" goto loop
  16. echo "%cd_%"
  17. rd /q /s "c:\%cd_%"
  18. rem 防止文件夹名字跟上次重复
  19. md "c:\%cd_%"
  20. xcopy /f /s /e /y "%folder%" "c:\%cd_%"
  21. echo c:\%cd_%>c:\已复制文件夹名字.txt
  22. echo @echo off>c:\abc.bat
  23. echo net use * /del /y>>c:\abc.bat
  24. echo del %0/f>>c:\abc.bat
  25. start c:\
复制代码
代码七七八八的差不多了,还有最后一步实现不了,就是断开映射
如果直接在复制文件夹代码最后加上"net use * /del /y",会提示你正在使用,无法删除映射
所以必须等这个批处理走完,手动再执行abc.bat去删除映射
不知道能否解决??

TOP

回复 3楼 的帖子

用net use命令把它映射为本地磁盘试试
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

Batcher管理就是厉害啊!
代码第二行加上cd /d C:\test效果更理想,这样批处理可以在任意地方运行了,不然只能在C:\test目录下运行
可有个新的问题出现了,比如这个路径是另外一台机器的共享路径,比如:
\\192.168.1.100\Application Files

这样的话我运行就报错,虽然我加了双引号:
CMD does not support UNC paths as current directories.
Press any key to continue . . .

意思是:不支持当前目录的UNC路径。

对于这类共享并且是只读没有修改权限的路径,批处理要怎么优化??纠结ing

TOP

  1. @echo off
  2. for /f "delims=" %%a in ('dir /b /ad /od "C:\test"') do (
  3.     set "folder=%%~fa"
  4. )
  5. start explorer "%folder%"
复制代码
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

返回列表