Board logo

标题: [文件操作] 批处理如何根据文件名批量移动? [打印本页]

作者: ytyyutianyun    时间: 2011-11-22 12:36     标题: 批处理如何根据文件名批量移动?

文件是在E:\Experimental data\test
文件为:
名称            
twoperpendicularshear1d89jdAnH12.grd
twoperpendicularmiddle6d140jdAnH23.grd
onevertical145jdAnH23.grd
onevertical148jdAnH13.grd
twoperpendicularmiddle6d111jdAnH13.grd
twoperpendicularshear6d234jdAnH12.grd
onevertical148jdAnH12.grd

目的是把onevertical145jdAnH23.grd,onevertical148jdAnH13.grd,onevertical148jdAnH12.grd放入E:\Experimental data\test\one\vertical
把twoperpendicularshear1d89jdAnH12.grd,twoperpendicularmiddle6d140jdAnH23.grd,twoperpendicularmiddle6d111jdAnH13.grd,twoperpendicularshear6d234jdAnH12.grd
放入E:\Experimental data\test\two\perpendicular\middle\6d
其中E:\Experimental data\test\one\vertical和E:\Experimental data\test\two\perpendicular\middle\6d目录不存在

注:我有办法可以把twoperpendicularmiddle6d140jdAnH23.grd变成two_perpendicular_middle_6d_140_jdAnH23.grd这样有可能好分吧

谢谢


我看过了http://bathome.l3.wuyou.com/viewthread.php?tid=2628
编了一个,但不行
  1.     @echo off
  2.     echo 全盘扫描E盘下的grd文件,请耐心等待...
  3.     cd.>list.txt
  4.     for /f "delims=" %%i in ('dir /a-d /b /s E:\Experimental data\test\*.grd') do (echo %%i)>>list.txt
  5.     echo.>>list.txt
  6.     for /f "delims=" %%i in (list.txt) do (
  7.         for /f "tokens=1 delims==l" %%j in ("%%i") do (
  8.             for /f "delims=" %%k in ('findstr /iec:"%%j.grd" list.txt 2^>nul') do (
  9.                 move E:\Experimental data\test\%%i.grd "%%~dpk"
  10.             )
  11.         )
  12.     )
  13.     pause
复制代码

作者: awk    时间: 2011-11-22 22:16

哪里报错了?
作者: ytyyutianyun    时间: 2011-11-23 08:27

回复 2# awk


首先,list.txt是空的
其次,出现
  1. 全盘扫描E盘下的txt文件,请耐心等待...
  2. 系统找不到指定的路径。
  3. 请按任意键继续. . .
复制代码

作者: ytyyutianyun    时间: 2011-11-23 11:56

回复 1# ytyyutianyun
  1.     @echo off
  2.     echo 全盘扫描E盘下的grd文件,请耐心等待...
  3.     cd.>list.txt
  4.     for /f "delims=" %%i in ('dir  /a-d /b  *.grd') do
  5. (echo %%i)>>list.txt
  6.     echo.>>list.txt
  7.     for /f "delims=" %%i in (list.txt) do (
  8.         for /f "tokens=1 delims==l" %%j in ("%%i") do (
  9. md %%j
  10. move %%i %%j
  11.         )
  12.     )
  13.     pause
复制代码
重新试了一下,不太满意。主要是md %%j 会出现“子目录或文件 twoperpendicu 已经存在”。
作者: awk    时间: 2011-11-23 12:39

回复 4# ytyyutianyun


可以在md之前加个判断
  1. @echo off
  2. echo 全盘扫描E盘下的grd文件,请耐心等待...
  3. cd.>list.txt
  4. for /f "delims=" %%i in ('dir  /a-d /b  *.grd') do (echo %%i)>>list.txt
  5. echo.>>list.txt
  6. for /f "delims=" %%i in (list.txt) do (
  7.     for /f "tokens=1 delims==l" %%j in ("%%i") do (
  8.         if not exist "%%j\" (
  9.             md %%j
  10.         )
  11.         move %%i %%j
  12.     )
  13. )
  14. pause
复制代码

作者: ytyyutianyun    时间: 2011-11-23 13:26

回复 5# awk
谢谢
作者: ytyyutianyun    时间: 2011-11-23 14:29

回复 1# ytyyutianyun

学习了http://bathome.l3.wuyou.com/thread-14682-1-1.html后对1d,3d,6d进行分类。其中
  1. 1d
  2. 3d
  3. 6d
复制代码
保存到sort.txt中
  1.     @echo off
  2.     echo 全盘扫描E盘下的grd文件,请耐心等待...
  3.     cd.>list.txt
  4.     for /f "delims=" %%i in ('dir  /a-d /b  *.grd') do
  5. (echo %%i)>>list.txt
  6.     echo.>>list.txt
  7.         for /f "delims=" %%j in (sort.txt) do (
  8. md %%j
  9.             for /f "delims=" %%k in ('findstr /c:"%%j"
  10. list.txt') do (
  11.             move %%k %%j
  12.         )
  13.     )
  14.     pause
复制代码





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