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

[文件操作] 来个大神99批处理怎样根据硬盘空间复制文件

[复制链接]
发表于 2019-2-15 18:28:41 | 显示全部楼层 |阅读模式
需求如下
当D盘大于100G则复制A文件到D
当D盘小于100G则复制A文件到E
发表于 2019-2-15 21:29:40 | 显示全部楼层
  1. for /f "delims== tokens=2" %i in ('wmic logicaldisk where "caption='d:'" get freespace /value') do @if %i gtr 100000000000 (copy a.txt d:\) else (copy a.txt e:\)
复制代码
发表于 2019-2-16 10:11:24 | 显示全部楼层
回复 2# happyxxdhaha


    比较这么大的数字会出错吧,你试试。
 楼主| 发表于 2019-2-16 12:46:38 | 显示全部楼层
happyxxdhaha 发表于 2019-2-15 21:29

测试无效
 楼主| 发表于 2019-2-16 17:01:12 | 显示全部楼层
回复  happyxxdhaha
比较这么大的数字会出错吧,你试试。
Batcher 发表于 2019-2-16 10:11
  1. @echo off
  2. Setlocal enabledelayedexpansion
  3. for /f "skip=1 tokens=1-6" %%a in ('wmic logicaldisk get caption^,drivetype^,freespace') do (if "%%b"=="3" (set "size=%%c"
  4. )
  5. )
  6. if %size% gtr 107374182400 (copy a.txt d:\) else (copy a.txt e:\)
  7. pause
复制代码
凑了一段 可以用 还能再精减吗
对截取不理解
发表于 2019-2-17 01:21:52 | 显示全部楼层
本帖最后由 happyxxdhaha 于 2019-2-17 02:22 编辑
回复  happyxxdhaha


    比较这么大的数字会出错吧,你试试。
Batcher 发表于 2019-2-16 10:11
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims== tokens=2" %%i in ('wmic logicaldisk where "caption='d:'" get freespace /value') do set freespace=%%i
  3. set _100g=107374182400

  4. rem 获取字符串长度
  5. set n=
  6. :loop1
  7. set /a n+=1
  8. if "!freespace:~%n%,1!"=="" (goto next1) else (goto loop1)
  9. :next1
  10. rem %n%为已获取到的字符串长度,100G的字符串长度为12,两者相比较
  11. if %n% equ 12 (call :equ) else (if %n% gtr 12 (call :gtr) else (call :lss))
  12. endlocal
  13. goto:eof

  14. :gtr
  15. set /a v=%n%-12
  16. rem z0的第一个参数长度最小,第二个参数长度最大,第三个参数%v%为两个字符串长度的差
  17. call :z0 %_100g% %freespace% %v%
  18. goto:eof

  19. :lss
  20. set /a v=12-%n%
  21. call :z0 %freespace% %_100g% %v%
  22. goto:eof

  23. :equ
  24. call :z0 %freespace% %_100g% 0
  25. goto:eof

  26. :z0
  27. setlocal
  28. if %3 equ 0 goto next2
  29. rem 将长度最小的字符串前面补0,使两个字符串长度相同,然后再进行字符串比较
  30. set str=%1
  31. set n=
  32. :loop2
  33. set /a n+=1
  34. set str=0%str%
  35. if %n% equ %3 (goto next2) else (goto loop2)
  36. :next2
  37. rem %str%为补0之后的字符串
  38. if "%2" gtr "%str%" (copy a.txt d:\) else (copy a.txt e:\)
  39. endlocal
  40. goto:eof
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-18 23:29 , Processed in 0.018691 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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