Board logo

标题: [文件操作] [已解决]批处理根据指定条件移动指定文件到对应文件夹中? [打印本页]

作者: czvde    时间: 2021-8-21 12:34     标题: [已解决]批处理根据指定条件移动指定文件到对应文件夹中?

123文件夹:
图片-2001_001_处理.txt
图片-2001_001_123.jpg
图片-1603_103_123.jpg

效果:
123文件夹:
图片-1603_103_123.jpg

移到“123”文件夹中“图片”子文件夹中内容:
图片-2001_001_处理.txt
图片-2001_001_123.jpg


问题已解决,谢谢!!
作者: newswan    时间: 2021-8-21 12:59

图片-* 移动
图片-201603_103_123.jpg 不移动?
作者: czvde    时间: 2021-8-21 13:08

本帖最后由 czvde 于 2021-8-21 16:52 编辑
图片-* 移动
图片-201603_103_123.jpg 不移动?
newswan 发表于 2021-8-21 12:59


已解决
作者: newswan    时间: 2021-8-21 15:34

本帖最后由 newswan 于 2021-8-21 15:51 编辑

用两个for好一些
  1. for /f "tokens=1-3,* delims=-_" %%a in ('dir /b /a-d /on 123\*.*') do (
  2.     set/a _T_%%b_%%c_+=1
  3. )
  4. set _
  5. for /f "tokens=1-3,* delims=-_" %%a in ('dir /b /a-d /on 123\*.*') do (
  6.     if !_T_%%b_%%c_! gtr 1 (
  7.         if not exist 123\%%a mkdir 123\%%a
  8.         echo move 123\*-%%b_%%c_* 123\%%a\
  9.     )
  10. )
复制代码

作者: czvde    时间: 2021-8-21 16:04

本帖最后由 czvde 于 2021-8-21 16:50 编辑

回复 4# newswan


问题已解决
作者: qixiaobin0715    时间: 2021-8-21 16:05

回复 1# czvde
未测试
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "tokens=1,2 delims=_" %%i in ('dir /b /a-d') do (
  4.     if defined %%i%%j (
  5.         if !m!==0 (
  6.             set /a n+=1
  7.             set str!n!=%%i_%%j
  8.         )
  9.         set m=1
  10.     ) else (
  11.         set m=0
  12.         set %%i%%j=true
  13.     )
  14. )
  15. for /l %%a in (1,1,!n!) do (
  16.     if not exist !str%%a:~,2! md !str%%a:~,2!
  17.     move "!str%%a!*.*" "!str%%a:~,2!"
  18. )
  19. dir /b /a-d>未移动文件的文件名说明.txt
  20. pause
复制代码

作者: newswan    时间: 2021-8-21 16:10

回复 5# czvde


批处理放在123下面
作者: newswan    时间: 2021-8-21 16:11

本帖最后由 newswan 于 2021-8-21 16:39 编辑

或者
  1. set _sour_=x:\123
  2. for /f "tokens=1-3,* delims=-_" %%a in ('dir /b /a-d /on %_sour_%\*.*') do (
  3.     set/a _T_%%b_%%c_+=1
  4. )
  5. set _
  6. for /f "tokens=1-3,* delims=-_" %%a in ('dir /b /a-d /on %_sour_%\*.*') do (
  7.     if !_T_%%b_%%c_! gtr 1 (
  8.         if not exist %_sour_%\%%a mkdir %_sour_%\%%a
  9.         echo move %_sour_%\*-%%b_%%c_* %_sour_%\%%a\
  10.     )
  11. )
复制代码
如果显示正确,把 echo move 的 echo 删除
作者: czvde    时间: 2021-8-21 16:16

本帖最后由 czvde 于 2021-8-21 16:49 编辑

回复 8# newswan


已解决
作者: newswan    时间: 2021-8-21 16:41

回复 9# czvde


上次 123 没改完,重新改了下,
如果正确,把 echo move 改成 move

文件前面加上
  1. @echo off
  2. setlocal ENABLEDELAYEDEXPANSION
复制代码

作者: newswan    时间: 2021-8-21 16:46

  1. @echo off
  2. setlocal ENABLEDELAYEDEXPANSION
  3. set _sour_=123
  4. pushd %_sour_%
  5. for /f "tokens=1-3,* delims=-_" %%a in ('dir /b /a-d /on *.*') do (
  6.     set/a _T_%%b_%%c_+=1
  7. )
  8. set _
  9. for /f "tokens=1-3,* delims=-_" %%a in ('dir /b /a-d /on *.*') do (
  10.     if !_T_%%b_%%c_! gtr 1 (
  11.         if not exist %%a mkdir %%a
  12.         echo move *-%%b_%%c_* %%a\
  13.     )
  14. )
  15. popd
复制代码
如果正确,把 echo move 改成 move




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