标题: [文件操作] [已解决]批处理如何提取文件夹的指定文件出来呢? [打印本页]
作者: 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 编辑
- @echo off&setlocal enabledelayedexpansion
- for /f "delims=" %%a in ('dir /b /s *.jpg') do (
- 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
- equ 7 if not %%~na equ 15 if not %%~na equ 16 (
- set "str=%%~dpa"
- set "str=!str:~0,-1!"
- for /f "delims=" %%b in ("!str!") do set str2=%%~nb
- md e:\100\!str2! >nul 2>nul
- copy "%%a" e:\100\!str2!
- )
- )
- 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 编辑
- @echo off
- :: 目标文件夹
- set dest=E:\描述图提取\
- :: 图片根目录,批处理所在文件夹,可修改
- set rootpath=%~dp0
- :: 要拷贝的文件夹
- set res=001,003,006,008,010
- :: 要排除的图片
- set exc=1,2,3,4,5,7,15,16
- for %%i in (%res%) do (
- pushd %rootpath%%%i\
- for /f "delims=" %%j in ('dir *.jpg /b /a-d') do (
- for %%a in (%exc%) do if "%%~nj" equ "%%a" set f=1
- if not defined f xcopy /y %%~fj %dest%%%i\
- set "f="
- )
- popd
- )
- 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# 尘丶
应该在你给的基础上修改就可以了,因为每个品牌提取都不同,想这个也能生成文件名,然后文件名内就是提取的结果。- @echo off&setlocal enabledelayedexpansion
- for /f "delims=" %%a in ('dir /b /s *.jpg') do (
- 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
- equ 7 if not %%~na equ 15 if not %%~na equ 16 (
- set "str=%%~dpa"
- set "str=!str:~0,-1!"
- for /f "delims=" %%b in ("!str!") do set str2=%%~nb
- md e:\100\!str2! >nul 2>nul
- copy "%%a" e:\100\!str2!
- )
- )
- pause
复制代码
作者: 尘丶 时间: 2015-9-14 21:50
回复 15# 228630386 - @echo off&setlocal enabledelayedexpansion
- for /f "delims=" %%a in ('dir /b /s *.jpg') do (
- 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
-
- equ 7 if not %%~na equ 15 if not %%~na equ 16 (
- set "str=%%~dpa"
- set "str=!str:~0,-1!"
- for /f "delims=" %%b in ("!str!") do set str2=%%~nb
- md e:\描述图读取\测试文件\!str2! >nul 2>nul
- copy "%%a" e:\描述图读取\测试文件\!str2!
- )
- )
- 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 编辑
- @echo off&setlocal enabledelayedexpansion
- for /f "delims=" %%a in ("%cd%") do set "f=%%~na"
- set "t=\\1.jpg \\2.jpg \\3.jpg \\4.jpg \\5.jpg \\7.jpg \\15.jpg \\16.jpg"
- for /f "delims=" %%b in ('dir /a-d /b /s *.jpg^|findstr /iev "%t%"') do (
- set "p=%%~dpb"
- set "p=!p:%cd%\=!"
- xcopy "%%b" "E:\描述图提取\%f%\!p!" /y
- )
- 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"
另一种方式- @echo off
- for /f "delims=" %%a in ("%cd%") do set "f=%%~nxa"
- set "t=\\1.jpg \\2.jpg \\3.jpg \\4.jpg \\5.jpg \\7.jpg \\15.jpg \\16.jpg"
- for /f "delims=" %%b in ('findstr /ms .* *.jpg^|findstr /iev "%t%"') do (
- echo;f|xcopy "%cd%\%%b" "E:\描述图提取\%f%\%%b" /y
- )
- pause
复制代码
作者: 228630386 时间: 2015-9-15 12:39
回复 24# pcl_test
命令真的很多变,好强大,可以了,非常感谢!
作者: terse 时间: 2015-9-15 13:14
加个参数呢
另 用 FINDSTR ”\ “ 要转义- @echo off
- for /f "delims=" %%a in ("%cd%") do set "f=%%~na"
- (for %%i in (1,2,3,4,5,7,15,16) do echo;\%%i.jpg)>"$"
- xcopy *.jpg "E:\描述图提取\%f%\" /e /y /s /EXCLUDE:$
- del $
- 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 |