Board logo

标题: [文件操作] [已解决]批处理提取指定名称的文件 [打印本页]

作者: a6236130    时间: 2019-6-29 11:43     标题: [已解决]批处理提取指定名称的文件

本帖最后由 a6236130 于 2019-7-10 00:39 编辑

搜索文件,找到后移动到指定的文件夹里,并将其各自放在处理前图像原来所在的文件夹名称的文件夹里

求具体代码.......
  1. @echo off
  2. set "file_name=0000
  3. set "DstDir=E:\提取"
  4. if not exist "%DstDir%" md "%DstDir%"
  5. for /r %%a in ("*%file_name%*") do (
  6.     set "_path=%%~dpa"
  7.     setlocal enabledelayedexpansion
  8.     if /i "!_path:%DstDir%=!" equ "!_path!" (
  9.         set "_path=!_path:%~dp0=!"
  10.         set "_path=!_path:\=-!"
  11.         echo;f|xcopy "%%a" "%DstDir%\!_path!%%~nxa" /y
  12.     )
  13.     endlocal
  14. )
  15. pause
复制代码

作者: miqilaosu    时间: 2019-6-29 15:05

本帖最后由 miqilaosu 于 2019-6-29 15:33 编辑

回复 1# a6236130


    没太看明白,你是指原文件夹名和文件名称一样吗,如果一样不用那么麻烦?处理前文件什么样,处理后文件什么样,请举个例子,还有我看你是要读取所有包含0000的文件名吗?
  1. for /f  "delims=*"  %%a in ('dir /b /s /a-d "*%file_name%*"') do (
  2. echo.%%~na
  3. )
复制代码

作者: a6236130    时间: 2019-6-29 15:28

回复 2# miqilaosu


    已补充
作者: miqilaosu    时间: 2019-6-29 15:46

本帖最后由 miqilaosu 于 2019-6-29 16:40 编辑

回复 3# a6236130
  1. echo on
  2. set "file_name=E:\提取\1.txt"
  3. set "DstDir=E:\提取"
  4. if not exist "%DstDir%" md "%DstDir%"
  5. for /f %%i in ('type "%file_name%"') do (
  6. for /f "delims=*" %%a in ('dir /b /s /a-d "*%%i*"') do (
  7. set "_path=%%~dpa"
  8.     setlocal enabledelayedexpansion
  9.     if /i "!_path:%DstDir%=!" equ "!_path!" (
  10.         set "_path=!_path:%~dp0=!"
  11.         set "_path=!_path:\=-!"
  12.         echo;f|xcopy "%%a" "%DstDir%\!_path:~0,-1!\%%~nxa" /y
  13.     )
  14.     endlocal
  15. )
  16. )
  17. pause
复制代码
在你的基础上改的
1.txt文件主要是你要查的文件名太多了,把要拷的名字都放里边,0000、0000-1、0000-2、kkf,等(每行一个),位置自己改吧,我搜索的是包含0000等 的文件名,如果是绝对文件名,自己对掉*号,如果是指定文件类型后缀名自己加上就行了,在DIR那修改就行
你也可以写成
  1. echo off
  2. set "file_name=0000 0000-1 0000-2 kkf"
  3. set "DstDir=E:\提取"
  4. if not exist "%DstDir%" md "%DstDir%"
  5. for /d %%i in (%file_name%) do (
  6. for /f "delims=*" %%a in ('dir /b /s /a-d "*%%i*"') do (
  7. set "_path=%%~dpa"
  8.     setlocal enabledelayedexpansion
  9.     if /i "!_path:%DstDir%=!" equ "!_path!" (
  10. set "var=%%~nxa"
  11.         set "_path=!_path:%~dp0=!"
  12.         set "_path=!_path:\=-!"
  13.         echo;f|xcopy "%%a" "%DstDir%\!_path:~0,-1!\%%~nxa" /y
  14.     )
  15.     endlocal
  16. )
  17. )
  18. pause
复制代码

作者: a6236130    时间: 2019-6-29 16:03

回复 4# miqilaosu


    ........,这个貌似读不了txt内的内容,提示找不到文件呢
作者: miqilaosu    时间: 2019-6-29 16:11

本帖最后由 miqilaosu 于 2019-6-29 17:19 编辑

回复 5# a6236130
直接用肯定不行,因为E:\1.txt文件没有需要后建立,你用第二种吧
作者: a6236130    时间: 2019-6-29 16:18

回复 6# miqilaosu


完美解决,谢谢
作者: a6236130    时间: 2019-6-29 16:24

回复 6# miqilaosu
  1. echo;f|xcopy "%%a" "%DstDir%\!_path:~0,-1!\%%~nxa" /y
复制代码
我把XCOPY 改成move  为何提示语法错误......
想改成移动的试试
作者: miqilaosu    时间: 2019-6-29 16:51

本帖最后由 miqilaosu 于 2019-6-29 16:56 编辑

回复 8# a6236130
  1. if not exist "%DstDir%\!_path:~0,-1!\" md "%DstDir%\!_path:~0,-1!\"
  2.         echo Y|move "%%a" "%DstDir%\!_path:~0,-1!\%%~nxa"
复制代码
你需要先创建文件夹,还有MOVE 没有/y  不过可以用ECHO选择覆盖
作者: a6236130    时间: 2019-6-29 17:10

回复 9# miqilaosu


    你说的创建文件夹是指哪?每个文件的文件夹还是 “提取”文件夹
作者: miqilaosu    时间: 2019-6-29 17:14

本帖最后由 miqilaosu 于 2019-6-29 17:17 编辑

回复 10# a6236130


    你想移动到的文件夹,E:\提取 下的,如果不存在MOVE 不会创建文件夹的  ,我上面那两行你直接替换copy那行就行
!_path:~0,-1! 至于这个为什么 加了个不读最后一个字符是因为后面有\,虽然你已经替换成了-,但如果不去掉还是和原文件名不一样,
作者: a6236130    时间: 2019-6-29 17:17

回复 11# miqilaosu


    :handshake
OKOK
作者: /zhqsystem/zhq    时间: 2019-6-29 23:13

for %%n in (0000;0000-1;0000-2;kkf)do for /f "delims=" %%i in ('dir/a-d/s/b ".\*%%~nn*"')do if /i "%%~ni"=="%%~nn" for /f "delims=" %%p in ("%%~fi\..")do (
if not exist ".\提取\%%~nxp\" md ".\提取\%%~nxp\"
rem 直接复制:&&xcopy/y "%%~fi" ".\提取\%%~nxp\"
rem 直接移动:&&move/y "%%~fi" ".\提取\%%~nxp\"
)




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