我有一种方法可以从任何驱动器中找到一个 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 /?
[√]延迟扩展(参考!Expand_RunTime_Variable!
:)