Board logo

标题: [文件操作] 求指导解决批处理将多个文件按指定数量/数目移动到不同文件夹里出现的一些问题 [打印本页]

作者: AILOVEU    时间: 2016-11-13 02:05     标题: 求指导解决批处理将多个文件按指定数量/数目移动到不同文件夹里出现的一些问题

本帖最后由 pcl_test 于 2016-11-13 16:02 编辑
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set count=0
  4. set hundred=100
  5. set file=1
  6. for %%i in (*.gif) do (
  7. set /a count+=1
  8. if not exist !file! (
  9. md !file!
  10. move "%%i" !file!
  11. ) else (
  12. move "%%i" !file!
  13. )
  14. if !count! equ !hundred! (
  15. set /a count=0
  16. set /a file+=1
  17. )
  18. )
复制代码
这是我写的一段代码,主要解决文件的移动(每100个gif图移动到一个数字编号的文件夹)。现学现写的,所以有些问题:
1.setlocal enabledelayedexpansion我查相关资料时,有要endlocal,这里要不要写;这个延迟是针对整个for的存在周期吗
2.有三个文件没有移动:
青年图摘0204! - Pow_20160204_13099065706496000_000.gif
青年图摘0204! - Pow_20160204_13099065713274000_000.gif
是我想太多! 你总这样说~ -_20160212_13099761875492600_000.gif
不知道什么原因?
3.还有就是各位大神对这个小程序有没有建议什么的,第一次编写很想听听大家的看法
作者: AILOVEU    时间: 2016-11-13 12:19

自顶一贴
作者: pcl_test    时间: 2016-11-13 17:51

本帖最后由 pcl_test 于 2016-11-13 17:53 编辑

1、在for外,从setlocal enabledelayedexpansion出现的位置到批处理执行完毕或endlocal之间的过程有效;在for内,从setlocal enabledelayedexpansion出现的位置到for完毕或endlocal或goto :eof的整个过程有效
2、开启延迟后,!感叹号变成延迟的标记,变量表示为!var!,故会过滤掉
  1. @echo off
  2. set quantity=100
  3. for /l %%a in (1 1 1000) do (
  4.     call :loop "%%a"
  5.     if not exist *.gif goto end
  6. )
  7. :end
  8. pause&exit
  9. :loop
  10. for %%b in (*.gif) do (
  11.     2>nul md "%~1"
  12.     move "%%b" "%~1"
  13.     set /a count+=1,"1/(count-%quantity%)">nul 2>&1||(set count=0&goto :eof)
  14. )
复制代码

作者: pcl_test    时间: 2016-11-13 18:16

  1. @echo off
  2. rem win7及以上系统运行
  3. set quantity=10
  4. powershell -c "$fd=1;dir *.gif|%%{$n+=1;ni $fd -force -type directory;mv $_ $fd;if($n -eq %quantity%){$n=0;$fd+=1}}"
  5. pause
复制代码





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