Board logo

标题: [文件操作] [已解决]批处理如何提取文件夹的指定文件出来呢? [打印本页]

作者: 228630386    时间: 2015-9-12 12:45     标题: [已解决]批处理如何提取文件夹的指定文件出来呢?

本帖最后由 pcl_test 于 2015-9-15 00:44 编辑

求解,如何提取文件夹的指定内容出来呢?就如以下图片一样,在服务器中的目录下运行命令,
把除了1,2,3,4,5,7,15,16以外的图片拷下来,这可以用命令实现么?
复制的内容可以放到电脑中的一个指定位置中,如 E:\描述图提取
最后要提取的内容是
001,003,006,008,010这几个文件,和其中的一些图片。

测试图片
http://pan.baidu.com/s/1bn6rzgN
作者: 尘丶    时间: 2015-9-12 14:51

本帖最后由 尘丶 于 2015-9-12 15:27 编辑
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%a in ('dir /b /s *.jpg') do (
  3.     if not %%~na equ 1 if not %%~na equ 2 if not %%~na equ 3 if not %%~na equ 4 if not %%~na equ 5 if not %%~na
  4. equ 7 if not %%~na equ 15 if not %%~na equ 16 (
  5.     set "str=%%~dpa"
  6.     set "str=!str:~0,-1!"
  7.     for /f "delims=" %%b in ("!str!") do set str2=%%~nb
  8.     md e:\100\!str2! >nul 2>nul
  9.     copy "%%a" e:\100\!str2!
  10. )
  11. )
  12. pause
复制代码

作者: 228630386    时间: 2015-9-12 15:00

回复 2# 尘丶


    嗯,刚会这个疑问,因为很多时候6图都分重复的,能否实现连文件夹也生成呢?
作者: 尘丶    时间: 2015-9-12 15:27

回复 3# 228630386


    已修改
作者: 回家路上    时间: 2015-9-12 15:39

本帖最后由 回家路上 于 2015-9-12 16:04 编辑
  1. @echo off
  2. :: 目标文件夹
  3. set dest=E:\描述图提取\
  4. :: 图片根目录,批处理所在文件夹,可修改
  5. set rootpath=%~dp0
  6. :: 要拷贝的文件夹
  7. set res=001,003,006,008,010
  8. :: 要排除的图片
  9. set exc=1,2,3,4,5,7,15,16
  10. for %%i in (%res%) do (
  11. pushd %rootpath%%%i\
  12. for /f "delims=" %%j in ('dir *.jpg /b /a-d') do (
  13. for %%a in (%exc%) do if "%%~nj" equ "%%a" set f=1
  14. if not defined f xcopy /y %%~fj %dest%%%i\
  15. set "f="
  16. )
  17. popd
  18. )
  19. pause & exit /b
复制代码

作者: 228630386    时间: 2015-9-12 15:45

回复 4# 尘丶


    可以了,命令实在太强大了,不但速度快,准确还100%。
    如果命令在服务器中运行,应该也可以实现吧?这要回到公司才能测试。。非常感谢,在工作中可以省下不小时间!
作者: 228630386    时间: 2015-9-12 15:46

回复 5# 回家路上


    因为每次图片可能在不同的文件夹中的,如果指定的话,用到其它文件夹中就不能实行。
作者: 回家路上    时间: 2015-9-12 15:58

回复 7# 228630386


额,我指定的也是当前文件夹。(⊙﹏⊙)b
作者: 228630386    时间: 2015-9-12 16:01

回复 8# 回家路上


    set res=001,003,006,008,010
 哪这个是什么意思呢?
作者: 回家路上    时间: 2015-9-12 16:08

回复 9# 228630386


行吧,你问题已经解决了就行了。
作者: pcl_test    时间: 2015-9-12 18:12

通常都是从客户端访问服务器进行文件下载,LZ却要从服务器直接分发文件到客户端,那么,客户端设置了可写的权限没?
作者: 228630386    时间: 2015-9-12 19:41

回复 11# pcl_test

因为图片都是放在服务器中的,如果不能实现在服务器中操作,只能整个文件夹拷在本地中再运行命令。
客户端设置了可写的权限没?这个我也不太清楚,不过之前写了一些命令都是要本机运行,然后在服务器复制下来做备份。
作者: 228630386    时间: 2015-9-14 13:22

回复 2# 尘丶


    你好,批处理中能否也可以生成当前文件的文件名,如果“测试文件”中下有多个带有多个提取的结果。
   “测试文件”这个文件名能否也能生成,具体文件名每次都不同,应该是在md后面改的,但我改了不可以,求指点。
作者: 尘丶    时间: 2015-9-14 18:36

本帖最后由 尘丶 于 2015-9-14 18:38 编辑

当前文件名字
FOR
命令中的变量  FOR命令中有一些变量,他们的用法许多新手朋友还不太了解,今天给大家讲解他们的用法! 先把FOR的变量全部列出来:      
~I       - 删除任何引号("),扩展 %I     
删除引号规则如下(BAT兄补充!)  1、若字符串首尾同时存在引号,则删除首尾的引号; 2、若字符串尾不存在引号,则删除字符串首的引号;  3、如果字符串中间存在引号,或者只在尾部存在引号,则不删除。 龙卷风补充:无头不删,有头连尾删。
%%i:文件完整信息
%~fI     - 将 %I 扩展到一个完全合格的路径名     
%~dI     - 仅将 %I 扩展到一个驱动器号     
%~pI     - 仅将 %I 扩展到一个路径     
%~nI     - 仅将 %I 扩展到一个文件名     
%~xI     - 仅将 %I 扩展到一个文件扩展名     
%~sI     - 扩展的路径只含有短名     
%~aI     - 将 %I 扩展到文件的文件属性     
%~tI     - 将 %I 扩展到文件的日期/时间     
%~zI     - 将 %I 扩展到文件的大小      
如果不清楚最好另外发个帖子提问再加上要求和图片那样,直接描述比较难懂
作者: 228630386    时间: 2015-9-14 21:09

回复 14# 尘丶


应该在你给的基础上修改就可以了,因为每个品牌提取都不同,想这个也能生成文件名,然后文件名内就是提取的结果。
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%a in ('dir /b /s *.jpg') do (
  3.     if not %%~na equ 1 if not %%~na equ 2 if not %%~na equ 3 if not %%~na equ 4 if not %%~na equ 5 if not %%~na
  4. equ 7 if not %%~na equ 15 if not %%~na equ 16 (
  5.     set "str=%%~dpa"
  6.     set "str=!str:~0,-1!"
  7.     for /f "delims=" %%b in ("!str!") do set str2=%%~nb
  8.     md e:\100\!str2! >nul 2>nul
  9.     copy "%%a" e:\100\!str2!
  10. )
  11. )
  12. pause
复制代码

作者: 尘丶    时间: 2015-9-14 21:50

回复 15# 228630386
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%a in ('dir /b /s *.jpg') do (
  3.     if not %%~na equ 1 if not %%~na equ 2 if not %%~na equ 3 if not %%~na equ 4 if not %%~na equ 5 if not %%~na
  4. equ 7 if not %%~na equ 15 if not %%~na equ 16 (
  5.     set "str=%%~dpa"
  6.     set "str=!str:~0,-1!"
  7.     for /f "delims=" %%b in ("!str!") do set str2=%%~nb
  8.     md e:\描述图读取\测试文件\!str2! >nul 2>nul
  9.     copy "%%a" e:\描述图读取\测试文件\!str2!
  10. )
  11. )
  12. pause
复制代码
这样? 不是的话你把文件和要求一起存起来 发个链接出来。
作者: 228630386    时间: 2015-9-14 22:20

回复 16# 尘丶


    "测试文件" 只是一个文件夹名,能否换成其它文件夹名也能自动生成,这个文件名不是固定的,可能我表达得不太好。
作者: 尘丶    时间: 2015-9-14 22:48

本帖最后由 尘丶 于 2015-9-14 22:49 编辑

文件名随机吗? 随机的话有没啥规律举个例子看看可以做不
发效果图
作者: 228630386    时间: 2015-9-14 23:16

回复 18# 尘丶


    就是假如这些文件里面,我把命令放到这些文件夹中提取,这些文件中还有多个子文件夹,我需要提取有除了1、2、3、4、5、7、15、16图以外的图片
  我就是想保留主目录的名称。
作者: 228630386    时间: 2015-9-14 23:24

回复 18# 尘丶


就好像这个命令,可以保留文件夹名称的,但我又知道怎么改才行,显示命令错误的。前面的命令可以无视,这只是个例子。
作者: pcl_test    时间: 2015-9-15 00:21

本帖最后由 pcl_test 于 2015-9-15 13:30 编辑
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%a in ("%cd%") do set "f=%%~na"
  3. set "t=\\1.jpg \\2.jpg \\3.jpg \\4.jpg \\5.jpg \\7.jpg \\15.jpg \\16.jpg"
  4. for /f "delims=" %%b in ('dir /a-d /b /s *.jpg^|findstr /iev "%t%"') do (
  5.     set "p=%%~dpb"
  6.     set "p=!p:%cd%\=!"
  7.     xcopy "%%b" "E:\描述图提取\%f%\!p!" /y
  8. )
  9. pause
复制代码

作者: 228630386    时间: 2015-9-15 00:32

回复 21# pcl_test


    非常感谢,又一次帮到我了,真心谢谢各位大侠!!!
作者: 228630386    时间: 2015-9-15 11:02

回复 21# pcl_test

亲,又遇到一个新问题了,因为文件名有日期排在前面的,但建出来的文件名只有 "9",
是否类似以下格式的文件名不可以实现完整一模一样的命名?

9.16【图片】天线宝宝衣服专场 五区 192款 业务部 张三(合格98款)
作者: pcl_test    时间: 2015-9-15 11:53

本帖最后由 pcl_test 于 2015-9-15 13:30 编辑

回复 23# 228630386

修改for /f "delims=" %%a in ("%cd%") do set "f=%%~nxa"


另一种方式
  1. @echo off
  2. for /f "delims=" %%a in ("%cd%") do set "f=%%~nxa"
  3. set "t=\\1.jpg \\2.jpg \\3.jpg \\4.jpg \\5.jpg \\7.jpg \\15.jpg \\16.jpg"
  4. for /f "delims=" %%b in ('findstr /ms .* *.jpg^|findstr /iev "%t%"') do (
  5.     echo;f|xcopy "%cd%\%%b" "E:\描述图提取\%f%\%%b" /y
  6. )
  7. pause
复制代码

作者: 228630386    时间: 2015-9-15 12:39

回复 24# pcl_test


    命令真的很多变,好强大,可以了,非常感谢!
作者: terse    时间: 2015-9-15 13:14

加个参数呢
另 用 FINDSTR   ”\ “ 要转义
  1. @echo off
  2. for /f "delims=" %%a in ("%cd%") do set "f=%%~na"
  3. (for %%i in (1,2,3,4,5,7,15,16) do echo;\%%i.jpg)>"$"
  4. xcopy *.jpg "E:\描述图提取\%f%\" /e /y /s /EXCLUDE:$
  5. del $
  6. pause
复制代码

作者: flyinnet9    时间: 2015-9-15 14:51

/EXCLUDE参数会排除所有包含字符串的文件,

例如$中含字符串1.jpg,则1.jpg、11.jpg、21.jpg等等都在排除之列
作者: pcl_test    时间: 2015-9-15 15:05

回复 27# flyinnet9

echo;\%%i.jpg)>"$" 已做了限定
作者: flyinnet9    时间: 2015-9-15 15:14

回复 28# pcl_test


    哈哈,我还是不够仔细




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