Board logo

标题: [文本处理] 批处理怎样判断可移动磁盘有容量的就复制指定的内容到磁盘里? [打印本页]

作者: 雨夜秋风    时间: 2010-5-22 08:59     标题: 批处理怎样判断可移动磁盘有容量的就复制指定的内容到磁盘里?

那位大虾帮忙写个找到有容量的可移动磁盘就复制指定的文件到可移动磁盘里的呢?帮帮忙了,谢了!
作者: sgaizxt001    时间: 2010-5-22 09:22

可移动磁盘的可用容量怎么判断,大于多少就复制,小于多少不复制
要复制什么呢?C盘的还是D盘的,是文件夹还是文件
作者: neorobin    时间: 2010-5-22 10:43

  1. @echo off&setlocal enabledelayedexpansion
  2. set /p freeLower=请输入最小的自由空间大小^(单位:MB^),默认值100MB,最大值 2047 MB:
  3. set /a "freeLower*=(1024*1024)"
  4. if "!freeLower:~0,1!"=="-" set /a "freeLower=2047*1024*1024"
  5. if "!freeLower!"=="0" set /a "freeLower=100*1024*1024"
  6. echo 自由空间下限=!freeLower! Bytes
  7. wmic logicaldisk where "DriveType=2 and FreeSpace>!freeLower!" get Description,DeviceID,FreeSpace /value
  8. for /f "tokens=2 delims==" %%d in (
  9. 'wmic logicaldisk where "DriveType=2 and FreeSpace>!freeLower!" get DeviceID /value') do (
  10. set "drv=%%d"
  11. echo copy something to !drv:~0,-1!\somewhere...
  12. )
  13. pause
  14. exit /b
复制代码

作者: 雨夜秋风    时间: 2010-5-22 11:01     标题: 回复 3楼 的帖子

我要在100M以上就可以拷贝D:\TV里的文件到可移动磁盘里
可不可以省点代码的呢?
作者: hanyeguxing    时间: 2010-5-22 14:05

要求:只有一个符合条件的可移动磁盘分区
  1. @echo off
  2. for /f " skip=1 tokens=1*" %%a in ('wmic logicaldisk where DriveType^=2 get DeviceID^,FreeSpace') do for %%c in (%%b) do if %%c gtr 104857600 copy D:\TV\*.* %%a\
复制代码
复制到最后一个符合条件的可移动磁盘分区:
  1. @echo off
  2. for /f " skip=1 tokens=1*" %%a in ('wmic logicaldisk where DriveType^=2 get DeviceID^,FreeSpace') do for %%c in (%%b) do if %%c gtr 104857600 set a=%%a\
  3. if defined a copy D:\TV\*.* %a%
复制代码
复制到第一个符合条件的可移动磁盘分区:
  1. @echo off
  2. for /f " skip=1 tokens=1*" %%a in ('wmic logicaldisk where DriveType^=2 get DeviceID^,FreeSpace') do for %%c in (%%b) do if %%c gtr 104857600 copy D:\TV\*.* %a%\&&goto:eof
复制代码

[ 本帖最后由 hanyeguxing 于 2010-5-22 14:40 编辑 ]
作者: 雨夜秋风    时间: 2010-5-22 15:12     标题: 回复 5楼 的帖子

寒夜兄的代码就是简洁。多谢了
我想问你一个问题%%a和%%d有什么区别,都是怎样使用的?
作者: hanyeguxing    时间: 2010-5-22 15:52

没有区别,在for中定义了谁,子句里用谁就可以。
就像set a=1,然后再调用%a%一样。
作者: 雨夜秋风    时间: 2010-5-22 17:35     标题: 回复 5楼 的帖子

@echo off
for /f " skip=1 tokens=1*" %%a in ('wmic logicaldisk where DriveType^=2 get

DeviceID^,FreeSpace') do for %%c in (%%b) do if %%c gtr 104857600 set a=%%a
start  "" " !a:~0,1!.BAT"这样运行了怎么会是打不到“!a:~0,1!.BAT”文件呢?
作者: hanyeguxing    时间: 2010-5-22 18:26     标题: 回复 8楼 的帖子

1,在所有符合条件的分区内执行:
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f " skip=1 tokens=1*" %%a in ('wmic logicaldisk where DriveType^=2 get DeviceID^,FreeSpace') do for %%c in (%%b) do if %%c gtr 104857600 set a=%%a&start "" !a:~0^,1!.bat
复制代码
2,在最后一个符合条件的分区内执行:
  1. @echo off
  2. for /f " skip=1 tokens=1*" %%a in ('wmic logicaldisk where DriveType^=2 get DeviceID^,FreeSpace') do for %%c in (%%b) do if %%c gtr 104857600 set a=%%a
  3. start "" %a:~0,1%.bat
复制代码

[ 本帖最后由 hanyeguxing 于 2010-5-22 18:29 编辑 ]
作者: 雨夜秋风    时间: 2010-5-23 19:13     标题: 已解决回复 9楼 的帖子

多次多谢寒夜兄。我怎么觉得批处理是这么难学的呢?一个命令在不同的地方用法也不同比如start "" " !a:~0,1!.bat和start "" %a:~0,1%.bat不能互用的。是什么原因的呀?
作者: 雨夜秋风    时间: 2010-5-24 08:41     标题: 回复 10楼 的帖子

那些特殊符号都是怎么用的?好像功能好多的,在不同的地方功能不一样的。
作者: Batcher    时间: 2010-5-24 09:22     标题: 回复 10楼 的帖子

学习一下教程吧:批处理中的变量延迟扩展、变量嵌套
http://bbs.bathome.net/thread-2899-1-1.html




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