无忧启动论坛

标题: 搜索某一bat并运行的批处理命令该如何写? [打印本页]

作者: 有阴也有阳    时间: 2018-1-11 10:58
标题: 搜索某一bat并运行的批处理命令该如何写?
        从C——Z搜索X文件夹里面的Y.bat,搜索到后并运行它:

@echo off
rem 指定待搜索的文件
set "FileName=\X\Y.bat"   
echo 正在搜索,请稍候...
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 (
  if exist %%a:\ (
    for /f "delims=" %%b in ('dir /a-d /s /b "%%a:\*%FileName%" 2^>nul') do (
      if /i "%%~nxb" equ "%FileName%" (
        echo,%%b
      )
    )
  )
)
call "%FileName%"

        此批处理除了在X文件夹所在的分区运行可以成功执行外,在其它分区都无法成功执行,不知道问题出在哪儿了。

作者: captain_g    时间: 2018-1-11 12:32
仅看最后一行,不要管当中用了那么复杂的东西,call "%FileName%"!

就知道,你只能运行该【批处理】所在分区中被指定为%FileName%!

在你的示例中%FileName%始终都是\X\Y.bat!

如果批处理文件所在分区没有\X\Y.bat,批处理就结束、退出了。
作者: captain_g    时间: 2018-1-11 12:53
如果只是搜索某特定批处理并运行之,何不简单粗暴:

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  if exist %%a:\X\Y.BAT call %%a:\X\Y.BAT
作者: chiannet    时间: 2018-1-11 13:57
本帖最后由 chiannet 于 2018-1-16 16:28 编辑
captain_g 发表于 2018-1-11 12:53
如果只是搜索某特定批处理并运行之,何不简单粗暴:

for %%a in (C D E F G H I J K L M N O P Q R S T  ...






@ECHO OFF

SETLOCAL ENABLEDELAYEDEXPANSION
TITLE 正在处理   %~N0 ......







SET "FILENAME=X\Y.CMD"
REM X、Y为符合windows合法文件目录名的“字符串”,可以包含字母、数字、空格等符号。










SET "T=%~1"
IF DEFINED T IF /I !T:~-4!==.CMD SET "FILENAME=%~1"
FOR /L %%J IN (0,1,1000) DO IF "!FILENAME:~%%J,1!"=="" (SET SL1=%%J&&GOTO :SL1)
:SL1
IF %SL1% LSS 2 GOTO :ER
SET /A SL11=%SL1%+1
FOR /D %%I IN ("%FILENAME%") DO SET "FN=%%~NXI"
FOR /L %%I IN (0,1,1000) DO IF "!FN:~%%I,1!"=="" (SET SL2=%%I&&SET /A SL2=%SL1%-!SL2!-1
IF !SL2! GTR 0 GOTO :BEG ELSE GOTO :ER)
CLS
:ER
ECHO.&ECHO.&ECHO.& ECHO 所提供的“%FILENAME%”对本批处理无效!&&GOTO :END
:BEG
ECHO.
ECHO.
ECHO 正在搜索并执行“!FILENAME:~0,%SL2%!”目录下的“%FN%”,请稍候...
SET /A S=0
FOR %%J 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 (IF EXIST %%J:\ (FOR /F "DELIMS=" %%I IN ('DIR /A-D /S /B "%%J:\%FN%" 2^>NUL') DO (SET "T=%%I"
IF /I "!T:~-%SL1%!"=="%FILENAME%" (IF /I "!T:~-%SL11%,1!"=="\" (ECHO 正在执行“!T!”...........&&SET /A S=!S!+1&&CALL "!T!")))))
CLS
ECHO.
IF %S% GTR 0 (ECHO 共计找到并执行“%FILENAME%”%S%次!) ELSE (ECHO 徒劳无功。)
:END
ECHO.
ECHO.
PAUSE


形如

"c:\X\Y.CMD"
“c:\疼\人头疼\让头 疼\让                         人头 疼\X\Y.CMD"
“T:\让人头疼\让人头疼\让人头疼\让人头疼\让人头 疼\让人头 疼\X\Y.CMD"
“K:\疼\人头疼\让头 疼\让                         人头 疼\X\Y.CMD"

都执行。



20180116修正了一下,能避免执行以X为结尾目录下的“Y.cmd”
"c:\xX\Y.CMD"
"t:\33333333333333333333333334               4\wwwwwwwwwwwyX\Y.CMD"



作者: captain_g    时间: 2018-1-11 15:13
本帖最后由 captain_g 于 2018-1-11 15:16 编辑

没说清楚,我的意思

set "FileName=\X\Y.bat"   

...

都不用

作者: 2012jiashanni    时间: 2018-1-11 15:23
@ECHO OFF
for %%b 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 if exist %%b:\xx.cmd set sc=%%b:
if "%sc%"=="" goto menu
call xx.cmd

:menu

作者: captain_g    时间: 2018-1-11 15:23
既然是有目的地搜特定的东西,路径、文件名都就搞特定一点;

全盘搜,不现实,批处理也很费时。
作者: fuldho    时间: 2018-1-11 16:07
set "FileName=Y.bat"  指定文件
作者: sysop    时间: 2018-1-11 18:09
楼上都是高手 我路过学习下






神奇的小尾巴:Mozilla/5.0 (Wayland; Linux x86_64; rv:58.0) Gecko/20100101 Firefox/58.0  (zh-CN)
——2018/1/11 下午6:09:26
         

作者: chiannet    时间: 2018-1-11 18:22
captain_g 发表于 2018-1-11 15:23
既然是有目的地搜特定的东西,路径、文件名都就搞特定一点;

全盘搜,不现实,批处理也很费时。

确实,通常相对路径是固定的,楼主发帖要这么搞,代码就只能变复杂,效率绝对地往低下走咯。
作者: 2012jiashanni    时间: 2018-1-11 21:27
captain_g 发表于 2018-1-11 15:23
既然是有目的地搜特定的东西,路径、文件名都就搞特定一点;

全盘搜,不现实,批处理也很费时。

费时??  知道一键Ghost安装系统的时候  调用的DOS模块怎么实现一键Ghost的吗 就是全盘搜索特定文件
作者: holley2008    时间: 2018-1-12 11:44
set "FileName=\X\Y.bat"   这句话已经定义了只搜索“这个路径下的这个bat”而不是“这个bat”,要注意活学活用~~
前几楼的回复都不错,你看看学习学习...
作者: 369963    时间: 2018-1-25 21:30
路过学习
作者: lianjiang    时间: 2018-1-26 21:10
很久不用,早忘了




欢迎光临 无忧启动论坛 (http://wuyou.net/) Powered by Discuz! X3.3