标题: [文本处理] BAT如何实现列举搜索特定文件并只运行其中某个? [打印本页]
作者: crist 时间: 2013-11-3 17:29 标题: BAT如何实现列举搜索特定文件并只运行其中某个?
我制作了一个批处理,代码如下- @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 (
- for /f %%B in ('fsutil fsinfo drivetype %%A: ^| findstr /c:"固定驱动器"') do (
- FOR /F "DELIMS=" %%C IN ('DIR/A/B/S "%%B\DFRG.MSC"') DO (
- IF EXIST "%%C" "%%C"
- )
- )
- )>NUL 2>NUL
复制代码
问题是:列举的结果是多于1个DFRG.MSC,而我并不想运行C盘里面的DFRG.MSC。我只想运行C盘之外的其他盘的DFRG.MSC,并且如果其他盘的DFRG.MSC也多于1个的话,则只运行其中一个。请问代码应该如何修改?
作者: terse 时间: 2013-11-3 17:50
本帖最后由 terse 于 2013-11-3 18:18 编辑
看错把 C 去掉 不就排除了
作者: DAIC 时间: 2013-11-3 21:40
- @echo off
- 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 (
- for /f %%B in ('fsutil fsinfo drivetype %%A: ^| findstr /c:"固定驱动器"') do (
- FOR /F "DELIMS=" %%C IN ('DIR/A/B/S "%%B\DFRG.MSC"') DO (
- IF EXIST "%%C" (
- "%%C"
- goto :eof
- )
- )
- )
- )>NUL 2>NUL
复制代码
作者: crist 时间: 2013-11-8 15:13
回复 3# DAIC
考虑到要排除一个特定盘符,我将代码改成这样了- @ECHO OFF
-
- set /p target=请输入目标盘符(如 C ):
- if "%target%"=="" set target=C
- CALL :TEST
- PAUSE
- exit
-
- :TEST
- 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 (
- for /f %%B in ('fsutil fsinfo drivetype %%A: ^| findstr /c:"固定驱动器"') do (
- FOR /F "DELIMS=" %%C IN ('DIR/A/B/S "%%B\DFRG.MSC"') DO (
- IF EXIST "%%C" (
- IF /I NOT "%%~dC"=="%target%:" "%%C"
- goto :eof
- )
- )
- )
- )>nul 2>nul
复制代码
不知这个代码是否需要精简或者更正完善的地方?
作者: DAIC 时间: 2013-11-8 15:28
回复 4# crist
把排除盘符的功能放到for循环外面- @ECHO OFF
- set /p target=请输入目标盘符(如 C ):
- if "%target%"=="" set target=C
- set "allDrive=C D E F G H I J K L M N O P Q R S T U V W X Y Z"
- call set allDrive=%%allDrive:%target%=%%
- CALL :TEST
- PAUSE
- exit
-
- :TEST
- for %%A in (%allDrive%) do (
- for /f %%B in ('fsutil fsinfo drivetype %%A: ^| findstr /c:"固定驱动器"') do (
- FOR /F "DELIMS=" %%C IN ('DIR/A/B/S "%%B\DFRG.MSC"') DO (
- IF EXIST "%%C" (
- "%%C"
- goto :eof
- )
- )
- )
- )>nul 2>nul
复制代码
作者: crist 时间: 2013-11-12 12:48
回复 5# DAIC
谢谢!你的代码测试 通过,请问第五行代码为何要用call呢?
作者: DAIC 时间: 2013-11-12 13:20
回复 6# crist
变量延迟扩展
作者: crist 时间: 2013-11-16 14:13
回复 5# DAIC
你好,又发现一个问题:这个代码可以在Windows xp环境通过,但在winpe 2003通不过(Y盘是RAMDisk,存在Y:\DFRG.MSC,且Y也显示为固定驱动器),请问应该如何解决?
作者: crist 时间: 2013-11-16 15:59
回复 8# crist
原来是pe中没有自带findstr所致,问题解决。
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |