标题: [文件操作] [已解决]批处理提取指定名称的文件 [打印本页]
作者: a6236130 时间: 2019-6-29 11:43 标题: [已解决]批处理提取指定名称的文件
本帖最后由 a6236130 于 2019-7-10 00:39 编辑
搜索文件,找到后移动到指定的文件夹里,并将其各自放在处理前图像原来所在的文件夹名称的文件夹里
求具体代码.......- @echo off
-
- set "file_name=0000
-
- set "DstDir=E:\提取"
-
- if not exist "%DstDir%" md "%DstDir%"
-
- for /r %%a in ("*%file_name%*") do (
-
- set "_path=%%~dpa"
-
- setlocal enabledelayedexpansion
-
- if /i "!_path:%DstDir%=!" equ "!_path!" (
-
- set "_path=!_path:%~dp0=!"
-
- set "_path=!_path:\=-!"
-
- echo;f|xcopy "%%a" "%DstDir%\!_path!%%~nxa" /y
-
- )
-
- endlocal
-
- )
-
- pause
复制代码
作者: miqilaosu 时间: 2019-6-29 15:05
本帖最后由 miqilaosu 于 2019-6-29 15:33 编辑
回复 1# a6236130
没太看明白,你是指原文件夹名和文件名称一样吗,如果一样不用那么麻烦?处理前文件什么样,处理后文件什么样,请举个例子,还有我看你是要读取所有包含0000的文件名吗?- for /f "delims=*" %%a in ('dir /b /s /a-d "*%file_name%*"') do (
- echo.%%~na
- )
复制代码
作者: a6236130 时间: 2019-6-29 15:28
回复 2# miqilaosu
已补充
作者: miqilaosu 时间: 2019-6-29 15:46
本帖最后由 miqilaosu 于 2019-6-29 16:40 编辑
回复 3# a6236130 - echo on
- set "file_name=E:\提取\1.txt"
- set "DstDir=E:\提取"
- if not exist "%DstDir%" md "%DstDir%"
- for /f %%i in ('type "%file_name%"') do (
- for /f "delims=*" %%a in ('dir /b /s /a-d "*%%i*"') do (
-
- set "_path=%%~dpa"
-
- setlocal enabledelayedexpansion
-
- if /i "!_path:%DstDir%=!" equ "!_path!" (
-
- set "_path=!_path:%~dp0=!"
-
- set "_path=!_path:\=-!"
-
- echo;f|xcopy "%%a" "%DstDir%\!_path:~0,-1!\%%~nxa" /y
-
- )
-
- endlocal
-
- )
- )
- pause
复制代码
在你的基础上改的
1.txt文件主要是你要查的文件名太多了,把要拷的名字都放里边,0000、0000-1、0000-2、kkf,等(每行一个),位置自己改吧,我搜索的是包含0000等 的文件名,如果是绝对文件名,自己对掉*号,如果是指定文件类型后缀名自己加上就行了,在DIR那修改就行
你也可以写成- echo off
- set "file_name=0000 0000-1 0000-2 kkf"
- set "DstDir=E:\提取"
- if not exist "%DstDir%" md "%DstDir%"
- for /d %%i in (%file_name%) do (
-
- for /f "delims=*" %%a in ('dir /b /s /a-d "*%%i*"') do (
-
- set "_path=%%~dpa"
-
- setlocal enabledelayedexpansion
-
- if /i "!_path:%DstDir%=!" equ "!_path!" (
- set "var=%%~nxa"
-
-
- set "_path=!_path:%~dp0=!"
-
- set "_path=!_path:\=-!"
-
- echo;f|xcopy "%%a" "%DstDir%\!_path:~0,-1!\%%~nxa" /y
-
-
- )
-
- endlocal
-
-
- )
- )
- 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 - 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 - if not exist "%DstDir%\!_path:~0,-1!\" md "%DstDir%\!_path:~0,-1!\"
- 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 |