Board logo

标题: [文件操作] [已解决]批处理怎样取文件名中内容为文件夹名,并移动文件? [打印本页]

作者: 511182890    时间: 2015-5-28 08:54     标题: [已解决]批处理怎样取文件名中内容为文件夹名,并移动文件?

在这个图片,我现在需要一个批处理,放在“座套DXF”这个文件夹下,我有AA BB CC文件夹好多个,再子文件夹G1101 G1201又是好多个,我要执行的是最里面的文件AD103C-G1101-AA-118-主副背料-四向-769.dxf再取成“AA版\G1101\118\AD103C-G1101-AA-118-主副背料-四向-769.dxf”
这个118是一个数字,从”10-999“反正就是二位与三位数,118前后都是有"-"的,所以都一样,都是在第三个“-”与第四个“-”之间
作者: Batcher    时间: 2015-5-28 10:35

  1. @echo off
  2. for /f "delims=" %%i in ('dir /b /s /a-d *.dxf') do (
  3.     for /f "tokens=4 delims=-" %%j in ("%%i") do (
  4.         if not exist "%%~dpi%%j\" (
  5.             md "%%~dpi%%j"
  6.         )
  7.         move /y "%%i" "%%~dpi%%j"
  8.     )
  9. )
复制代码

作者: 511182890    时间: 2015-5-28 10:48

回复 2# Batcher


    你好,执行一次是完美的,如果运行二次就是...\118\118\*.dxf了
执行三次就是...\118\118\118\*.dxf了
作者: Batcher    时间: 2015-5-28 11:59

回复 3# 511182890
  1. @echo off
  2. for /d %%i in (*) do (
  3.     pushd "%%i"
  4.     for /d %%j in (*) do (
  5.         for %%k in (%%j\*.dxf) do (
  6.             for /f "tokens=4 delims=-" %%l in ("%%~nk") do (
  7.                 if not exist "%%j\%%l\" (
  8.                     md "%%j\%%l"
  9.                 )
  10.                 move /y "%%k" "%%j\%%l"
  11.             )
  12.         )
  13.     )
  14.     popd
  15. )
复制代码

作者: 511182890    时间: 2015-5-28 12:26

回复 4# Batcher


    在帮我优化一个程序
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "tokens=1,2* delims=-" %%i in ('dir /a-d /b *.dxf') do (
  4. set "n=%%j"
  5. md "!n:~,5!\" 2>nul
  6. move "%%i-%%j-%%k" "!n:~,5!\"
  7. )
复制代码
这是之前的,我是放在”AA版“文件夹中的,取G1101字断作为文件夹名建的,现在我想让他放在“座套DXF”中。
作者: 511182890    时间: 2015-5-28 12:35

本帖最后由 511182890 于 2015-5-28 12:38 编辑

回复 4# Batcher


    这个代码能不能只取数字,因为不单单是“-138-”,有些是“-136二边-”或者“-138后座破开-”有中文,也有像这样的“-33-”只有二位数的
作者: Batcher    时间: 2015-5-28 13:01

回复 6# 511182890


    4楼代码你测试出什么问题了吗?请把测试用例发出来我试试
作者: 511182890    时间: 2015-5-28 13:19

回复 7# Batcher


    如果我的文件:
AD103C-G1101-AA-118二边-主副背料-四向-769.dxf
AD103C-G1101-AA-118二边三边-主副背料-四向-769.dxf
执行是:
118二边\AD103C-G1101-AA-118二边-主副背料-四向-769.dxf
118二边三边\AD103C-G1101-AA-118二边三边-主副背料-四向-769.dxf
作者: Batcher    时间: 2015-5-28 14:13

回复 8# 511182890
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /d %%i in (*) do (
  4.     pushd "%%i"
  5.     for /d %%j in (*) do (
  6.         for %%k in (%%j\*.dxf) do (
  7.             for /f "tokens=4 delims=-" %%l in ("%%~nk") do (
  8.                 set NewFolder=%%l
  9.                 for /f "delims=0123456789" %%m in ("%%l") do (
  10.                     if "%%m" neq "" (
  11.                         set NewFolder=!NewFolder:%%m=!
  12.                     )
  13.                 )
  14.                 if not exist "%%j\!NewFolder!\" (
  15.                     md "%%j\!NewFolder!"
  16.                 )
  17.                 move /y "%%k" "%%j\!NewFolder!"
  18.             )
  19.         )
  20.     )
  21.     popd
  22. )
复制代码

作者: 511182890    时间: 2015-5-28 14:20

本帖最后由 511182890 于 2015-5-28 14:25 编辑

回复 9# Batcher


    move 能不能移动所有子目录的文件啊

跟上面的图没关系,例
我要把:座套DXF\BB\.....DXF,我要把BB及子目录下的所有。DXF文件移动到座套DXF这个文件夹中。
作者: 511182890    时间: 2015-5-28 14:23

跟上面的图没关系
例:
座套DXF\AA\...
我要把AA目录下的文件及子目录下的所有.DXF文件移动到座套DXF
怎么实现
作者: Batcher    时间: 2015-5-28 15:59

回复 10# 511182890


    一个move命令无法实现
作者: Batcher    时间: 2015-5-28 15:59

回复 11# 511182890
  1. @echo off
  2. pushd "AA版"
  3. for /f "delims=" %%i in ('dir /b /s /a-d *.dxf') do (
  4.     move /y "%%i" ..
  5. )
  6. popd
  7. pause
复制代码

作者: 511182890    时间: 2015-5-28 16:32

回复 13# Batcher


    谢谢,完美执行
作者: 511182890    时间: 2015-6-2 17:18

本帖最后由 511182890 于 2015-6-2 17:20 编辑

回复 13# Batcher


    新问题只取第一个字母作为文件夹
  目录文件:座套DXF\AA\G1201\136\FT2032-G1202-KC五位-146-副背料-倒顺-551.dxf
我要把批处理放在“座套DXF”下,执行一下得结果为座套DXF\AA\G1201\136\F\FT2032-G1202-KC五位-146-副背料-倒顺-551.dxf
我要把批处理放在“AA”下,执行一下得结果为座套DXF\AA\G1201\136\F\FT2032-G1202-KC五位-146-副背料-倒顺-551.dxf

要二个程序。且多次执行不重复创建F文件夹
作者: 511182890    时间: 2015-6-26 14:13

回复 2# Batcher


    http://www.bathome.net/thread-36257-1-1.html

帮忙看看




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