无忧启动论坛

 找回密码
 注册
搜索
一次装机 终生领工资最纯净的「微PE装机优盘」UEPON大师作品好系统,装机首选好系统

「简单绿色的装机助手」盘云出品

★IDC大全★服务器租赁、托管★优惠促销★助力无忧,捐助本站,加入VIP会员
查看: 711|回复: 13

[求助] 搜索某一bat并运行的批处理命令该如何写?

[复制链接]
发表于 2018-1-11 10:58:38 | 显示全部楼层 |阅读模式
        从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文件夹所在的分区运行可以成功执行外,在其它分区都无法成功执行,不知道问题出在哪儿了。
发表于 2018-1-11 13:57:14 | 显示全部楼层
本帖最后由 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"


回复 支持 1 反对 0

使用道具 举报

发表于 2018-1-11 12:32:36 | 显示全部楼层
仅看最后一行,不要管当中用了那么复杂的东西,call "%FileName%"!

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

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

如果批处理文件所在分区没有\X\Y.bat,批处理就结束、退出了。
回复 支持 反对

使用道具 举报

发表于 2018-1-11 12:53:12 | 显示全部楼层
如果只是搜索某特定批处理并运行之,何不简单粗暴:

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

点评

形如 "c:\X\Y.CMD" “T:\让人头疼\让人头疼\让人头疼\让人头疼\让人头 疼\让人头 疼\X\Y.CMD" “K:\疼\人头疼\让头 疼\让 人头 疼\X\Y.CMD" 都执行  详情 回复 发表于 2018-1-11 13:57
回复 支持 反对

使用道具 举报

发表于 2018-1-11 15:13:20 | 显示全部楼层
本帖最后由 captain_g 于 2018-1-11 15:16 编辑

没说清楚,我的意思

set "FileName=\X\Y.bat"   

...

都不用
回复 支持 反对

使用道具 举报

发表于 2018-1-11 15:23:05 | 显示全部楼层
@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
回复 支持 反对

使用道具 举报

发表于 2018-1-11 15:23:22 | 显示全部楼层
既然是有目的地搜特定的东西,路径、文件名都就搞特定一点;

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

点评

费时?? 知道一键Ghost安装系统的时候 调用的DOS模块怎么实现一键Ghost的吗 就是全盘搜索特定文件  详情 回复 发表于 2018-1-11 21:27
确实,通常相对路径是固定的,楼主发帖要这么搞,代码就只能变复杂,效率绝对地往低下走咯。  详情 回复 发表于 2018-1-11 18:22
回复 支持 反对

使用道具 举报

发表于 2018-1-11 16:07:20 | 显示全部楼层
set "FileName=Y.bat"  指定文件
回复 支持 反对

使用道具 举报

发表于 2018-1-11 18:09:25 | 显示全部楼层
楼上都是高手 我路过学习下







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

    使用道具 举报

    发表于 2018-1-11 18:22:03 | 显示全部楼层
    captain_g 发表于 2018-1-11 15:23
    既然是有目的地搜特定的东西,路径、文件名都就搞特定一点;

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

    确实,通常相对路径是固定的,楼主发帖要这么搞,代码就只能变复杂,效率绝对地往低下走咯。
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    QQ|小黑屋|手机版|Archiver|捐助支持本站|无忧启动 ( 闽ICP备05002490号-1 )

    闽公网安备 35020302032614号

    GMT+8, 2018-9-24 23:27

    Powered by Discuz! X3.3

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表