标题: [文件操作] 【已解决】求批处理提取文件夹里指定类型的所有文件 [打印本页]
作者: meiszp 时间: 2015-8-28 21:31 标题: 【已解决】求批处理提取文件夹里指定类型的所有文件
本帖最后由 meiszp 于 2015-8-29 20:47 编辑
求大侠写一批处理
想将指定文件夹下(包括子文件夹)所有指定类型的文件提取出来(比如.mp3),然后放置在一个新文件夹下,并且目录结构不变。
谢谢!
作者: aa77dd@163.com 时间: 2015-8-28 22:21
要 copy 还是要移动
作者: 回家路上 时间: 2015-8-29 10:20
- @echo off & setlocal enabledelayedexpansion
- ::改成自己的路径,如“D:\Test”
- set "source=%~dp01"
- ::改成自己的路径
- set "target=%~dp02"
- echo;开始复制,稍等。。。。
- for /f "delims=" %%i in ('dir /b /s /a-d %source%\*.mp3') do (
- set "file=%%~fi"
- echo;复制文件———!file!
- for /f "usebackq" %%a in ('%source%') do (
- set "ref=!file:%%a\=!"
- echo;f|xcopy /y "!file!" "%target%\!ref!">nul 2>&1
- )
- )
- echo;完成。
- pause & exit /b
复制代码
作者: meiszp 时间: 2015-8-29 10:36
回复 2# aa77dd@163.com
要复制
作者: meiszp 时间: 2015-8-29 10:43
回复 3# 回家路上
谢谢!如果指定的文件夹就是批处理所在文件夹及子文件夹,copy的目标地址是批处理所在文件夹 下新建的“copy”文件夹,该如何更改呢?
作者: 回家路上 时间: 2015-8-29 11:37
回复 5# meiszp - @echo off & setlocal enabledelayedexpansion
- set "source=%~dp0"
- set "target=%~dp0copy"
- echo;开始复制,稍等。。。。
- for /f "delims=" %%i in ('dir /b /s /a-d %source%\*.mp3') do (
- set "file=%%~fi"
- if "!target:%%~fi=!" equ "!target!" (
- echo;复制文件———!file!
- for /f "usebackq" %%a in ('%source%') do (
- set "ref=!file:%%a=!"
- echo;f|xcopy /y "!file!" "%target%\!ref!">nul 2>&1
- )
- )
- )
- echo;完成。
- pause & exit /b
复制代码
作者: aa77dd@163.com 时间: 2015-8-29 12:19
回复 5# meiszp - xcopy "%~dp0*.mp3" \copy\ /s
- move \copy copy
- pause
复制代码
作者: meiszp 时间: 2015-8-29 20:46
回复 6# 回家路上
非常感谢!!
作者: meiszp 时间: 2015-8-29 20:46
回复 7# aa77dd@163.com
好简洁,谢谢!
作者: meiszp 时间: 2015-9-2 10:01
本帖最后由 meiszp 于 2015-9-2 10:04 编辑
回复 6# 回家路上
您好!在使用中想提取多个类型的文件,比如 要提取mp3 、wma 、wav格式文件,请问该怎么更改呢?写成下面的不行。
dir /b /s /a-d %source%\*.mp3 & wma & wav
还有就是如果在运行批处理时,提示需要提取哪些格式文件,手动输入扩展名提取,这个批处理又该怎么写呢?
非常感谢!!
作者: meiszp 时间: 2015-9-2 10:03
本帖最后由 meiszp 于 2015-9-2 10:04 编辑
回复 7# aa77dd@163.com
您好!在使用中想提取多个类型的文件,比如 要提取mp3 、wma 、wav格式文件,请问该怎么更改呢?
还有就是如果在运行批处理时,提示需要提取哪些格式文件,手动输入扩展名提取,这个批处理又该怎么写呢?
作者: 回家路上 时间: 2015-9-2 17:27
本帖最后由 回家路上 于 2015-9-2 18:02 编辑
回复 10# meiszp - dir /b /s /a-d "%source%\*.mp3" "%source%\*.wma" "%source%\*.wav"
复制代码
输入的话,使用set /p ,然后想办法批装出想要的字符串再执行dir就行了。- @echo off & setlocal enabledelayedexpansion
- set "source=%~dp0"
- set "target=%~dp0copy"
- echo;开始复制,稍等。。。。
- set /p exts=请输入要提取的类型(多个空格隔开):
- set dircmd=dir /b /s /a-d
- for %%i in (%exts%) do set dircmd=!dircmd! "%source%*.%%i"
- for /f "delims=" %%i in ('%dircmd%') do (
- ......
- )
- pause & exit /b
复制代码
如果常用到批处理的话,建议学一些批处理基础的。这样简单的东西的话自己也就可以测试修改了。
借7楼代码的话- @echo off
- set /p exts=请输入要提取的类型(多个空格隔开):
- for %%i in (%exts%) do (
- xcopy "%~dp0*.%%i" \copy\ /s
- )
- move \copy copy
- pause
复制代码
作者: meiszp 时间: 2015-9-6 10:50
回复 12# 回家路上
再次感谢!
使用时有两个问题请教:
1.使用时发现文件夹的名字不能含有空格,请问批处理都是这样吗?还是此批处理如此?
2.运行下面的代码时出错,修改了……输入也不行。- @echo off & setlocal enabledelayedexpansion
- set "source=%~dp0"
- set "target=%~dp0copy"
- echo;开始复制,稍等。。。。
- set /p exts=请输入要提取的类型(多个空格隔开):
- set dircmd=dir /b /s /a-d
- for %%i in (%exts%) do set dircmd=!dircmd! "%source%*.%%i"
- for /f "delims=" %%i in ('%dircmd%') do (
- ......
- )
- pause & exit /b
复制代码
作者: DAIC 时间: 2015-9-6 11:36
回复 13# meiszp
含空格的文件夹在输入的时候属于加上双引号,例如:
"Program Files"
作者: 回家路上 时间: 2015-9-6 12:06
回复 13# meiszp
(1)空格的文件夹,就将全路径加上双引号复制代码
(2)至于“’......‘不是内部命令或者外部命令......”,这。。。。你是在逗我吗??把我第一个批处理的- set "file=%%~fi"
- if "!target:%%~fi=!" equ "!target!" (
- echo;复制文件———!file!
- for /f "usebackq" %%a in ('%source%') do (
- set "ref=!file:%%a=!"
- echo;f|xcopy /y "!file!" "%target%\!ref!">nul 2>&1
- )
- )
复制代码
放到相同的位置不就行了吗
作者: meiszp 时间: 2015-9-6 21:19
回复 14# DAIC
下面的代码不需要输入文件夹名。我意思是批处理程序所在的目录文件夹名包含空格。比如D:\Program Files\1.bat ,运行1.bat就会出错。- @echo off & setlocal enabledelayedexpansion
- ::改成自己的路径,如“D:\Test”
- set "source=%~dp01"
- ::改成自己的路径
- set "target=%~dp02"
- echo;开始复制,稍等。。。。
- for /f "delims=" %%i in ('dir /b /s /a-d %source%\*.mp3') do (
- set "file=%%~fi"
- echo;复制文件———!file!
- for /f "usebackq" %%a in ('%source%') do (
- set "ref=!file:%%a\=!"
- echo;f|xcopy /y "!file!" "%target%\!ref!">nul 2>&1
- )
- )
- echo;完成。
- pause & exit /b
复制代码
作者: meiszp 时间: 2015-9-6 21:21
回复 15# 回家路上
不好意思,见笑了,真是不懂。
作者: DAIC 时间: 2015-9-6 21:39
回复 16# meiszp
dir /b /s /a-d "%source%\*.mp3"
作者: meiszp 时间: 2015-9-15 20:45
回复 15# 回家路上
您好!代码在使用时如果文件夹名有空格,就会多生成一层。此代码不影响使用,就想弄明太是什么原因造成的。
- @echo off & setlocal enabledelayedexpansion
- set "source=%~dp0"
- set "target=%~dp0copy"
- echo;开始复制,稍等。。。。
- for /f "delims=" %%i in ('dir /b /s /a-d "%source%\*.txt"') do (
- set "file=%%~fi"
- if "!target:%%~fi=!" equ "!target!" (
- echo;复制文件———!file!
- for /f "usebackq" %%a in ('%source%') do (
- set "ref=!file:%%a=!"
- echo;f|xcopy /y "!file!" "%target%\!ref!">nul 2>&1
- )
- )
- )
- echo;完成。
- pause & exit /b
复制代码
└─aaabbb
│ 提取txt文件.bat
│
├─copy
│ ├─s
│ │ ├─dlc1.1f
│ │ │ 1.1.txt
│ │ │
│ │ └─dlc6.4
│ │ 6.4.txt
│ │
│ └─t
│ ├─dlc1.4f
│ │ 1.4.txt
│ │
│ ├─dlc2.1f
│ │ 2.1.txt
│ │
│ ├─dlc3.1
│ │ 3.1.txt
│ │
│ └─dlc4.1f
│ 4.1.txt
│
├─s
│ ├─dlc1.1f
│ │ 1.1.txt
│ │
│ └─dlc6.4
│ 6.4.txt
│
└─t
├─dlc1.4f
│ 1.4.txt
│
├─dlc2.1f
│ 2.1.txt
│
├─dlc3.1
│ 3.1.txt
│
└─dlc4.1f
4.1.txt
└─aaa bbb
│ 提取txt文件.bat
│
├─copy
│ └─ bbb
│ ├─s
│ │ ├─dlc1.1f
│ │ │ 1.1.txt
│ │ │
│ │ └─dlc6.4
│ │ 6.4.txt
│ │
│ └─t
│ ├─dlc1.4f
│ │ 1.4.txt
│ │
│ ├─dlc2.1f
│ │ 2.1.txt
│ │
│ ├─dlc3.1
│ │ 3.1.txt
│ │
│ └─dlc4.1f
│
作者: meiszp 时间: 2015-9-15 20:57
本帖最后由 meiszp 于 2015-9-15 20:58 编辑
回复 7# aa77dd@163.com
在提取含有%类型的文件时,比如.%23,不能实现提取,自己看批处理都是使用两个%,就加了一个,改为.%%23成功了,可以解释下原因吗?
最近也看来些入门的教程,着实摸不着头脑,比编程语言抽象多了。如果可以的话,麻烦对之前的几个代码逐句解释下,谢谢!
作者: meiszp 时间: 2015-9-17 19:50
回复 15# 回家路上
大侠解释下20楼的问题呗。
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |