我的C驱动器上有一个特定的文件,我希望能够通过.bat脚本搜索该文件并将目录更改为包含该文件的文件夹。
到目前为止,我要做的是将搜索结果检索到一个变量中:
For /f %%i in <'where /R C:\ *testfile.jar'> do set RESULT=%%i
问题在于,找到该文件后where命令不会停止,因为它继续在整个C驱动器中搜索其他类似文件。但是,在这种情况下,我知道此文件在驱动器上仅存在一次,因此如何在找到路径后使where命令停止?
答案 0 :(得分:0)
我知道在设置变量之前无需搜索整个设备的唯一方法就是使用PowerShell。 cmd FOR
循环将在执行DO
块之前完成命令。 PowerShell管道将找到的数据推送通过。
@ECHO OFF
FOR /F "delims=" %%f IN (' ^
powershell -NoProfile -Command ^
"Get-ChildItem -Path 'C:\' -Recurse -Filter '*testfile.jar' -ErrorAction SilentlyContinue |" ^
"Select-Object -First 1 |" ^
"ForEach-Object { $_.FullName }" ^
') DO (
SET "FN=%%~f"
)
ECHO "%FN%"