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

[文件操作] [已解决]批处理根据指定条件移动指定文件到对应文件夹中?

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


问题已解决,谢谢!!

图片-* 移动
图片-201603_103_123.jpg 不移动?

TOP

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


已解决

TOP

本帖最后由 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. )
复制代码
1

评分人数

TOP

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

回复 4# newswan


问题已解决

TOP

回复 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
复制代码
1

评分人数

TOP

回复 5# czvde


批处理放在123下面

TOP

本帖最后由 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 删除

TOP

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

回复 8# newswan


已解决

TOP

回复 9# czvde


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

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

TOP

  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
1

评分人数

TOP

返回列表