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

[文件操作] 【已结】批处理如何把指定名字的文件所在的文件夹自动复制到U盘

研究了好久,一直没能写出来,在网上找了些功能类似的程序进行研究,进展也不大。请各位朋友帮帮忙,谢谢!

补充一下,我想让这段程序实现的功能是:让其自动搜索“cstrike.exe”这个文件,并把这个文件所在的文件夹(名字是CS1.6,但是事先并不知道这个文件夹的名字),整个复制到正插在电脑上的U盘里。

TOP

  1. @echo off
  2. :recur
  3. for /f "delims=驱动器:\ " %%a in ('fsutil fsinfo drives^|more') do (
  4.       fsutil fsinfo drivetype %%a:|findstr %a% "可移动">nul&&(
  5.           if not defined a (
  6.              set "a=/v"&call :recur "%%a"
  7.              ) else (
  8.              for /f "delims=" %%i in ('dir /b /s %%a:\cstrike.exe') do (
  9.                    copy "%%~dpi" "%~1:\"
  10. ))))
  11. if "%~1" neq "" pause
  12. exit/b
复制代码
未测试。
心绪平和,眼藏静谧。

TOP

非常感谢斑竹的热心帮助~刚才我测试了一下,没成功。出现“驱动器未就绪”的错误提示窗口,不懂是哪里出了问题,请知道的朋友再指点和修改一下,谢谢!

TOP

  1. @echo off
  2. for /f "delims=驱动器:\ " %%a in ('fsutil fsinfo drives^|more') do (
  3.     fsutil fsinfo drivetype %%a:|find "可移动">nul && set u=%%a
  4.     if not defined u (
  5.         if not defined cs for /f "delims=" %%i in ('dir /b /s %%a:\cstrike.exe 2^>nul') do set cs=%%~dpi
  6.     )
  7. )
  8. xcopy /s/e/h/c/k/i "%cs%" %u%:\cs
  9. echo.&pause
复制代码
命令行参考:hh.exe ntcmds.chm::/ntcmds.htm
求助者请拿出诚心,别人才愿意奉献热心!
把查看手册形成条件反射!

TOP

驱动器未就绪,应该是你的U盘问题吧,或者是连接问题。
----------------------------------------------------------------------
现在才知copy不能复制文件夹,请用ZQZ版主的代码。

[ 本帖最后由 pusofalse 于 2008-9-30 19:28 编辑 ]
心绪平和,眼藏静谧。

TOP

55555.。。。。。。换了U盘了,还是不成功。U盘肯定没有问题的~麻烦大家自己测试一下看看问题再哪好吗......55555555.......

TOP

回复 7楼 的帖子

zqz版主的代码也不行吗,运行批处理,把结果信息贴上来。
心绪平和,眼藏静谧。

TOP

两位斑竹忽略了一个问题、
"%%~dpi"  这一句得到的是批处理所在盘的盘符,而不是实际文件所在的盘符。
所以会运行不正确。
仓促之间写的,代码未做优化。。。
完善代码见 11 楼
  1. @echo off
  2. :loop
  3. set str=&set "u="
  4. for /f "delims=驱动器:\ " %%a in ('fsutil fsinfo drives^|more') do (
  5.    fsutil fsinfo drivetype %%a:|findstr "可移动">nul&&set "u=%%a"
  6.    call set str=%%str%% %%a
  7. )
  8. set str=%str:~0,-1%
  9. if not defined u goto loop
  10. for %%a in (%str%) do (
  11.    cd/d %%a:
  12.    for /r %%i in ("cstrike.exe") do if exist "%%i" set "wjj=%%i"
  13. )
  14. set wjj=%wjj:"=%
  15. call :loop_1 "%wjj%"
  16. echo "%ok:~1%"
  17. xcopy /s/e/h/c/k/i "%ok:~1%" "%u%:\aaa\"
  18. start "" "%u%:\aaa"
  19. exit
  20. :loop_1
  21. for /f "tokens=1* delims=\" %%a in ("%~1") do (
  22.    if not "%%b"=="" call set ok=%%ok%%\%%a&call :loop_1 "%%b"
  23. )
  24. goto :eof
复制代码

[ 本帖最后由 随风 于 2008-10-1 11:38 编辑 ]
技术问题请到论坛发帖求助!

TOP

回复 9楼 的帖子

不解~
for /f "delims=" %%i in ('dir /b /s %%a:\cstrike.exe') do copy "%%~dpi" "%~1:\"
这样一句中的%%~dpi确实应该是文件所在的路径,请随风兄赐教~
心绪平和,眼藏静谧。

TOP

全盘搜索指定文件,并复制文件所在的父文件夹到 U 盘 aaa 文件夹内。
完整代码
全盘搜索 e n.txt 文件(有可能不止一个)把所有 e n.txt文件所在的父文件夹复制到 U 盘 aaa文件夹内。
注意  e n.txt 文件不能在根目录。
测试通过。。。
  1. @echo off&setlocal EnableDelayedExpansion
  2. set x=e n.txt
  3. :start
  4. set str=&set u=&cls&color 1f
  5. echo.&echo  正在检测 u 盘是否插入。。。
  6. for /f "delims=驱动器:\ " %%a in ('fsutil fsinfo drives^|more') do (
  7.   fsutil fsinfo drivetype %%a:|find/i "可移动驱动器" >nul&&set "u=%%a"
  8.   set str=!str! %%a
  9. )
  10. if not defined u (
  11.    cls&echo.&color cf
  12.    echo  检测到 u 盘未插入,请插入 u 盘后,按任意键继续。。。
  13.    pause>nul&goto start
  14. )
  15. set str=%str:~0,-1%
  16. for %%a in (%str%) do (
  17.   cd/d %%a:
  18.   for /r %%b in ("%x%") do (
  19.      if exist "%%b" (
  20.         set /a n+=1
  21.         set var=%%b&set var=!var:"=!
  22.         call :loop "!var!"
  23.         call set wjj!n!=%%wjj!n!:~1%%
  24. )))
  25. for /l %%a in (1 1 %n%) do (
  26.    for /f "delims=" %%b in ("!wjj%%a!") do set "mb=%%~nxb"
  27.    xcopy /e/y/h/r "!wjj%%a!" "%u%:\aaa\!mb!\"
  28. )
  29. start "" "%u%:\aaa"
  30. exit
  31. :loop
  32. for /f "tokens=1* delims=\" %%i in ("%~1") do (
  33.    if "%%j"=="" goto :eof
  34.    set wjj!n!=!wjj%n%!\%%i
  35.    call :loop "%%j"
  36. )
  37. goto :eof
复制代码
技术问题请到论坛发帖求助!

TOP

确实是我疏忽了,你的这句没问题。
但你的代码有几个问题
1,copy 不能复制文件夹
2,遍厉文件,dir远没有 for /r 快,当文件多,且层次深时,更是明显。
3,你的%a%没有开启 延迟
4,你的代码要运行 fsutil 命令两次,是否会影响效率呢?感觉 fsutil 挺费时的

zq0012005 的代码应该这句出了问题
xcopy /s/e/h/c/k/i "%cs%" %u%:\cs
"%cs%" 后面多了个 \
%u%:\cs 后面少了个 \
改为 xcopy /s/e/h/c/k/i "%cs:~0,-1%" %u%:\cs\ 应该就可以了,我也没测试,只是看代码猜的,不知道对不对,你有时间测试一下吧。

[ 本帖最后由 随风 于 2008-10-1 11:06 编辑 ]
技术问题请到论坛发帖求助!

TOP

回复 12楼 的帖子

我昨天刚刚知道copy不能复制文件夹~受教!~
另,测试不必开启延迟,%a%也会正确扩展,call了一个子过程,虽然是call自身,但还是相当于跳出了循环~测试以下代码便知:
  1. @echo off
  2. set "str=echo batch&echo bbs.bathome.net"
  3. :lp
  4. for %%i in (test) do (
  5.      (%str%)|findstr %a% "batch"
  6.      if not defined a set "a=/v"&call :lp a
  7. )
  8. if "%~1" equ "" pause
  9. set a=
复制代码
心绪平和,眼藏静谧。

TOP

回复 12楼 的帖子

多谢随风兄指正,以前没有注意到这些细节:xcopy的source文件夹末尾不能加\ ,但destination文件夹末尾加\或不加都可以

7楼代码完善如下
  1. @echo off & setlocal EnableDelayedExpansion
  2. for /f "delims=驱动器:\ " %%a in ('fsutil fsinfo drives^|more') do (
  3.     if not defined u (fsutil fsinfo drivetype %%a:|find "可移动">nul && set u=%%a)
  4.     if not defined cs if /i %%a neq !u! (
  5.         pushd %%a:\
  6.         for /r %%i in (cstrike.exe) do if exist "%%i" set cs=%%~dpi
  7.         popd
  8.     )
  9. )
  10. if not defined u (echo U盘未插入!) else xcopy /s/e/h/c/k/i "%cs:~,-1%" %u%:\cs
  11. echo.&pause
复制代码
另外,%%~dpi确实应该是文件所在的路径,兄是不是记错了?%~dp0才是批处理所在文件夹

[ 本帖最后由 zqz0012005 于 2008-10-13 11:27 编辑 ]
命令行参考:hh.exe ntcmds.chm::/ntcmds.htm
求助者请拿出诚心,别人才愿意奉献热心!
把查看手册形成条件反射!

TOP

我也问过类似于这样的问题,  也来看下 学下

TOP

返回列表