找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 26562|回复: 12

[文件操作] [已解决]批处理提取指定名称的文件

[复制链接]
发表于 2019-6-29 11:43:51 | 显示全部楼层 |阅读模式
本帖最后由 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
复制代码
发表于 2019-6-29 15:05:55 | 显示全部楼层
本帖最后由 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. )
复制代码
 楼主| 发表于 2019-6-29 15:28:22 | 显示全部楼层
回复 2# miqilaosu


    已补充
发表于 2019-6-29 15:46:39 | 显示全部楼层
本帖最后由 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
复制代码

评分

参与人数 1技术 +1 收起 理由
a6236130 + 1 完美解决

查看全部评分

 楼主| 发表于 2019-6-29 16:03:28 | 显示全部楼层
回复 4# miqilaosu


    ........,这个貌似读不了txt内的内容,提示找不到文件呢
发表于 2019-6-29 16:11:02 | 显示全部楼层
本帖最后由 miqilaosu 于 2019-6-29 17:19 编辑

回复 5# a6236130
直接用肯定不行,因为E:\1.txt文件没有需要后建立,你用第二种吧
 楼主| 发表于 2019-6-29 16:18:36 | 显示全部楼层
回复 6# miqilaosu


完美解决,谢谢
 楼主| 发表于 2019-6-29 16:24:19 | 显示全部楼层
回复 6# miqilaosu
  1. echo;f|xcopy "%%a" "%DstDir%\!_path:~0,-1!\%%~nxa" /y
复制代码
我把XCOPY 改成move  为何提示语法错误......
想改成移动的试试
发表于 2019-6-29 16:51:11 | 显示全部楼层
本帖最后由 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选择覆盖
 楼主| 发表于 2019-6-29 17:10:46 | 显示全部楼层
回复 9# miqilaosu


    你说的创建文件夹是指哪?每个文件的文件夹还是 “提取”文件夹
发表于 2019-6-29 17:14:21 | 显示全部楼层
本帖最后由 miqilaosu 于 2019-6-29 17:17 编辑

回复 10# a6236130


    你想移动到的文件夹,E:\提取 下的,如果不存在MOVE 不会创建文件夹的  ,我上面那两行你直接替换copy那行就行
!_path:~0,-1! 至于这个为什么 加了个不读最后一个字符是因为后面有\,虽然你已经替换成了-,但如果不去掉还是和原文件名不一样,
 楼主| 发表于 2019-6-29 17:17:34 | 显示全部楼层
回复 11# miqilaosu


    :handshake
OKOK
发表于 2019-6-29 23:13:53 | 显示全部楼层
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\"
)
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-19 05:43 , Processed in 0.022850 second(s), 7 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表