标题: [文件操作] 【已解决】批处理怎样历遍本地硬盘各个分区,自动复制指定类型的文件到当前文件夹? [打印本页]
作者: xzwcn 时间: 2013-3-21 18:58 标题: 【已解决】批处理怎样历遍本地硬盘各个分区,自动复制指定类型的文件到当前文件夹?
本帖最后由 xzwcn 于 2013-3-23 00:42 编辑
请教怎样历遍本地硬盘各个分区,自动复制指定类型的文件到当前文件夹(或指定)。
由于工作需要,如上Photoshop课程的时候,让学生把做好的PSD文件放在某个盘的某个目录下,但由于工作环境的设备很差。。。
(电脑的配置很多都不一样的。。。由于经济问题,机房的机子往往是由好心人捐赠或二手买回来,组建成的一个“机房”,所以上课的系统分区往往是不
同的,如有的有C,D,E盘,有的只有C盘。。。)
所以,有时候,当对学生进行测验时,想用U盘去复制做好的PSD文件,一般是一个个分区打开,看看有没有PSD(或指定类型的其它文件)再复制的。。
这样,一个个手动去打开查看,感觉太麻烦了。。
所以,请教一下各位,可不可以写一个批处理,自动对当前机器的硬盘分区历遍,搜索出指定类型的文件,然后自动复制到当前文件夹(最好先自动生成一
个文件夹)中。
参考:- 批处理遍历文件夹下的某种类型的文件并删除
- @echo off
- rem 正在搜索...
- for /f "delims=" %%i in ('dir /b /a-d /s "*.swf"') do call someAction
- rem 搜索完毕
- pause
- ::其中someAction是你要执行的动作。上面的命令是遍历当前文件夹(包含子文件夹)下的swf文件。
- ::把这些代码拷贝到文本文档中,保存为.bat文件,就可以运行了。
- ::比如我要删除掉当前文件(含子文件夹)里的所有SWF文件,可以这么写
- ::@echo off
- rem 正在搜索...
- rem 删除文件
- for /f "delims=" %%i in ('dir /b /a-d /s "*.swf"') do del %%i
- rem 删除完毕
- pause
复制代码
作者: apang 时间: 2013-3-21 22:24
- @echo off
- set wmic=wmic datafile where "drive!='%~d0' and Extension='psd'"
- for /f "tokens=2 delims==" %%a in ('%wmic% get name /value^|find "="') do (
- for /f "tokens=*" %%b in ("%%a") do xcopy "%%b" "PSD\" /y
- )
- pause
复制代码
放在U盘运行,不考虑psd文件重名情况
作者: xzwcn 时间: 2013-3-21 22:43
本帖最后由 xzwcn 于 2013-3-22 15:09 编辑
回复 2# apang
非常感谢!
我想要多两个功能:
如果遇到重名文件,则后来的将命名为XXX(2);
把原文件路径重定向到一个TXT中;
应该如何修改呢?
作者: xzwcn 时间: 2013-3-22 15:09
放在U盘运行,不考虑psd文件重名情况
apang 发表于 2013-3-21 22:24
怎样避免把当前U盘里的文件也历遍了??
作者: apang 时间: 2013-3-22 15:21
怎样避免把当前U盘里的文件也历遍了??
xzwcn 发表于 2013-3-22 15:09
莫名其妙,你测试过没有?
作者: xzwcn 时间: 2013-3-22 18:42
回复 5# apang
试过好几次,在不同电脑也试过了。会把当前盘的也复制到批处理所在的文件夹了。。
win7 32bit
xp sp2 32bit
作者: apang 时间: 2013-3-22 22:55
回复 6# xzwcn
xp sp3 32bit和win7 sp1 32bit测试没发现你说的问题,奇葩
这样试试(路径或文件名不能含 ! 号)- @echo off
- (for %%a in (c d e f g h i j k l m n o p q r s t u v w x y z) do (
- if exist "%%a:\" if /i not "%~d0"=="%%a:" (
- pushd "%%a:\"
- for /r %%b in (*.psd) do call :a "%%b"&echo,%%b
- popd
- )
- ))>List.txt
- pause&goto :eof
-
- :a
- set "Name=%~nx1"&set /a m=0
- setlocal enabledelayedexpansion
- :Lp
- if exist "%~dp0PSD\%Name%" (
- set /a m+=1
- set "Name=%~n1(!m!)%~x1"
- goto :Lp
- ) else (echo,f|xcopy "%~1" "%~dp0PSD\%Name%" /y)>nul
复制代码
作者: xzwcn 时间: 2013-3-23 00:43
回复 7# apang - @echo off
- set /p FileType=Please Input FileType:
- (for %%a in (c d e f g h i j k l m n o p q r s t u v w x y z) do (
- if exist "%%a:\" if /i not "%~d0"=="%%a:" (
- pushd "%%a:\"
- for /r %%b in (*.%FileType%) do call :a "%%b"&echo,%%b
- popd
- )
- ))>List.txt
- pause&goto :eof
-
- :a
- set "Name=%~nx1"&set /a m=0
- setlocal enabledelayedexpansion
- :Lp
- if exist "%~dp0%FileType%\%Name%" (
- set /a m+=1
- set "Name=%~n1(!m!)%~x1"
- goto :Lp
- ) else (echo,f|xcopy "%~1" "%~dp0%FileType%\%Name%" /y)>nul
复制代码
我改为可以手动输入文件类型。
作者: tangqingfu 时间: 2013-5-28 07:33
做个记号学习!
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |