批处理命令返回奇怪的错误

批处理命令返回奇怪的错误

我花了几个小时研究一个命令来遍历子文件夹并找到您搜索的内容,但它返回的是这个:

搜索:文本文档.txt

C:\Users\Tyler\Desktop\“文本文档.txt”

搜索完成!

“Text Doc.txt” 周围的引号让我很烦,所以我尝试正常删除它们 (set path=%path:"=%)。现在我收到一个奇怪的错误,我找不到解决方案:

\ATI这时候是没想到的。

以下是批处理文件的内容:

@echo off

set search=%*

if not [%1] == [] (
    echo(
    echo Searching for: %search%
    echo(
    for /r %cd% %%f in ("%search%") do (
        if exist %%f (
            set path=%%f
            set path=%path:"=%
            echo %path%
            echo(
        )
    )
    echo Search finished!
)

关于如何解决这个问题有什么想法吗?

答案1

首先,不要改变PATH 变量。此外,避免进一步改变Windows 环境变量,更改它们可能会导致问题。

%PATH%环境变量包含一个文件夹列表。当在 CMD 提示符下发出命令时,操作系统将首先在当前文件夹中查找可执行文件,如果未找到,则会进行扫描%PATH%以查找它。

FOR /R循环遍历文件(递归子文件夹):与该命令的其他一些变体不同,您必须在“集合”中FOR包含通配符(*或)才能获得返回的一致结果(具有语法模式)。?FOR /R [[drive:]path] %%parameter IN (set) DO command

如果要启动的话,您的脚本可以如下所示895551.bat "Text Doc.txt"(文件名用引号引起来):

@echo off
set "search=%~1"
set "myPathToFile="
if not "%~1"=="" (
    echo(
    echo Searching for: "%search%"
    echo(
    for /r "%cd%" %%f in ("%search%"*) do (
        if exist %%f (
            set "myPathToFile=%%~f"
            echo "%%~f"
            echo(
        )
    )
    echo Search finished!
) else (
    echo Nothing to search!
)
echo last found myPathToFile "%myPathToFile%"

如果启动时文件名不带引号:895551.bat Text Doc.txt那么您的脚本可以按如下方式启动:

@echo off
set "search=%*"
set "myPathToFile="
if not "%1"=="" (

必读内容:

输出:

==>895551.bat
Nothing to search!
last found myPathToFile ""

==>895551.bat "Text Doc.txt"

Searching for: "Text Doc.txt"

Search finished!
last found myPathToFile ""

==>type nul>files\"Text Doc.txt"

==>895551.bat "Text Doc.txt"

Searching for: "Text Doc.txt"

"d:\bat\files\Text Doc.txt"

Search finished!
last found myPathToFile "d:\bat\files\Text Doc.txt"

==>type nul>"files\folder 1\Text Doc.txt"

==>895551.bat "Text Doc.txt"

Searching for: "Text Doc.txt"

"d:\bat\files\Text Doc.txt"

"d:\bat\files\folder 1\Text Doc.txt"

Search finished!
last found myPathToFile "d:\bat\files\folder 1\Text Doc.txt"

==>

相关内容