Board logo

标题: [文件操作] [已解决]批处理如何搜索符合条件的目录名和rar文件,并解压缩? [打印本页]

作者: ygqiang    时间: 2015-12-6 22:59     标题: [已解决]批处理如何搜索符合条件的目录名和rar文件,并解压缩?

[已解决]xp或win7 64环境下,如何搜索符合条件的目录名和rar文件,并解压缩?
1、搜索当前所有可用盘符下含有关键字的目录名,如果始终搜索不到,退出。如果搜索到,继续执行2
2、继续搜索目录(u盘-朗科06)下符合条件的rar文件。
将搜索到的具体路径,赋值给变量aabb
3、解压缩rar文件到aabb路径下。。
  1. if exist "C:\Program Files" set "rar=C:\Program Files\WinRAR\WinRAR.exe"
  2. if exist "C:\Program Files (x86)" set "rar=C:\Program Files (x86)\WinRAR\WinRAR.exe"
  3. echo %rar%
  4. winrar.exe x -y "aabb\rar文件名" "aabb"
复制代码
4、目录名关键字:u盘-朗科06。例如:
D:\0驱动-软件\udisk\sd4g\u-2G\u盘-朗科06
E:\u盘-朗科06
D:\快盘\u盘-朗科06
G:\XXX\YY\u盘-朗科06
等等。。。
5、rar文件关键字:
00-00robocopy.rar、备份exe.rar、SETRES.rar、sed.rar
6、当前所有可用盘符代码。
  1. for %%a in (D E F G H I J K L M N O P Q R S T U V W X Y Z) do (
  2. if exist %%a:\ (set "panfu=%%a:" && goto :next)
  3. :next
  4. 。。。。
复制代码

作者: pcl_test    时间: 2015-12-7 00:46

本帖最后由 pcl_test 于 2015-12-7 10:07 编辑
  1. @echo off
  2. set "rar=%ProgramFiles%\WinRAR\WinRAR.exe"
  3. set "fdir=u盘-朗科06"
  4. set files=00-00robocopy.rar 备份exe.rar SETRES.rar sed.rar
  5. for %%a in (D E F G H I J K L M N O P Q R S T U V W X Y Z) do (
  6.     if exist %%a:\ (
  7.         for /f "delims=" %%b in ('dir /ad/b/s "%%a:\%fdir%"') do (
  8.             cd /d "%%b"
  9.             for /f "delims=" %%c in ('dir /a-d/b/s %files%') do (
  10.                 echo;%%c
  11.                 "%rar%" e -y "%%c" -ad
  12.             )
  13.         )
  14.     )
  15. )
  16. pause
复制代码

作者: ygqiang    时间: 2015-12-7 07:19

本帖最后由 ygqiang 于 2015-12-7 07:22 编辑

回复 2# pcl_test

你的代码,只是将符合条件的rar文件,解压缩到u盘-朗科06目录下。
而且你给出的解压缩功能,是带目录解压缩开。
"%rar%" e -y "%%c" -ad


我需要的功能是:
将搜索到的rar文件,各自解压缩到各自的目录下。。比如:
  1. "%rar%" x -y "f:\0000\u盘-朗科06\00需要复制的\00-00robocopy.rar" "f:\0000\u盘-朗科06\00需要复制的"
  2. "%rar%" x -y "e:\aabb\ccdd\u盘-朗科06\软件\2-计算机名-ip修改\备份exe.rar" "e:\aabb\ccdd\u盘-朗科06\软件\2-计算机名-ip修改"
  3. "%rar%" x -y "d:\ef\adb\fg\u盘-朗科06\软件\系统安装\分辨率修改\SETRES.rar" "d:\ef\adb\fg\u盘-朗科06\软件\系统安装\分辨率修改"
复制代码

作者: pcl_test    时间: 2015-12-7 08:21

回复 3# ygqiang


    "%rar%" x -y "%%c"  "%%~dpc"
作者: ygqiang    时间: 2015-12-7 08:55

本帖最后由 ygqiang 于 2015-12-7 08:58 编辑

回复 4# pcl_test


你好。好像还是不行啊。。。

会将u盘-朗科06  目录下 所有的rar文件,全部解压缩开。。
  1. @echo off
  2. if exist "C:\Program Files" set "rar=C:\Program Files\WinRAR\WinRAR.exe"
  3. if exist "C:\Program Files (x86)" set "rar=C:\Program Files (x86)\WinRAR\WinRAR.exe"
  4. echo %rar%
  5. set "fdir=u盘-朗科06"
  6. set file=00-00robocopy.rar 备份exe.rar SETRES.rar sed.rar
  7. for %%a in (D E F G H I J K L M N O P Q R S T U V W X Y Z) do (
  8.     if exist %%a:\ (
  9.         for /f "delims=" %%b in ('dir /ad/b/s "%%a:\%fdir%"') do (
  10.             cd /d "%%b"
  11.             for /f "delims=" %%c in ('dir /a-d/b/s %files%') do (
  12.                 echo;%%c
  13.                 "%rar%" x -y "%%c" "%%~dpc"
  14.             )
  15.         )
  16.     )
  17. )
  18. cls
  19. ping 127.0.0.1 -n 5 >nul 2>nul
  20. exit
复制代码

作者: pcl_test    时间: 2015-12-7 09:46

回复 5# ygqiang

好神奇
作者: ygqiang    时间: 2015-12-7 09:50

本帖最后由 ygqiang 于 2015-12-7 09:54 编辑

回复 6# pcl_test


    是win7 64系统下测试的。。

            for /f "delims=" %%c in ('dir /a-d/b/s %files%') do (
                echo;%%c
pause


这里测试的时候,会显示所有文件。。
作者: pcl_test    时间: 2015-12-7 10:00

回复 7# ygqiang

所以才说神奇,而且测试2楼的代码,为啥没说出现这个问题
作者: ygqiang    时间: 2015-12-7 10:02

回复 2# pcl_test


    2楼代码,当时测试的时候,没加上其他不满足关键字的rar文件。
作者: pcl_test    时间: 2015-12-7 10:09

set files=
dir /a-d/b/s %files%
作者: WHY    时间: 2015-12-7 10:14

本帖最后由 WHY 于 2015-12-7 10:19 编辑

假设分区根目录存在一个 "u盘-朗科06" 文件夹,就会存在这种情况
用通配符就好了
dir /ad /b /s "D:\u盘-朗科06?"
作者: ygqiang    时间: 2015-12-7 10:40

本帖最后由 ygqiang 于 2015-12-7 10:50 编辑

回复 11# WHY


    测试的目录是:C:\000\新建文件夹\朗科06
下面的测试代码,会将朗科06目录下,所有的rar文件,全部解压缩到各自的目录下。。
  1. @echo off
  2. if exist "C:\Program Files" set "rar=C:\Program Files\WinRAR\WinRAR.exe"
  3. if exist "C:\Program Files (x86)" set "rar=C:\Program Files (x86)\WinRAR\WinRAR.exe"
  4. echo %rar%
  5. set "fdir=朗科06"
  6. set files=00-00robocopy.rar 备份exe.rar SETRES.rar sed.rar
  7. for %%a in (c) do (
  8.     if exist %%a:\ (
  9.         for /f "delims=" %%b in ('dir /ad/b/s "%%a:\%fdir%"') do (
  10.             cd /d "%%b"
  11. pause
  12.             for /f "delims=" %%c in ('dir /a-d/b/s %files%') do (
  13.                 echo;%%c
  14. pause
  15.                  "%rar%" x -y "%%c"  "%%~dpc"
  16. pause
  17.             )
  18.         )
  19.     )
  20. )
  21. cls
  22. ping 127.0.0.1 -n 5 >nul 2>nul
  23. exit
复制代码

作者: ygqiang    时间: 2015-12-7 10:44

回复 10# pcl_test


    set files=
dir /a-d/b/s %files%


这个执行以后,会显示当前目录下所有文件。。
作者: ygqiang    时间: 2015-12-7 10:54

本帖最后由 ygqiang 于 2015-12-7 11:03 编辑

搞定。。
  1. @echo off
  2. if exist "C:\Program Files" set "rar=C:\Program Files\WinRAR\WinRAR.exe"
  3. if exist "C:\Program Files (x86)" set "rar=C:\Program Files (x86)\WinRAR\WinRAR.exe"
  4. echo %rar%
  5. set "fdir=u盘-朗科06"
  6. set files=00-00robocopy.rar 备份exe.rar SETRES.rar sed.rar
  7. for %%a in (D E F G H I J K L M N O P Q R S T U V W X Y Z) do (
  8.     if exist %%a:\ (
  9.         for /f "delims=" %%b in ('dir /ad/b/s %%a:\^|findstr "\\%fdir%$"') do (
  10.             cd /d "%%b"
  11.             for /f "delims=" %%c in ('dir /a-d/b/s %files%') do (
  12.                 echo;%%c
  13.                 "%rar%" x -y "%%c" "%%~dpc"
  14.             )
  15.         )
  16.     )
  17. )
  18. cls
  19. ping 127.0.0.1 -n 5 >nul 2>nul
  20. exit
复制代码

作者: WHY    时间: 2015-12-7 11:31

还是建议 dir 或 for /d /r 遍历文件时使用通配符
  1. set "fdir=朗科06"
  2. set "file=00-00robocopy.rar 备份exe.rar SETRES.rar sed.rar "
  3. for %%i in (%file%) do set _%%i=a
  4. set "file=%file: =? %"
  5. for %%a in (C D E F) do (
  6.     if exist %%a:\ (
  7.         cd /d %%a:\
  8.         for /d /r %%b in ("%fdir%?") do (
  9.             if /i "%%~nxb" == "%fdir%" (
  10.                 cd /d "%%~b\"
  11.                 for /r %%c in (%file%) do (
  12.                     if defined _%%~nxc (
  13.                         echo;%%c
  14.                         echo;"%rar%" x -y "%%c"  "%%~dpc"
  15.                     )
  16.                 )
  17.             )
  18.         )
  19.     )
  20. )
  21. pause
复制代码





欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2