批处理 - 传递带空格的文件名,用于循环搜索

时间:2015-02-04 23:04:26

标签: batch-file search for-loop

为什么在七个地狱中这对单个单词文件名有效,而不是多个单词? ...

echo.
set /p "file=Please enter the filename, including extension: "
echo.
echo Searching for %file%, please wait...

setlocal 
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 ( 
for /f "tokens=*" %%a in ('dir /b /s /a-d %%i:\%file% 2^>nul') do (
set "found=%%a" & goto FOUND 
)) 

echo.
echo File not found 
echo.
echo Press any key to exit
pause>nul
goto :EOF

:FOUND
echo.
echo File found in %found% 
for %%A in ("%found%") do (
Set folder=%%~dpA
Set name=%%~nxA
)
cd %folder%
explorer .
echo.
echo Press any key to exit
pause>nul

代码已被修改,并在线提供各种来源...感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

我不确定你要在这里完成什么(在每个驱动器的根目录下查找指定文件?),但问题在于这一行:

for /f "tokens=*" %%a in ('dir /b /s /a-d %%i:\%file% 2^>nul') do (

你需要加上引号:%% i:\%file%

给定一个名为my file.txt的文件,循环中dir命令的输出将为:

dir /b /s /a-d c:\my file.txt 2^>nul,由于文件名中的空格,显然无效。

这会导致您的脚本正常工作:

for /f "tokens=*" %%a in ('dir /b /s /a-d "%%i:\%file%" 2^>nul') do (