进一步阅读:

进一步阅读:

我有一种方法可以从任何驱动器中找到一个 exe 文件,而无需使用 %path%,但我需要将其设置为文件路径变量,而不仅仅是显示。

for %i 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 @%i: 2>nul && dir /s ffprobe.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 (
    @%%d: 2>nul && for /f "usebackq" %%f in (`dir /s /b ffprobe.exe`) do set "probe=%%f" && goto done
)

这是我使用答案构建的版本。由于某种原因,当路径中某处有空格时,它无法捕获整个文件路径。

答案1

改进你的代码:

用于dir /s /b获取裸文件名。

要将命令的结果dir放入变量中,请使用如下内部循环:

FOR /F "USEBACKQ" %%F IN (`dir /s /b ffprobe.exe`) DO (
SET var=%%F
)
ECHO %var%

答案2

任何生成的文件都可以设置为变量(比如最后一个),但最新的文件(按日期或版本)是最佳的。

  • 要扫描所有驱动程序:
@echo off

setlocal enabledelayedexpansion && set "_f=" && set "_ff=" && set /a "_cnt=0" 
for /f usebackq^tokens^=* %%f in (`%__AppDir__%mountvol.exe^|find.exe /i ":\"
    `)do 2>nul pushd %%~f && (set/a "_cnt+=1" && call %:^) _ff_!_cnt! & popd)
    
for /f useback^tokens^=1*delims^=^=^  %%i in (`^<nul ^<con: set _ff_^|%__AppDir__%sort.exe /r
    `)do <con: <nul call set "_ffprobe=%%~dpnxj" & call set "_ffprob_Path=%%~dpj" & goto %:^|
 
%:^)
for /f usebackq^tokens^=2^,4* %%i in =;(`2^>nul %__AppDir__%where.exe /r \ ffprobe.exe /t ^|^
    %__AppDir__%sort.exe /r^|^|exit/b`)do set "_f=%%~k" && for /f useback^delims^=. %%G in (`
        ^<con %__AppDir__%wbem\wmic.exe DataFile where name^="!_f:\=\\!" get LastModified ^|^
            %__AppDir__%findstr.exe /rb [0-9]`)do <con: <nul call set "%~1=%%~k" && exit /b 0

%:^|
<con: rem.// your code continues at this point using: & echo+!_ffprobe! & echo+!_ffprob_Path!


  • 限制仅在本地磁盘 ( DriveType=3 == HD's):
@echo off

=====setlocal enabledelayedexpansion && set/a "_cnt=0" & call set _ff=<nul & call set _f=<nul
for /f usebackq^delims^= %%i In (`%__AppDir__%wbem\wmic.exe LogicalDisk where DriveType^='3'^
    get caption^|find ":"`)do pushd %%~i && (set/a "_cnt+=1" && call %:^) _ff_!_cnt! & popd )

for /f useback^tokens^=1*delims^=^=^  %%i in (`^<nul ^<con: set _ff_^|%__AppDir__%sort.exe /r
    `)do <con: <nul call set "_ffprobe=%%~dpnxj" & call set "_ffprob_Path=%%~dpj" & goto %:^|
 
%:^)
for /f usebackq^tokens^=2^,4* %%i in =;(`2^>nul %__AppDir__%where.exe /r \ ffprobe.exe /t ^|^
    %__AppDir__%sort.exe /r^|^|exit/b`)do set "_f=%%~k" && for /f useback^delims^=. %%G in (`
        ^<con %__AppDir__%wbem\wmic.exe DataFile where name^="!_f:\=\\!" get LastModified ^|^
            %__AppDir__%findstr.exe /rb [0-9]`)do <con: <nul call set "%~1=%%~k" && exit /b 0

%:^|
<con: rem.// your code continues at this point using: & echo+!_ffprobe! & echo+!_ffprob_Path!

1.获取所有可用的驱动程序

2.扫描每个经过验证的驱动器

3.使用按大小排序的输出

4.获取 LastModified 日期

5.逐一保存上次修改日期和路径

6.使用日期反转并获取最新/最高数字


观察:扫描每个硬盘,以及每个笔式驱动器、存储卡、CD(如果驱动器上有任何媒体),请记住这可能需要一些时间...


进一步阅读:

[√]放 /?

[√]Wmic /?

[√]为了 /?

[√]对于/F

[√]MountVol /?

[√]重定向 |,<,> 2>,...

[√]转到:标签 /?| 调用:标签 /?

[√]延迟扩展(参考!Expand_RunTime_Variable!:)

[√]从 Windows 命令提示符显示所有驱动器

[√]Set variable=variable:substrings| DOS - 字符串操作

Windows 命令解释器 cmd.exe 如何解析脚本

相关内容