[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文件操作] 【已解决】批处理怎样历遍本地硬盘各个分区,自动复制指定类型的文件到当前文件夹?

本帖最后由 xzwcn 于 2013-3-23 00:42 编辑

请教怎样历遍本地硬盘各个分区,自动复制指定类型的文件到当前文件夹(或指定)。


由于工作需要,如上Photoshop课程的时候,让学生把做好的PSD文件放在某个盘的某个目录下,但由于工作环境的设备很差。。。

(电脑的配置很多都不一样的。。。由于经济问题,机房的机子往往是由好心人捐赠或二手买回来,组建成的一个“机房”,所以上课的系统分区往往是不

同的,如有的有C,D,E盘,有的只有C盘。。。)

所以,有时候,当对学生进行测验时,想用U盘去复制做好的PSD文件,一般是一个个分区打开,看看有没有PSD(或指定类型的其它文件)再复制的。。

这样,一个个手动去打开查看,感觉太麻烦了。。

所以,请教一下各位,可不可以写一个批处理,自动对当前机器的硬盘分区历遍,搜索出指定类型的文件,然后自动复制到当前文件夹(最好先自动生成一

个文件夹)中。

参考:
  1. 批处理遍历文件夹下的某种类型的文件并删除
  2. @echo off
  3. rem 正在搜索...
  4. for /f "delims=" %%i in ('dir /b /a-d /s "*.swf"') do call someAction
  5. rem 搜索完毕
  6. pause
  7. ::其中someAction是你要执行的动作。上面的命令是遍历当前文件夹(包含子文件夹)下的swf文件。
  8. ::把这些代码拷贝到文本文档中,保存为.bat文件,就可以运行了。
  9. ::比如我要删除掉当前文件(含子文件夹)里的所有SWF文件,可以这么写
  10. ::@echo off
  11. rem 正在搜索...
  12. rem 删除文件
  13. for /f "delims=" %%i in ('dir /b /a-d /s "*.swf"') do del %%i
  14. rem 删除完毕
  15. pause
复制代码
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

做个记号学习!

TOP

回复 7# apang
  1. @echo off
  2. set /p FileType=Please Input FileType:
  3. (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 (
  4.    if exist "%%a:\" if /i not "%~d0"=="%%a:" (
  5.       pushd "%%a:\"
  6.       for /r %%b in (*.%FileType%) do call :a "%%b"&echo,%%b
  7.       popd
  8.    )
  9. ))>List.txt
  10. pause&goto :eof
  11. :a
  12. set "Name=%~nx1"&set /a m=0
  13. setlocal enabledelayedexpansion
  14. :Lp
  15. if exist "%~dp0%FileType%\%Name%" (
  16.    set /a m+=1
  17.    set "Name=%~n1(!m!)%~x1"
  18.    goto :Lp
  19. ) else (echo,f|xcopy "%~1" "%~dp0%FileType%\%Name%" /y)>nul
复制代码
我改为可以手动输入文件类型。

TOP

回复 6# xzwcn


    xp sp3 32bit和win7 sp1 32bit测试没发现你说的问题,奇葩
这样试试(路径或文件名不能含 ! 号)
  1. @echo off
  2. (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 (
  3.    if exist "%%a:\" if /i not "%~d0"=="%%a:" (
  4.       pushd "%%a:\"
  5.       for /r %%b in (*.psd) do call :a "%%b"&echo,%%b
  6.       popd
  7.    )
  8. ))>List.txt
  9. pause&goto :eof
  10. :a
  11. set "Name=%~nx1"&set /a m=0
  12. setlocal enabledelayedexpansion
  13. :Lp
  14. if exist "%~dp0PSD\%Name%" (
  15.    set /a m+=1
  16.    set "Name=%~n1(!m!)%~x1"
  17.    goto :Lp
  18. ) else (echo,f|xcopy "%~1" "%~dp0PSD\%Name%" /y)>nul
复制代码
1

评分人数

    • xzwcn: 这样不会再复制当前盘的了!谢谢!技术 + 1

TOP

回复 5# apang

试过好几次,在不同电脑也试过了。会把当前盘的也复制到批处理所在的文件夹了。。
win7 32bit
xp sp2 32bit

TOP

怎样避免把当前U盘里的文件也历遍了??
xzwcn 发表于 2013-3-22 15:09



    莫名其妙,你测试过没有?

TOP

放在U盘运行,不考虑psd文件重名情况
apang 发表于 2013-3-21 22:24


怎样避免把当前U盘里的文件也历遍了??

TOP

本帖最后由 xzwcn 于 2013-3-22 15:09 编辑

回复 2# apang

非常感谢!

我想要多两个功能:

如果遇到重名文件,则后来的将命名为XXX(2);
把原文件路径重定向到一个TXT中;

应该如何修改呢?

TOP

  1. @echo off
  2. set wmic=wmic datafile where "drive!='%~d0' and Extension='psd'"
  3. for /f "tokens=2 delims==" %%a in ('%wmic% get name /value^|find "="') do (
  4.   for /f "tokens=*" %%b in ("%%a") do xcopy "%%b" "PSD\" /y
  5. )
  6. pause
复制代码
放在U盘运行,不考虑psd文件重名情况

TOP

返回列表