Comando Batch retornando erro estranho

0

Eu passei horas trabalhando em um comando para percorrer subpastas e encontrar o que você pesquisou, mas está retornando:

Pesquisando por: Texto Doc.txt

C: \ Usuários \ Tyler \ Desktop \ "Texto Doc.txt"

Pesquisa finalizada!

As citações em torno de "Text Doc.txt" estavam me irritando, então tentei removê-las normalmente (set path =% path: "=%). Agora estou recebendo um erro estranho que não consigo encontrar uma solução para:

\ ATI foi inesperado no momento.

Aqui está o conteúdo do arquivo em lote:

@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!
)

Alguma idéia de como resolver isso?

    
por Kyza 30.03.2015 / 01:34

1 resposta

0

Primeiro, não altere a variável PATH . Além disso, evite alterar Variáveis de ambiente do Windows , alterá-las pode causar problemas.

The %PATH% environment variable contains a list of folders. When a command is issued at the CMD prompt, the operating system will first look for an executable file in the current folder, if not found it will scan %PATH% to find it.

FOR /R Efetuar loop por arquivos (subpastas Recurse) : Ao contrário de algumas outras variantes do comando FOR , você deve inclua um caractere curinga ( * ou ? ) no 'conjunto' para obter resultados consistentes retornados (com% padrão de sintaxeFOR /R [[drive:]path] %%parameter IN (set) DO command).

Seu script pode ser o seguinte, se for iniciado 895551.bat "Text Doc.txt" (com nome de arquivo entre aspas):

@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%"

Se for necessário iniciar sem aspas ao redor do nome do arquivo: 895551.bat Text Doc.txt , seu script pode começar da seguinte maneira:

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

Leitura obrigatória:

Saída:

==>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"

==>
    
por 30.03.2015 / 09:29

Tags