求一个批处理

查看 211|回复 20
作者:wszjf   
   
求一个批处理,要求如下:
运行批处理就自动搜索卷标为“八段锦”的优盘盘符,如果优盘盘符为“H”,则自动运行H:\123\abc.exe,如果优盘盘符为“K”,则自动运行K:\123\abc.exe。谢谢!
补充说明:我们只知道优盘卷标为“八段锦”,我们要通过卷标找到优盘盘符(可能是“D-Z”中的某一个),并运行优盘的123\abc.exe

优盘, 批处理, 自动运行

zjl3480   
不难,问下度娘
zjl3480   
   
[ol]@echo off
setlocal enabledelayedexpansion
set targetLabel=八段锦
set targetFile=123\abc.exe
for %%d in (A B 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 %%d:\ (
        for /f "tokens=1-2 delims=:" %%a in ('fsutil volume diskfree %%d:\') do (
            set "label="
            for /f "usebackq tokens=2 delims==" %%c in (`wmic logicaldisk where DeviceID^="%%d:" get VolumeName /value`) do (
                set "label=%%c"
            )
            if "!label!"=="%targetLabel%" (
                echo 找到目标盘符: %%d:,正在运行 %targetFile%...
                pushd %%d:\
                call %targetFile%
                popd
            )
        )
    )
)
endlocal[/ol]复制代码该脚本会遍历所有盘符,搜索卷标为"八段锦"的优盘盘符,并自动运行该盘符下的123\abc.exe。注意:如果存在多个满足条件的盘符,脚本会逐个运行它们下面的123\abc.exe文件。如果只要找到一个满足条件的盘符并运行对应的文件,可以在找到目标盘符后添加一个exit语句来终止脚本的执行。
Joe_Ye   

wszjf 发表于 2023-10-22 20:04
该脚本会遍历所有盘符,搜索卷标为"八段锦"的优盘盘符,并自动运行该盘符下的123\abc.exe。注 ...

很给力!
Joe_Ye   
如果除了优盘有目标文件,本地硬盘没有的话,其实可以忽略优盘盘符
zjl3480   
@echo off
chcp 936
set pg=123\abc.exe
set pf=八段锦
for %%i 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 (set p=%%i&&call :ch)
echo 没找到对应程序&exit
:ch
echo %p%:
if not exist %p%: goto :bk
for /f "tokens=4 delims= " %%a in ('vol %p%: ^|find /i "%pf%"') do (set pt=%%a)
if 1%pt%==1%pf% (call "%p%:\%pg%" &&exit)
:bk
exit /b
zjl3480   

wszjf 发表于 2023-10-22 20:04
该脚本会遍历所有盘符,搜索卷标为"八段锦"的优盘盘符,并自动运行该盘符下的123\abc.exe。注 ...

感谢大侠热情相助!但是,我另存为ANSI编码的bat文件双击后,却没有显示“找到目标盘符”,也没有运行abc.exe就退出了。请求大侠再次协助,不胜感激!
zjl3480   

kkkssc 发表于 2023-10-22 20:36
@echo off
chcp 936
set pg=123\abc.exe

感谢大侠热情相助!但是,我另存为ANSI编码的bat文件双击后,没有达到预期目的。请求大侠再次协助,不胜感激!
Joe_Ye   

香国妙手 发表于 2023-10-22 20:44
感谢大侠热情相助!但是,我另存为ANSI编码的bat文件双击后,没有达到预期目的。请求大侠再次协助,不胜 ...

本机亲测可以运行,其他不知道了,你直接复制改变上面盘符和程序名就可以了
zjl3480   
@echo off setlocal enabledelayedexpansion  set "volume_label=八段锦" set "executable=abc.exe"  for /f "usebackq tokens=1,2" %%a in (`wmic logicaldisk where "drivetype=2" get caption^, volumename ^| findstr /i "%volume_label%"`) do (     set "drive_letter=%%a"     set "volume_name=%%b"      rem Remove trailing spaces from volume name     for /l %%i in (1,1,30) do if "!volume_name:~-1!"==" " set "volume_name=!volume_name:~0,-1!" )  if defined drive_letter (     set "path=!drive_letter!\123\%executable%"     if exist "!path!" (         echo Running !path!         "!path!"     ) else (         echo File not found: !path!     ) ) else (     echo Specified volume label not found. )  endlocal
您需要登录后才可以回帖 登录 | 立即注册

返回顶部