标题: [文件操作] [已解决]批处理如何搜索符合条件的目录名和rar文件,并解压缩? [打印本页]
作者: ygqiang 时间: 2015-12-6 22:59 标题: [已解决]批处理如何搜索符合条件的目录名和rar文件,并解压缩?
[已解决]xp或win7 64环境下,如何搜索符合条件的目录名和rar文件,并解压缩?
1、搜索当前所有可用盘符下含有关键字的目录名,如果始终搜索不到,退出。如果搜索到,继续执行2
2、继续搜索目录(u盘-朗科06)下符合条件的rar文件。
将搜索到的具体路径,赋值给变量aabb
3、解压缩rar文件到aabb路径下。。- if exist "C:\Program Files" set "rar=C:\Program Files\WinRAR\WinRAR.exe"
- if exist "C:\Program Files (x86)" set "rar=C:\Program Files (x86)\WinRAR\WinRAR.exe"
- echo %rar%
- 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、当前所有可用盘符代码。- 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 (
- if exist %%a:\ (set "panfu=%%a:" && goto :next)
- :next
- 。。。。
- )
复制代码
作者: pcl_test 时间: 2015-12-7 00:46
本帖最后由 pcl_test 于 2015-12-7 10:07 编辑
- @echo off
- set "rar=%ProgramFiles%\WinRAR\WinRAR.exe"
- set "fdir=u盘-朗科06"
- set files=00-00robocopy.rar 备份exe.rar SETRES.rar sed.rar
- 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 (
- if exist %%a:\ (
- for /f "delims=" %%b in ('dir /ad/b/s "%%a:\%fdir%"') do (
- cd /d "%%b"
- for /f "delims=" %%c in ('dir /a-d/b/s %files%') do (
- echo;%%c
- "%rar%" e -y "%%c" -ad
- )
- )
- )
- )
- 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文件,各自解压缩到各自的目录下。。比如:- "%rar%" x -y "f:\0000\u盘-朗科06\00需要复制的\00-00robocopy.rar" "f:\0000\u盘-朗科06\00需要复制的"
- "%rar%" x -y "e:\aabb\ccdd\u盘-朗科06\软件\2-计算机名-ip修改\备份exe.rar" "e:\aabb\ccdd\u盘-朗科06\软件\2-计算机名-ip修改"
- "%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文件,全部解压缩开。。- @echo off
- if exist "C:\Program Files" set "rar=C:\Program Files\WinRAR\WinRAR.exe"
- if exist "C:\Program Files (x86)" set "rar=C:\Program Files (x86)\WinRAR\WinRAR.exe"
- echo %rar%
-
-
- set "fdir=u盘-朗科06"
- set file=00-00robocopy.rar 备份exe.rar SETRES.rar sed.rar
-
-
- 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 (
- if exist %%a:\ (
- for /f "delims=" %%b in ('dir /ad/b/s "%%a:\%fdir%"') do (
- cd /d "%%b"
- for /f "delims=" %%c in ('dir /a-d/b/s %files%') do (
- echo;%%c
- "%rar%" x -y "%%c" "%%~dpc"
- )
- )
- )
- )
-
- cls
- ping 127.0.0.1 -n 5 >nul 2>nul
- 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文件,全部解压缩到各自的目录下。。- @echo off
- if exist "C:\Program Files" set "rar=C:\Program Files\WinRAR\WinRAR.exe"
- if exist "C:\Program Files (x86)" set "rar=C:\Program Files (x86)\WinRAR\WinRAR.exe"
- echo %rar%
-
-
- set "fdir=朗科06"
- set files=00-00robocopy.rar 备份exe.rar SETRES.rar sed.rar
-
-
- for %%a in (c) do (
- if exist %%a:\ (
- for /f "delims=" %%b in ('dir /ad/b/s "%%a:\%fdir%"') do (
- cd /d "%%b"
- pause
- for /f "delims=" %%c in ('dir /a-d/b/s %files%') do (
- echo;%%c
- pause
- "%rar%" x -y "%%c" "%%~dpc"
- pause
- )
- )
- )
- )
-
- cls
- ping 127.0.0.1 -n 5 >nul 2>nul
- 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 编辑
搞定。。- @echo off
- if exist "C:\Program Files" set "rar=C:\Program Files\WinRAR\WinRAR.exe"
- if exist "C:\Program Files (x86)" set "rar=C:\Program Files (x86)\WinRAR\WinRAR.exe"
- echo %rar%
-
-
- set "fdir=u盘-朗科06"
- set files=00-00robocopy.rar 备份exe.rar SETRES.rar sed.rar
-
-
- 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 (
- if exist %%a:\ (
- for /f "delims=" %%b in ('dir /ad/b/s %%a:\^|findstr "\\%fdir%$"') do (
- cd /d "%%b"
- for /f "delims=" %%c in ('dir /a-d/b/s %files%') do (
- echo;%%c
- "%rar%" x -y "%%c" "%%~dpc"
- )
- )
- )
- )
-
- cls
- ping 127.0.0.1 -n 5 >nul 2>nul
- exit
复制代码
作者: WHY 时间: 2015-12-7 11:31
还是建议 dir 或 for /d /r 遍历文件时使用通配符- set "fdir=朗科06"
- set "file=00-00robocopy.rar 备份exe.rar SETRES.rar sed.rar "
- for %%i in (%file%) do set _%%i=a
- set "file=%file: =? %"
-
- for %%a in (C D E F) do (
- if exist %%a:\ (
- cd /d %%a:\
- for /d /r %%b in ("%fdir%?") do (
- if /i "%%~nxb" == "%fdir%" (
- cd /d "%%~b\"
- for /r %%c in (%file%) do (
- if defined _%%~nxc (
- echo;%%c
- echo;"%rar%" x -y "%%c" "%%~dpc"
- )
- )
- )
- )
- )
- )
- pause
复制代码
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |